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 basata su Wi-Fi o ZWave, è improbabile che ne acquisti più di un paio.

Tuttavia, potresti avere già alcune prese basate su RF a basso costo, del tipo fornito con il proprio telecomando personalizzato e sul retro alcuni selettori di canali e ID. Sfortunatamente, non ci sono hub di casa intelligente sul mercato Battle of the Smart Home Hub: Cosa c'è là fuori e cosa sta arrivando? Leggi di più che funziona con quelli. Non sarebbe bello se potessi collegarli in qualche modo al tuo sistema di casa intelligente fai-da-te? Bene, puoi - abbastanza facilmente in effetti - con circa $ 10 in parti.

Con un po 'più di lavoro, puoi anche integrare qualche altro hardware remoto basato su RF, come questo schermo cinematografico economico.

Quello di cui hai bisogno:

  • Scheda di sviluppo ESP8266 NodeMCU v12E (il modello esatto non ha importanza, anche v1 o v3 dovrebbero andare bene). Il motivo per cui stiamo usando una scheda NodeMCU è perché vogliamo la facile connessione Wi-Fi in un secondo momento. Il link è per un pacchetto di 2, che costa $ 7 ciascuno.
    instagram viewer
  • Pacchetto di Trasmettitore e ricevitore 433Mhz (circa $ 3).
  • Librerie RCSwitch e MQTT e il nostro codice - tutto disponibile per il download da Github.
  • Un server MQTT, locale o remoto.
  • Alcune prese RF controllate che funzionano su una banda di 433 mHz (dovrebbe essere sul telecomando). Ho comprato il mio da Maplin in confezione da 3 per circa £ 20 ($ 25,89).

Se è la prima volta che programmi la scheda NodeMCU, dovrai scaricare i plug-in Arduino: segui la prima parte della nostra Guida introduttiva di Arduino Killer Incontra Arduino Killer: ESP8266E se ti dicessi che esiste una scheda di sviluppo compatibile con Arduino con Wi-Fi integrato per meno di $ 10? Bene, c'è. Leggi di più per il chip NodeMCU / ESP8266. Ne avrai anche bisogno Driver CH430. Potete trovare driver macOS CH430 firmati qui, o Windows qui.

Ho usato la v1.6.5 di Arduino perché qualcosa di più alto introduce più problemi di quanti ne risolva. Esegui il downgrade se non l'hai già fatto.

Prima di procedere, assumerò un livello base di conoscenza Programmazione Arduino Programmazione Arduino per principianti: esercitazione sul progetto del controllore del semaforoCostruire un controller semaforo Arduino ti aiuta a sviluppare le competenze di base di codifica! Ti iniziamo. Leggi di più e che hai impostato NodeMCU nel gestore della scheda e sei in grado di caricare correttamente un po 'di codice demo. Dovresti anche aver aggiunto le librerie incluse nel nostro download al tuo Arduino / librerie cartella.

Se ne hai uno esistente Libreria PubSubClient o MQTT, esegui il backup e rimuovilo: quello che ho incluso nel download è l'unico in cui ho potuto ricevere in modo affidabile messaggi su NodeMCU e ho provato Un sacco!

RF Sniffing (opzionale)

Questo passaggio non è necessario se si desidera controllare solo i DIP-switch o le prese di selezione del selettore: questi sono supportati e pronti all'uso sarà necessaria una modifica minima del codice (questo è comunque interessante da fare per primo, quindi capirai cosa sta succedendo dietro scene).

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

mySwitch.enableReceive (0); // Ricevitore su interrupt 0 => ovvero pin n. 2

a 2.

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

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

  • L'estrema destra è GND. Connettersi a GND sulla scheda NodeMCU.
  • L'estrema sinistra è VCC. Connettersi a VIN sulla scheda NodeMCU.
  • Due pin centrali sono il segnale. Connetti uno a D4 su NodeMCU (sono collegati insieme, quindi non importa quale).
433 cablaggio-1

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

annusare lo schermo RF

Dopo aver fatto questo, ho scoperto che lo schermo del mio proiettore era in uso

  • SCHERMO SU: ricevuto 8694273/24 bit; Lunghezza dell'impulso: 355 o 356; Protocollo: 1
  • SCREEN DOWN: ricevuto 8694276 / 24bit;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 perni è atroce.

Il pin VCC è in realtà nel mezzo, non sul lato sinistro. Ho distrutto un modulo nel processo per capirlo. Quella cosa che dice "ATAD" è in realtà "DATI", scritto al contrario. Ancora una volta, i dati vanno a D4, da VCC a VIN e da GND a GND (rimuovere il modulo ricevitore, non è più necessario).

433 cablaggio-2

Carica il Esempi -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchese, ancora, cambia il pin di dati:

mySwitch.enableTransmit (10);

per

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. Tipo A (dip switch) e B (quadranti o cursori) sono i più comuni - fare riferimento alle immagini nella pagina RCSwitch. Per il tipo B, accendere e spegnere una presa è semplice come:

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

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

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

// Nota che il mio schermo richiede in realtà DUE pressioni di pulsanti (non una pressione prolungata, ma due fisiche preme), quindi sto ritardando un po ', quindi invio di nuovo lo stesso segnale void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (codice 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.inoe inizia modificando l'SSID e la password di rete per la tua casa. Quindi, se lo si desidera, modificare il nome del canale e impostare il server MQTT. Se non hai già un server MQTT in esecuzione sulla tua installazione OpenHAB, leggi la parte 2 della nostra guida per principianti di OpenHAB Guida per principianti OpenHAB Parte 2: ZWave, MQTT, Regole e graficiOpenHAB, il software di automazione domestica open source, supera di gran lunga le capacità di altri sistemi di automazione domestica presenti sul mercato, ma non è facile da configurare. In effetti, può essere decisamente frustrante. Leggi di più . Si noti che il mio codice è progettato per le prese di tipo B (interruttore rotante), sebbene sia possibile modificarlo facilmente anche per i DIP switch.

La parte più importante del codice è il messaggio ricevuto() funzione, che risponde ai comandi MQTT in arrivo. In questa funzione, controlliamo prima la parola chiave principale: ho scelto "cambia" e "schermo". Nel caso di "switch", analizziamo quindi l'ID del canale e della spina; quindi controlla il corpo del payload per il comando.

void messageReceived (argomento String, payload String, char * byte, lunghezza int senza segno) {if (topic.indexOf ("switch")> = 0) {// switch control, 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 (canale, plug); }} else if (topic.indexOf ("screen")> = 0) {// controllo schermo if (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * aggiungi un altro se sei qui per ascoltare altri comandi (o modifica quello sopra se non vuoi lo schermo) * / }

Per impostazione predefinita, quindi, i seguenti comandi MQTT funzionano:

soggiorno / controllo / interruttore / X / Y (dove X è canale e Y è ID spina; con il corpo del messaggio acceso o spento)
soggiorno / controllo / schermo (con il corpo del messaggio su o giù)

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

Aggiunta a OpenHAB

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

/ * Dispositivi RF433mHz * / Cambia CinemaScreen "Schermo" (Cinema) {mqtt = "> [broker: soggiorno / controllo / schermo: comando: ON: giù],> [broker: soggiorno / controllo / schermo: comando: OFF: su]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: soggiorno / controllo / switch / 4/1: comando: ON: acceso],> [broker: soggiorno / controllo / switch / 4/1: comando: OFF: off] "} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [broker: soggiorno / controllo / interruttore / 4/2: comando: ON: acceso],> [broker: soggiorno / controllo / interruttore / 4/2: comando: OFF: off] "}

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

L'unica limitazione da tenere a mente è che gli stessi socket non possono segnalare il loro stato, quindi se tu utilizzare il telecomando originale, controllare lo stato della presa potrebbe non riflettersi accuratamente all'interno OpenHAB. Cerca di usare solo l'interfaccia OpenHAB e dovresti stare bene.

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

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era un bambino.