Come controllare prese di corrente RF economiche da OpenHAB

Sono disponibili prese di corrente economiche a basso costo ma hanno scoperto che nessun hub di casa intelligente funziona con quelli? Puoi collegarli al tuo sistema di casa intelligente fai-da-te con solo circa $ 10 in parti.

Sono disponibili prese di corrente economiche a basso costo ma hanno scoperto che nessun hub di casa intelligente funziona con quelli?  Puoi collegarli al tuo sistema di casa intelligente fai-da-te con solo circa $ 10 in parti.
Annuncio pubblicitario

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 basati su RF - il tipo che viene fornito con il loro 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 che ti serve:

  • 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 dei 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 librerie incluse nel nostro download nella tua cartella Arduino / librerie .

Se hai una libreria PubSubClient o MQTT esistente, esegui il backup e rimuovila: quella che ho incluso nel download è l'unica in cui posso ricevere in modo affidabile i messaggi su NodeMCU, e ho provato molto !

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 si dispone di altri telecomandi RF che si desidera provare ad aggiungere, è necessario prima "annusare" i codici RF trasmessi. Per fare ciò, caricare lo schizzo ReceiveDemo_Advanced dal menu -> Esempi -> cartella RCSwitch e modificare la seguente riga da 0

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

a 2.

 mySwitch.enableReceive(2); // Receiver on 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).

433 cablaggio-1

Ora carica il ReceiveDemo_Advanced modificato 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.

schermo RF sniffing

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 "ATAD" è in realtà "DATA", 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).

433 cablaggio-2

Carica gli esempi -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches e, di nuovo, modifica 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 superiore) 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, sebbene più socket possano 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.

 // 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); } 

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 è la funzione messageReceived (), che risponde ai comandi MQTT in entrata. In questa funzione, per prima cosa controlliamo la parola chiave più importante: ho scelto "switch" e "screen". Nel caso di "switch", analizziamo quindi il canale e l'ID del plug-in; quindi controllare il corpo del payload per il 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) */ } 

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, il controllo dello stato del socket potrebbe non essere riflesso con precisione 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.

In this article