Aviso : este repositório atualmente não possui mantenedor ativo. Por esse motivo, o desenvolvimento é obsoleto. Considere usar um garfo ativo, como o LIFX-LAN-Client.
Uma implementação do Node.js do protocolo LIFX. Desenvolvido para trabalhar com uma versão mínima de firmware do 2.0.
Esta biblioteca não está, de forma alguma, afiliada ou relacionada à Lifi Labs, Inc. use -a por seu próprio risco.
$ npm install node-lifx --saveNode.js 0.12+ e io.js são testados e suportados no Mac, Linux e Windows.
O arquivo cli.js contém um exemplo de funcionamento.
A biblioteca usa um cliente para comunicação de rede. Este cliente lida com a comunicação com todas as luzes da rede.
var LifxClient = require ( 'node-lifx' ) . Client ;
var client = new LifxClient ( ) ;
client . init ( ) ; O objeto Client é um EventEmitter e Emmits Events sempre que ocorrem mudanças. Esta pode ser uma nova descoberta de luz, uma luz enviando uma mensagem ou similar. O cliente inicia a descoberta de luzes logo após ser inicializada com o método init . Se uma nova luz for encontrada, o cliente emmanha um evento light-new . Este evento contém a luz como um objeto em que os métodos podem ser chamados então:
var LifxClient = require ( 'node-lifx' ) . Client ;
var client = new LifxClient ( ) ;
client . on ( 'light-new' , function ( light ) {
// Change light state here
} ) ;
client . init ( ) ;Os estados de uma luz podem ser alterados com diferentes métodos:
light.on([duration], [callback])Isso acende uma luz.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
duration | int | 0 | A ativação será desbotada ao longo do tempo (em milissegundos). |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . on ( ) ; // Turns the light on instantly
light . on ( 2000 ) ; // Fading the light on over two seconds light.off([duration], [callback])Isso apaga uma luz.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
duration | int | 0 | Desligar será desbotado ao longo do tempo (em milissegundos). |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . off ( ) ; // Turns the light off instantly
light . off ( 2000 ) ; // Fading the light off over two seconds light.color(hue, saturation, brightness, [kelvin], [duration], [callback])Altera a cor de uma luz para um valor de cor HSB. Este é o método preferido para alterar a cor de uma luz.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
hue | int | Entre 0 e 360, representando o tom de cor em grau, o que muda a cor. | |
saturation | int | Entre 0 e 100, representando a intensidade da cor de 0% a 100%. | |
brightness | int | Entre 0 e 100, representando o brilho da luz de 0% a 100%. | |
kelvin | int | 3500 | Entre 2500 e 9000, representando a temperatura da cor. |
duration | int | 0 | Desbota a cor do novo valor ao longo do tempo (em milissegundos). |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . color ( 0 , 100 , 50 ) ; // Set to red at 50% brightness
light . color ( 50 , 50 , 80 , 3500 , 2000 ) ; // Set to a light green at 80% brightness over next two seconds light.colorRgbHex(hexString, [duration], [callback]) Altera a cor de uma luz para um valor de cor RGB fornecido no formato hexadecimal. Observe que o RGB representa mal a cor da luz, prefere os valores HSBK fornecidos pelo método color .
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
hexString | corda | Uma string rgb hexadecimal começando com # | |
duration | int | 0 | Desbota a cor do novo valor ao longo do tempo (em milissegundos). |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . colorRgbHex ( '#F00' ) ; // Set to red
light . colorRgbHex ( '#FFFF00' ) ; // Set to yellow light.colorRgb(red, green, blue, [duration], [callback]) Altera a cor de uma luz para um valor de cor RGB. Observe que o RGB representa mal a cor da luz, prefere os valores HSBK fornecidos pelo método color .
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
red | int | Amout de cor vermelha de 0 a 255 | |
green | int | Amout of verde de cor de 0 a 255 | |
blue | int | Amout de azul de cor de 0 a 255 | |
duration | int | 0 | Desbota a cor do novo valor ao longo do tempo (em milissegundos). |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . colorRgb ( 255 , 0 , 0 ) ; // Set to red
light . colorRgb ( 255 , 255 , 0 ) ; // Set to yellow light.maxIR(brightness, callback)Set é o brilho infravermelho máximo da luz (apenas para luzes que suportam a luz infravermelha)
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
brightness | int | Entre 0 e 100, representando o brilho da luz de 0% a 100%. | |
callback | função | function(error, data) {} |
Exemplos de uso:
light . maxIR ( 0 ) ; // Set's a maximum infrared brightness of 0
light . maxIR ( 25 ) ; // Set's a maximum infrared brightness of 25 light.getMaxIR(callback)Solicita o brilho infravermelho máximo da luz (apenas para luzes que suportam luz infravermelha)
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
brightness : 25
}Infos do estado e especificações da luz podem ser solicitados com os seguintes métodos:
light.getState(callback)Solicita informações gerais de uma luz, isso inclui cor, rótulo e estado de energia. Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
color : { hue : 120 , saturation : 0 , brightness : 100 , kelvin : 8994 } ,
power : 0 ,
label : 'Kitchen'
} light.getPower(callback)Solicita o estado de energia atual (ligado ou desligado). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
0 // off light.getFirmwareVersion(callback)Solicita a versão do firmware de uma luz leve (menor e maior). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
majorVersion : 2 ,
minorVersion : 1
} light.getHardwareVersion(callback)Solicita a versão de hardware de uma luz (fornecedor, produto e versão). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
vendorId : 1 ,
vendorName : 'LIFX' ,
productId : 1 ,
productName : 'Original 1000' ,
version : 6 ,
productFeatures : {
color : true ,
infrared : false ,
multizone : false
}
} light.getFirmwareInfo(callback)Solicita informações da unidade de micro controlador de uma luz (sinal, TX e RX). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
signal : 0 ,
tx : 0 ,
rx : 0
} light.getWifiInfo(callback)Solicita informações de WiFi de uma luz (sinal, TX e RX). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
signal : 0.000009999999747378752 ,
tx : 16584 ,
rx : 12580
} light.getWifiVersion(callback)Solicita a versão WiFi Firmware da luz (versão menor e principal). Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
{
majorVersion : 2 ,
minorVersion : 1
} light.getAmbientLight(callback)Solicita o valor da luz ambiente em fluxo da luz. Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} |
Exemplo de resultado:
null ,
10Os rótulos das luzes podem ser solicitados e definidos usando os seguintes métodos:
light.getLabel(callback, [cache])Solicita o rótulo de uma luz. Esta função é assíncrona.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
callback | função | function(error, data) {} | |
cache | booleano | falso | Use o último valor conhecido para o rótulo e não solicite a luz novamente |
Exemplo de resultado:
null ,
'Kitchen' light.setLabel(label, [callback])Define um novo rótulo para uma luz.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
label | corda | Novo rótulo com tamanho máximo de tamanho de 32 bits (que tem um comprimento de 32 com chars não unicode). | |
callback | função | nulo | function(error) {} chamado após o comando atingir a luz ou depois client.resendMaxTimes com client.resendPacketDelay , caso não o faça. error é null em caso de sucesso e é dado se o envio falhou. |
| Nota: O uso do retorno de chamada multiplica a carga de rede para este comando por duas ou mais vezes. |
Exemplos de uso:
light . setLabel ( 'Bedroom Light' ) ;
light . setLabel ( 'Kitchen Light 4' , function ( err ) {
if ( err ) { throw err ; }
console . log ( 'New light label has been set' ) ;
} ) ;client.light(identifier)Encontre uma luz na lista de todas as luzes por IP, etiqueta ou ID.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
identifier | corda | Rótulo de luz (Case Sensitive) client.light('Kitchen') , o endereço IP client.light('192.168.2.102') ou o Light ID client.light('0123456789012') |
Retorna um objeto leve que pode ser usado para chamar métodos nele. Por exemplo, client.light('192.168.2.102').on() .
client.lights([filter])Obtenha uma lista de todas as luzes conhecidas
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
filter | corda | nulo | Lista de luzes de filtro para retornar apenas ativo ( null ou 'on' ), inativo ( 'off' ) ou tudo ( '' ) |
Os seguintes eventos podem ser jogados pelo cliente.
light-new Este evento é lançado quando há uma nova descoberta de luz que nunca foi vista em tempo de execução antes. Este evento é fornecido com o novo objeto de luz. client.on('light-new', function(light) {});
light-offline Este evento é lançado quando uma luz não é descoberta por um tempo. A luz dada não é mais esperada que seja acessível. client.on('light-offline', function(light) {});
light-online Este evento é lançado quando uma luz é descoberta novamente após ficar offline. client.on('light-online', function(light) {});
A descoberta para cada cliente pode ser iniciada e parada no tempo de execução usando estes comandos:
client.startDiscovery()Inicia o processo de descoberta.
client.stopDiscovery()Interrompe o processo de descoberta.
Para a inicialização do cliente, diferentes configurações podem ser fornecidas. Este é um exemplo com as opções padrão:
var LifxClient = require ( 'node-lifx' ) . Client ;
var client = new LifxClient ( ) ;
// ...
client . init ( {
lightOfflineTolerance : 3 , // A light is offline if not seen for the given amount of discoveries
messageHandlerTimeout : 45000 , // in ms, if not answer in time an error is provided to get methods
startDiscovery : true , // start discovery after initialization
resendPacketDelay : 150 , // delay between packages if light did not receive a packet (for setting methods with callback)
resendMaxTimes : 3 , // resend packages x times if light did not receive a packet (for setting methods with callback)
debug : false , // logs all messages in console if turned on
address : '0.0.0.0' , // the IPv4 address to bind the udp connection to
broadcast : '255.255.255.255' , // set's the IPv4 broadcast address which is addressed to discover bulbs
lights : [ ] // Can be used provide a list of known light IPv4 ip addresses if broadcast packets in network are not allowed
// For example: ['192.168.0.112', '192.168.0.114'], this will then be addressed directly
} ) ;