Como controlar soquetes de energia RF baratos da OpenHAB

Tem alguns soquetes de energia baratos baseados em RF, mas descobriu que nenhum hub doméstico inteligente trabalha com eles? Você pode vinculá-los em seu sistema de casa inteligente DIY com apenas cerca de US $ 10 em partes.

Tem alguns soquetes de energia baratos baseados em RF, mas descobriu que nenhum hub doméstico inteligente trabalha com eles?  Você pode vinculá-los em seu sistema de casa inteligente DIY com apenas cerca de US $ 10 em partes.
Propaganda

Soquetes de energia inteligentes são a maneira mais simples de automatizar sua casa, mas em torno de US $ 40 cada para um soquete baseado em Wi-Fi ou ZWave, é improvável que você compre mais do que alguns.

Você pode já ter alguns soquetes baseados em RF baratos - o tipo que vem com seu próprio controle remoto personalizado, e tem alguns seletores de canal e ID na parte de trás. Infelizmente, não há hubs residenciais inteligentes no mercado. Batalha dos Hubs Smart Home: O que há por aí e o que está por vir? Batalha dos Smart Home Hubs: O que há lá fora e o que vem por aí? Leia mais que trabalhe com eles. Não seria ótimo se você pudesse vinculá-los ao seu sistema doméstico inteligente DIY de alguma forma? Bem, você pode - muito facilmente, na verdade - com cerca de US $ 10 em partes.

Com um pouco mais de trabalho, você também pode integrar alguns outros hardwares remotos baseados em RF, como essa tela de cinema econômica.

O que você precisa:

  • Placa dev ESP8266 NodeMCU v12E (o modelo exato não importa, v1 ou v3 também deve estar bom). A razão pela qual estamos usando uma placa NodeMCU é porque queremos a conexão Wi-Fi fácil mais tarde. O link é para um pacote de 2, que funciona a US $ 7 cada.
  • Pacote de 433Mhz transmissor e receptor (cerca de US $ 3).
  • Bibliotecas RCSwitch e MQTT e nosso código - todos disponíveis para download no Github.
  • Um servidor MQTT, local ou remoto.
  • Alguns soquetes controlados por RF rodando na banda de 433 MHz (deveria dizer no controle remoto). Eu comprei o meu de Maplin como um pacote de 3 por cerca de 20 libras (25, 89 dólares).

Se esta é a primeira vez que você programa a placa NodeMCU, você precisará baixar os plugins do Arduino para ela: siga com a primeira parte do nosso guia introdutório do Arduino Killer Conheça o Arduino Killer: ESP8266 Conheça o Arduino Killer: ESP8266 E se eu lhe disse que há uma placa de desenvolvimento compatível com Arduino com Wi-Fi embutido por menos de US $ 10? Bem, existe. Leia mais para o chip NodeMCU / ESP8266. Você também precisará de drivers CH430 . Você pode encontrar drivers CHOS30 macOS assinados aqui ou Windows aqui.

Eu usei v1.6.5 do Arduino porque qualquer coisa maior introduz mais problemas do que resolve. Faça o downgrade se você ainda não o fez

Antes de prosseguir, vou assumir um nível básico de conhecimento sobre programação Arduino Programação Arduino Para Iniciantes: O Controlador de Semáforo Programação Arduino Para Iniciantes: O Controlador de Semáforo Na semana passada, nós aprendemos sobre a estrutura básica de um programa Arduino e Deu uma olhada mais de perto no exemplo 'blink'. Espero que você aproveite a oportunidade para experimentar o código, ajustando os tempos. Desta vez, ... Leia Mais, e você tem sua configuração do NodeMCU no gerenciador de placa, e é capaz de carregar corretamente algum código de demonstração. Você também deve ter adicionado as bibliotecas incluídas em nosso download à sua pasta Arduino / libraries .

Se você tem uma biblioteca PubSubClient ou MQTT existente, faça o backup e remova-a - a que incluí no download é a única em que eu recebi mensagens confiáveis ​​no NodeMCU, e eu tentei muito !

RF Sniffing (Opcional)

Esta etapa não é necessária se você quiser apenas controlar os conectores do seletor DIP ou do seletor de discagem - esses são suportados fora da caixa, e uma modificação mínima de código será necessária (isso ainda é interessante fazer primeiro, então você ' ll entender o que está acontecendo nos bastidores).

Se você tiver outros controles remotos de RF que gostaria de adicionar, será necessário primeiro “farejar” os códigos de RF sendo transmitidos. Para fazer isso, carregue o esboço ReceiveDemo_Advanced da pasta Menu -> Examples -> RCSwitch e altere a linha a seguir de 0

mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2 

para 2.

 mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4. 

Conecte o módulo receptor da seguinte maneira. Olhando para a frente da placa do receptor (é o mais longo dos dois, o transmissor é quadrado) - o lado com os componentes em:

  • A extrema direita é GND. Conecte-se ao GND na placa NodeMCU.
  • A extrema esquerda é o VCC. Conecte-se ao VIN na placa NodeMCU.
  • Dois pinos intermediários são o sinal. Conecte qualquer um a D4 no NodeMCU (eles estão conectados juntos, então não importa qual).

433 fiação-1

Agora faça o upload do ReceiveDemo_Advanced modificado e, quando estiver pronto, abra o monitor serial e comece a pressionar os botões nos controles remotos. Copie o decimal (incluindo o comprimento do bit), a duração do pulso e o protocolo ao pressionar um botão.

tela RF sniffing

Depois de fazer isso, descobri que a tela do meu projetor estava usando

  • SCREEN UP: Recebeu 8694273 / 24bit; Comprimento do pulso: 355 ou 356; Protocolo: 1
  • SCREEN DOWN: Recebido 8694276 / 24bit; Comprimento do pulso: 355 ou 356; Protocolo: 1

Continue para quantos botões precisar.

Testando o Transmissor

Em seguida, vamos tentar enviar códigos usando o transmissor. Conecte o módulo do transmissor (o quadrado) da seguinte maneira. Tenha cuidado: a rotulagem desses pinos é atroz .

O pino VCC está realmente no meio, não no lado esquerdo. Eu destruí um módulo no processo de descobrir isso. Aquela coisa que diz "ATAD" é na verdade "DATA", soletrada para trás. Mais uma vez, os dados vão para D4, VCC para VIN e GND para GND (remova o módulo receptor, você não precisa mais dele).

433 fiação-2

Carregue os exemplos -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches e, novamente, altere o pino de dados:

 mySwitch.enableTransmit(10); 

para

 mySwitch.enableTransmit(2); 

Observe que uma variedade de exemplos está incluída na biblioteca e qual deles funciona para você dependerá do tipo exato de opção que você possui. Tipo A (interruptores DIP) e B (mostradores ou controles deslizantes) são os mais comuns - consulte as figuras na página RCSwitch. Para o tipo B, ligar e desligar um soquete é tão simples quanto:

 mySwitch.switchOn(1, 4); mySwitch.switchOff(1, 4); 

onde 1 é o ID do canal (o disco superior) e 4 é o ID do soquete (o disco inferior). Estas foram escritas em algarismos romanos nas minhas bases. Um máximo de 16 soquetes individuais pode, portanto, ser endereçado, embora vários soquetes possam usar o mesmo endereço se você tiver vários dispositivos para ativar de uma só vez.

No entanto, a tela do meu projetor era um pouco diferente - usava um comprimento de pulso diferente. Então, para operá-los, o seguinte funcionou. Observe que você também pode definir um protocolo diferente se o seu controle remoto precisar, MAS tenha certeza de definir o protocolo ANTES da duração do pulso. O comprimento do pulso é sobrescrito ao mudar o protocolo.

 // Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); } 

Teste todos os seus códigos estão trabalhando primeiro antes de passar para a próxima etapa.

Controlando via MQTT

Abra o esboço que você baixou do Github, chamado mqtt_rcswitch.ino, e comece modificando o SSID da rede e a senha da sua casa. Em seguida, altere o nome do canal, se desejar, e configure o servidor MQTT. Se você ainda não tem um servidor MQTT em execução na instalação do OpenHAB, leia a segunda parte do nosso guia OpenHAB para iniciantes. O OpenHAB, o software de automação residencial de código aberto, excede em muito as capacidades de outros sistemas de automação residencial no mercado - mas não é fácil de configurar. Na verdade, pode ser francamente frustrante. Consulte Mais informação . Observe que meu código é projetado para soquetes do tipo B (comutador rotativo), embora você possa modificá-lo facilmente também para os comutadores DIP.

A parte mais importante do código é a função messageReceived (), que responde aos comandos MQTT recebidos. Nesta função, estamos primeiro verificando a palavra-chave principal - eu escolhi "switch" e "screen". No caso de "switch", analisamos o canal e o ID da conexão; em seguida, verifique o corpo da carga útil para o comando.

 void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ } 

Por padrão, os seguintes comandos do MQTT funcionam:

 sala de estar / controle / switch / X / Y (onde X é o canal, e Y é o ID da tomada; com o corpo da mensagem ligado ou desligado) 
 sala de estar / controle / tela (com o corpo da mensagem para cima ou para baixo) 

Use a linha de comandos ou um cliente GUI MQTT para testar seus dispositivos antes de adicionar ao OpenHAB.

Adicionando ao OpenHAB

Como último passo, precisamos apenas criar alguns itens para esses switches no OpenHAB. Eu defini os itens a seguir por enquanto, mas você deve saber como adicionar mais:

 / * Dispositivos RF433mHz * / Alternar CinemaScreen "Tela" (Cinema) {mqtt = "> [broker: sala / controle / tela: comando: ON: baixo], > [broker: livingroom / control / screen: comando: OFF: up ] "} Switch Switch41" Switch41 "(Cinema) {mqtt ="> [corretor: sala / controle / switch / 4/1: comando: ON: on], > [corretor: sala / controle / switch / 4/1: comando: OFF: off] "} Switch Switch42" Switch42 "(Cinema) {mqtt ="> [corretor: sala / controle / switch / 4/2: comando: ON: on], > [corretor: sala / controle / switch / 4/2: comando: OFF: desligado] "} 

Agora você deve poder controlar seus dispositivos de RF a partir do OpenHAB! Uma coisa que agradavelmente me surpreendeu foi o alcance - um único nó foi capaz de cobrir a maior parte da minha casa. É claro que você pode adicionar outro nó, ouvindo o mesmo canal, que simplesmente repete os mesmos comandos, se precisar de cobertura adicional.

A única limitação a ter em mente é que os próprios soquetes não podem relatar seu status, portanto, se você usar o controle remoto original, o controle do status do soquete poderá não ser refletido com precisão no OpenHAB. Ficar usando apenas a interface OpenHAB e você deve estar bem.

Perguntas ou problemas? Pergunte nos comentários e eu farei o meu melhor para ajudar . Se você quiser melhorar meu código, sinta-se à vontade para enviar uma solicitação de recebimento.

In this article