Propaganda

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

Você já pode ter alguns soquetes baratos baseados em RF - do tipo que vem com seu próprio controle remoto personalizado e possui alguns seletores de canal e ID na parte traseira. Infelizmente, não há hubs domésticos inteligentes no mercado Batalha dos Hubs de Casa Inteligente: O que há por aí e o que está por vir? consulte Mais informação que trabalham com aqueles. Não seria ótimo se você pudesse vinculá-las ao seu sistema doméstico inteligente de alguma forma? Bem, você pode - com bastante facilidade - com cerca de US $ 10 em partes.

Com um pouco mais de trabalho, você também pode integrar outro hardware remoto baseado em RF, como esta tela de cinema orçamento.

O que você precisa:

  • Placa de desenvolvimento ESP8266 NodeMCU v12E (o modelo exato não importa, v1 ou v3 também devem estar bem). O motivo pelo 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 custa US $ 7 cada.
  • Pacote de Transmissor e receptor 433Mhz (cerca de US $ 3).
  • Bibliotecas RCSwitch e MQTT e nosso código - todos disponível para download no Github.
  • Um servidor MQTT, local ou remoto.
  • Alguns soquetes controlados por RF rodando na banda de 433 MHz (deve-se dizer no controle remoto). Comprei o meu da Maplin como um pacote de 3 por cerca de £ 20 (US $ 25,89).

Se esta é a primeira vez que você programa a placa NodeMCU, é necessário fazer o download dos plug-ins do Arduino: siga a primeira parte da nossa Guia introdutório do Arduino Killer Conheça o assassino do Arduino: ESP8266E se eu disser a você que existe uma placa de desenvolvimento compatível com Arduino com Wi-Fi embutido por menos de US $ 10? Bem, existe. consulte Mais informação para o chip NodeMCU / ESP8266. Você também precisará CH430 drivers. Você pode encontrar drivers macOS CH430 assinados aquiou Windows aqui.

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

Antes de prosseguir, assumirei um nível básico de conhecimento sobre Programação Arduino Programação do Arduino para iniciantes: Tutorial do projeto do controlador de semáforoConstruir um controlador de semáforo Arduino ajuda a desenvolver habilidades básicas de codificação! Nós começamos você. consulte Mais informação , e que você possui a configuração do NodeMCU no gerenciador de placa e pode fazer o upload correto de algum código de demonstração. Você também deve ter adicionado as bibliotecas incluídas em nosso download ao seu Arduino / bibliotecas pasta.

Se você já possui Biblioteca PubSubClient ou MQTT, faça backup e remova-o - o que incluí no download é o único em que eu posso receber mensagens de forma confiável no NodeMCU e tentei muito!

Farejador de RF (opcional)

Esta etapa não é necessária se você deseja controlar apenas os interruptores DIP ou o seletor de discagem - esses são suportados imediatamente e será necessária uma modificação mínima do código (ainda é interessante fazer isso primeiro, para que você entenda o que está acontecendo por trás do cenas).

Se você tiver outros controles remotos de RF que gostaria de adicionar, precisará primeiro "cheirar" os códigos de RF que estão sendo transmitidos. Para fazer isso, carregue o ReceiveDemo_Advanced esboço do Menu -> Exemplos -> RCSwitch pasta e altere a seguinte linha de 0

mySwitch.enableReceive (0); // Receptor na interrupção 0 => que é o pino # 2

para 2.

mySwitch.enableReceive (2); // Receptor no GPIO 2 / D4.

Conecte o módulo receptor da seguinte maneira. Olhando para a frente da placa receptora (é a mais longa das duas, o transmissor é quadrado) - o lado com os componentes:

  • A extrema direita é GND. Conecte-se ao GND na placa NodeMCU.
  • A extrema esquerda é o VCC. Conecte ao VIN na placa NodeMCU.
  • Dois pinos do meio são o sinal. Conecte um deles ao D4 no NodeMCU (eles estão conectados juntos, portanto, não importa qual).
433 fiação-1

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

sniffing de RF de tela

Depois disso, descobri que a tela do meu projetor estava usando

  • ROTEIRO: Recebido 8694273/24 bits; Comprimento de pulso: 355 ou 356; Protocolo: 1
  • TELA ABAIXO: Recebido 8694276/24 bits;Comprimento de pulso: 355 ou 356; Protocolo: 1

Continue por quantos botões você precisar.

Testando o transmissor

Em seguida, tentaremos enviar códigos usando o transmissor. Conecte o módulo do transmissor (o quadrado) da seguinte maneira. Cuidado: a etiqueta nesses pinos é atroz.

O pino VCC está realmente no meio, não no lado esquerdo. Eu destruí um módulo no processo de descobrir isso. Aquilo que diz "ATAD" é na verdade "DADOS", escrito para trás. Novamente, 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 o Exemplos -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchese, novamente, altere o pino de dados:

mySwitch.enableTransmit (10);

para

mySwitch.enableTransmit (2);

Observe que vários exemplos estão incluídos na biblioteca e qual deles funciona para você dependerá do tipo exato de opção que você possui. O tipo A (interruptores DIP) e B (mostradores ou controles deslizantes) são os mais comuns - consulte as imagens 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 mostrador superior) e 4 é o ID do soquete (o mostrador inferior). Estes foram escritos em algarismos romanos nas minhas bases. Portanto, um máximo de 16 soquetes individuais podem ser endereçados, embora vários soquetes possam usar o mesmo endereço se você tiver vários dispositivos para ligar ao mesmo tempo.

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 certifique-se de definir o protocolo ANTES da duração do pulso. O comprimento do pulso é substituído ao alterar o protocolo.

// Observe que minha tela requer DOIS pressionamentos de botão (não um toque longo, mas dois pressiona), por isso estou atrasando um pouco e depois enviando o mesmo sinal novamente void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (código decimal, número de bits) delay (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); atraso (2000); mySwitch.send (8694276,24); }

Teste todos os seus códigos antes de prosseguir para a próxima etapa.

Controlando via MQTT

Abra o esboço que você baixou do Github chamado mqtt_rcswitch.inoe comece modificando o SSID e a senha da rede da sua casa. Em seguida, altere o nome do canal, se desejar, e configure o servidor MQTT. Se você ainda não possui um servidor MQTT em execução na instalação do OpenHAB, leia a parte 2 do nosso guia para iniciantes do OpenHAB Guia do Iniciante do OpenHAB Parte 2: ZWave, MQTT, Regras e GráficosO OpenHAB, o software de automação residencial de código aberto, excede em muito os recursos de outros sistemas de automação residencial no mercado - mas não é fácil de configurar. De fato, pode ser completamente frustrante. consulte Mais informação . Observe que meu código foi desenvolvido para soquetes do tipo B (chave rotativa), embora você possa modificá-lo facilmente também para chaves DIP.

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

void messageReceived (Tópico de string, carga útil de String, char * bytes, comprimento int sem sinal) {if (topic.indexOf ("switch")> = 0) {// alterna o controle, analisa o canal e o ID do plug int channel = getValue (tópico, '/', 3) .toInt (); int plug = getValue (tópico, '/', 4). toInt (); if (carga == "on") {mySwitch.switchOn (canal, plug); } else {mySwitch.switchOff (canal, plug); }} else if (topic.indexOf ("screen")> = 0) {// controle de tela if (payload == "up") {screenUp (); } if if (payload == "down") {screenDown (); }} / * adicione outro item se estiver aqui para ouvir mais comandos (ou apenas modifique o comando acima se você não quiser a tela) * / }

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

sala / controle / chave / X / Y (onde X é o canal e Y é o ID do plug; com o corpo da mensagem ativado ou desativado)
sala / controle / tela (com o corpo da mensagem para cima ou para baixo)

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

Adicionando ao OpenHAB

Como última etapa, precisamos apenas criar alguns itens para essas opções no OpenHAB. Eu defini os seguintes itens por enquanto, mas você deve descobrir como adicionar mais:

/ * Dispositivos RF433mHz * / Alterne "Tela" do CinemaScreen (Cinema) {mqtt = "> [intermediário: sala / controle / tela: comando: LIGADO: para baixo],> [intermediário: sala / controle / tela: comando: DESLIGADO: ativo]}} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [corretor: sala de estar / controle / chave / 4/1: comando: LIGADO: ativado],> [corretor: sala de estar / controle / chave / 4/1: comando: DESLIGADO: fora]"} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [corretor: sala de estar / controle / chave / 4/2: comando: LIGADO: ativado],> [corretor: sala de estar / controle / chave / 4/2: comando: DESLIGADO: fora]"}

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

A única limitação a ter em mente é que os soquetes não podem relatar seu status; portanto, se você use o controle remoto original, controle o status do soquete pode não ser refletido com precisão OpenHAB. Continue usando apenas a interface do OpenHAB e você deve ficar bem.

Dúvidas ou problemas? Pergunte nos comentários e farei o possível para ajudar. Se você deseja melhorar meu código, sinta-se à vontade para enviar uma solicitação de recebimento.

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.