Come controllare prese di corrente RF economiche da OpenHAB

Come controllare prese di corrente RF economiche da OpenHAB / Casa intelligente

Le prese di corrente intelligenti sono il modo più semplice per automatizzare la tua casa, ma a circa $ 40 ciascuna per una presa Wi-Fi o ZWave, è improbabile che ne acquisti più di poche.

Potresti già avere alcuni socket economici RF - il tipo che viene fornito con il proprio telecomando personalizzato, e alcuni selettori di canale e ID sul retro. Sfortunatamente, non ci sono hub di casa intelligenti sul mercato Battaglia degli hub di Smart Home: cosa c'è là fuori e cosa sta arrivando? Battle of the Smart Home Hub: cosa c'è là fuori e cosa sta arrivando? Leggi di più che funzionano con quelli. Non sarebbe bello se potessi collegarli in qualche modo al tuo sistema di casa intelligente fai-da-te? Bene, è possibile - abbastanza facilmente in effetti - con circa $ 10 in parti.

Con un po 'più di lavoro, puoi anche integrare altri hardware remoti su misura basati su RF, come questo schermo cinematografico budget.

Quello di cui hai bisogno:

  • Scheda di sviluppo ESP8266 NodeMCU v12E (il modello esatto non ha importanza, v1 o v3 dovrebbe andare bene). Il motivo per cui utilizziamo una scheda NodeMCU è perché vogliamo la semplice connessione Wi-Fi in seguito. Il collegamento è per un pacchetto di 2, che funziona a $ 7 ciascuno.
  • Pacchetto di trasmettitore e ricevitore 433 Mhz (circa $ 3).
  • Librerie RCSwitch e MQTT e il nostro codice - tutti disponibili per il download da Github.
  • Un server MQTT, locale o remoto.
  • Alcune prese controllate da RF che funzionano su una banda 433 mHz (dovrebbe dirsi sul telecomando). Ho comprato il mio da Maplin come un pacchetto di 3 per circa £ 20 ($ 25,89).

Se è la prima volta che si programma la scheda NodeMCU, è necessario scaricare i plug-in di Arduino: seguire la prima parte della guida introduttiva di Arduino Killer. Incontra l'assassino di Arduino: ESP8266 Incontra l'assassino di Arduino: ESP8266 Cosa succede se ti ha detto che c'è una scheda di sviluppo compatibile con Arduino con Wi-Fi integrato per meno di $ 10? Bene, c'è. Maggiori informazioni sul chip NodeMCU / ESP8266. Avrai anche bisogno di Driver CH430. Qui puoi trovare i driver macOS CH430 firmati o Windows.

Ho usato la v1.6.5 di Arduino perché qualcosa di più alto introduce più problemi di quanti ne risolva. Downgrade se non lo hai già fatto.

Prima di procedere, assumerò un livello base di conoscenza della programmazione Arduino Arduino Programming For Beginners: Il semaforo del programmatore Arduino Programming For Beginners: The Traffic Light Controller La scorsa settimana, abbiamo appreso la struttura di base di un programma Arduino e abbiamo dato un'occhiata più da vicino all'esempio "lampeggiante". Spero che tu abbia colto l'opportunità per sperimentare il codice, regolando i tempi. Questa volta, ... Leggi di più, e che hai il tuo setup NodeMCU nel board manager, e sei in grado di caricare correttamente del codice demo. Dovresti anche aver aggiunto le tue librerie incluse nel nostro download al tuo Arduino / librerie cartella.

Se hai un esistente Libreria PubSubClient o MQTT, backup e rimuoverlo - quello che ho incluso nel download è l'unico in cui posso ricevere in modo affidabile i messaggi su NodeMCU, e ho provato Un sacco!

RF Sniffing (Opzionale)

Questo passaggio non è necessario se si desidera controllare solo gli interruttori DIP o gli spin di selezione dei selettori - quelli sono supportati immediatamente, e sarà necessaria una modifica minima del codice (questo è comunque interessante da fare prima, quindi, così tu capiremo cosa sta succedendo dietro le quinte).

Se hai altri telecomandi RF che vorresti provare ad aggiungere, dovrai prima farlo “annusare” i codici RF trasmessi. Per fare ciò, caricare il ReceiveDemo_Advanced schizzo dal Menu -> Esempi -> RCSwitch cartella e modificare la seguente riga da 0

mySwitch.enableReceive (0); // Receiver on interrupt 0 => che è il pin # 2

a 2.

mySwitch.enableReceive (2); // Ricevitore su GPIO 2 / D4.

Collegare il modulo ricevitore come segue. Guardando la parte anteriore della scheda del ricevitore (è il più lungo dei due, il trasmettitore è quadrato) - il lato con i componenti su:

  • L'estrema destra è GND. Connetti a GND sulla scheda NodeMCU.
  • L'estrema sinistra è VCC. Connettersi a VIN sulla scheda NodeMCU.
  • I due pin centrali sono il segnale. Collega uno a D4 sul NodeMCU (sono collegati insieme, quindi non importa quale).

Ora carica il modificato ReceiveDemo_Advanced, e quando è finito, apri il monitor seriale e inizia a premere i pulsanti sui telecomandi. Copia il decimale (inclusa la lunghezza del bit), la durata dell'impulso e il protocollo quando premi un pulsante.

Dopo averlo fatto, ho trovato che lo schermo del mio proiettore stava usando

  • SCHERMATA: Ricevuta 8694273/24 bit; Lunghezza dell'impulso: 355 o 356; Protocollo: 1
  • SCHERMO: Ricevuto 8694276/24 bit; Lunghezza dell'impulso: 355 o 356; Protocollo: 1

Continua per tutti i pulsanti di cui hai bisogno.

Test del trasmettitore

Successivamente, proveremo a inviare i codici utilizzando il trasmettitore. Cablare il modulo trasmettitore (quello quadrato) come segue. Fai attenzione: l'etichettatura su questi pin è atroce.

Il pin VCC è in realtà nel mezzo, non sul lato sinistro. Ho distrutto un modulo nel processo di capire questo. Quella cosa che dice “UN PO” è effettivamente “DATI”, scritto all'indietro. Di nuovo, i dati vanno a D4, VCC a VIN e GND a GND (rimuovi il modulo ricevitore, non ne hai più bisogno).

Carica il Esempi -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, e ancora, cambia il pin dati:

mySwitch.enableTransmit (10);

a

mySwitch.enableTransmit (2);

Nota, una varietà di esempi sono inclusi nella libreria, e quale funziona per te dipenderà dal tipo esatto di switch che hai. Il tipo A (dip switch) e B (dial o slider) sono i più comuni - fare riferimento alle immagini sulla pagina RCSwitch. Per il tipo B, accendere e spegnere un socket è semplice come:

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

dove 1 è l'ID del canale (il quadrante in alto) e 4 è l'ID del socket (il quadrante inferiore). Questi sono stati scritti in numeri romani sulle mie prese. È quindi possibile indirizzare un massimo di 16 prese individuali, anche se più socket possono utilizzare lo stesso indirizzo se si hanno più dispositivi da accendere contemporaneamente.

Tuttavia, lo schermo del mio proiettore era leggermente diverso: utilizzava una diversa durata dell'impulso. Quindi, per operare quelli, ha funzionato. Nota che puoi anche definire un protocollo diverso se il tuo telecomando lo richiede, MA assicurati di definire il protocollo PRIMA della durata dell'impulso. La durata dell'impulso viene sovrascritta quando si modifica il protocollo.

 // Si noti che il mio schermo richiede effettivamente due pressioni di pulsante (non una pressione prolungata, ma due pressioni fisiche), quindi sto ritardando un po 'quindi inviando nuovamente lo stesso segnale void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimale, numero di bit) ritardo (2000); mySwitch.send (8694273,24);  void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); ritardo (2000); mySwitch.send (8694276,24);  

Verifica che tutti i tuoi codici funzionino prima di passare al passaggio successivo.

Controllo tramite MQTT

Apri lo schizzo scaricato da Github denominato mqtt_rcswitch.ino, e inizia modificando il SSID di rete e la password per la tua casa. Quindi, modificare il nome del canale, se lo si desidera, e impostare il server MQTT. Se non hai già un server MQTT in esecuzione su OpenHAB, leggi la parte 2 della nostra guida per principianti OpenHAB Guida per principianti OpenHAB Parte 2: ZWave, MQTT, Regole e grafici OpenHAB Guida per principianti Parte 2: ZWave, MQTT, Regole e grafici OpenHAB, il software di domotica open source, supera di gran lunga le capacità di altri sistemi di automazione domestica sul mercato, ma non è facile da installare. In effetti, può essere addirittura frustrante. Leggi di più . Si noti che il mio codice è progettato per socket di tipo B (rotary switch), sebbene sia possibile modificarlo facilmente anche per gli interruttori DIP.

La parte più importante del codice è il messaggio ricevuto() funzione, che risponde ai comandi MQTT in entrata. In questa funzione, stiamo prima controllando la parola chiave più importante, ho scelto “interruttore” e “schermo”. In caso di “interruttore”, quindi analizziamo il canale e l'ID del plug-in; quindi controllare il corpo del payload per il comando.

 void messageReceived (argomento String, payload String, char * byte, lunghezza int unsigned) if (topic.indexOf ("switch")> = 0) // cambia controllo, analizza il canale e plug id int channel = getValue ( argomento, '/', 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 ();  / * aggiungi un altro altro se qui per ascoltare altri comandi (o semplicemente modifica quello sopra se non vuoi lo schermo) * / 

Per impostazione predefinita, i seguenti comandi MQTT funzionano:

livingroom / control / switch / X / Y (dove X è il canale, e Y è plug ID, con il corpo del messaggio attivato o disattivato)
soggiorno / controllo / schermo (con il corpo del messaggio su o giù)

Utilizzare la riga di comando o un client GUI MQTT per testare i dispositivi prima di aggiungerli a OpenHAB.

Aggiunta a OpenHAB

Come ultimo passaggio, abbiamo solo bisogno di creare alcuni elementi per questi switch in OpenHAB. Per ora ho definito i seguenti elementi, ma dovresti essere in grado di capire come aggiungere altro:

/ * Dispositivi RF433mHz * / Switch CinemaScreen "Schermo" (Cinema) mqtt = "> [broker: livingroom / control / screen: comando: ON: giù],> [broker: livingroom / control / screen: comando: OFF: su ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [broker: livingroom / control / switch / 4/1: comando: ON: on],> [broker: livingroom / control / switch / 4/1: comando: OFF: off] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [broker: livingroom / control / switch / 4/2: comando: ON: on],> [broker: livingroom / control / switch / 4/2: comando: OFF: off] " 

Ora dovresti essere in grado di controllare i tuoi dispositivi RF da OpenHAB! Una cosa che mi ha piacevolmente sorpreso è stata la gamma: un singolo nodo è stato in grado di coprire la maggior parte della mia casa. Ovviamente puoi aggiungere un altro nodo, ascoltando lo stesso canale, che ripete semplicemente gli stessi comandi, se hai bisogno di ulteriore copertura.

L'unica limitazione da tenere a mente è che le prese stesse non possono riportare il loro stato, quindi se si utilizza il telecomando originale, controllare lo stato del socket potrebbe non essere riflesso in modo corretto all'interno di OpenHAB. Attenersi a utilizzare solo l'interfaccia OpenHAB e si dovrebbe andare bene.

Domande o problemi? Chiedi via nei commenti, e farò del mio meglio per aiutarti. Se desideri migliorare il mio codice, sentiti libero di inviare una richiesta di pull.

Scopri di più su: Home Automation, Smart Plugs.