Guida per principianti di OpenHAB Parte 2: ZWave, MQTT, regole e grafici

Guida per principianti di OpenHAB Parte 2: ZWave, MQTT, regole e grafici

Gratuito non significa sempre 'non buono come pagato' e OpenHAB non fa eccezione. Il software di automazione domestica open source supera di gran lunga le capacità di qualsiasi altro sistema di automazione domestica sul mercato, ma non è facile da configurare. In effetti, può essere decisamente frustrante.





Nella parte 1 della guida, ti ho guidato attraverso installazione di OpenHAB su un Raspberry Pi , ha introdotto i concetti fondamentali di OpenHAB e ti ha mostrato come aggiungere i tuoi primi elementi nel sistema. Oggi andremo oltre:





  • Aggiunta di dispositivi ZWave
  • Aggiunta di un controller Harmony Ultimate
  • Introduzione delle regole
  • Presentazione di MQTT e installazione di un broker MQTT sul tuo Pi, con sensori su un Arduino
  • Registrare i dati e rappresentarli graficamente

Introduzione a Z-Wave

Z-Wave è stato per anni il protocollo di automazione domestica dominante: è affidabile, è stato ampiamente sviluppato e funziona su un raggio molto più lungo rispetto a qualsiasi altro prodotto per la casa intelligente. Sono disponibili centinaia di sensori Z-Wave che eseguono un'ampia gamma di attività. ApriHAB Potere funziona con Z-Wave, ma è una seccatura da configurare e l'affidabilità non è garantita.





Se stai considerando l'acquisto di una casa piena di sensori Z-Wave appositamente per l'uso con OpenHAB, ti esorto a riconsiderare. Potrebbe funzionare alla grande per te, o potrebbe essere afflitto da problemi piccoli ma persistenti. Almeno, non comprare una casa piena di sensori finché non hai avuto la possibilità di provarne alcuni. L'unico motivo per scegliere Z-Wave è se non sei soddisfatto al 100% su OpenHAB e desideri lasciare aperte le tue opzioni in futuro: Z-Wave, ad esempio, funziona con l'hub Samsung SmartThings, così come gli hub specifici di Z-Wave come Homeseer e una gamma di altre opzioni software come domotica .

Sebbene OpenHAB includa un collegamento Z-Wave, è comunque necessario configurare prima la rete Z-Wave , prima che OpenHAB possa iniziare a interrogarlo per i dati. Se hai una scheda controller Rasberry, hai del software in dotazione per la configurazione della rete, quindi non lo tratteremo qui. Se hai acquistato un controller Z-Stick USB Aeotec o simile, probabilmente non hai alcun software incluso, quindi continua a leggere.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB per creare gateway (ordinario bianco) ACQUISTA ORA SU AMAZON

Se hai già una configurazione di rete Z-Wave , puoi semplicemente collegare il controller al Pi e iniziare a configurare l'associazione e gli elementi. Se questa è la tua prima incursione in Z-Wave, è un po' più complesso.

Innanzitutto, dal lato hardware: ogni controller ha il proprio modo di associarsi ai dispositivi (tecnicamente noto come 'modalità di inclusione' in cui viene assegnato un ID di nodo). Nel caso dell'Aotec Z-Stick, ciò significa scollegarlo dalla porta USB e premere il pulsante una volta per metterlo in modalità di inclusione. Quindi avvicinalo al dispositivo che stai accoppiando e premi il pulsante di inclusione anche su quello (anche questo varierà: la mia presa Everspring richiede che il pulsante venga premuto 3 volte in rapida successione, quindi la lezione qui è leggere il manuale del tuo dispositivo) .





La Z-Stick lampeggia brevemente per indicare il successo. Ciò presenta problemi quando lo si ricollega al Pi, poiché viene assegnata una nuova porta. Riavvia il tuo Pi per farlo ripristinare alla porta standard se trovi che è stato riassegnato dinamicamente a un altro. Ancora meglio: non collegarlo al Pi finché non hai eseguito prima tutti gli accoppiamenti hardware.

Installazione di attacchi HABmin e Z-Wave

Poiché OpenHAB in realtà non è un'utilità di configurazione per Z-Wave, installeremo un altro strumento di gestione web che lo fa, qualcosa chiamato HABmin. Dirigiti verso il Archivio HABmin Github scaricare la versione corrente. Una volta decompresso, troverai 2 .barattolo file nella directory dei componenti aggiuntivi – questi dovrebbero essere inseriti nella corrispondente directory dei componenti aggiuntivi nella tua condivisione di OpenHAB Home (se stai usando anche l'Aotec gen5 Z-Stick, assicurati di avere almeno la versione 1.8 dell'attacco Z-Wave) .





Quindi, crea una nuova cartella nella directory webapps e chiamala 'habmin' (il minuscolo è importante). Copia il resto dei file scaricati lì.

Nota: c'è anche un HABmin 2 in fase di sviluppo attivo. L'installazione è più o meno la stessa ma con un addon .jar aggiuntivo. Potrebbe valere la pena provare entrambi solo per vedere quale preferisci.

Se non l'hai già fatto, collega il controller al Pi. Digitare quanto segue per trovare la porta corretta.

ls /dev/tty*

Stai cercando qualcosa con USB nel nome, o nel mio caso particolare, lo Z-stick si è presentato come /dev/ttyACM0 (un modem). Potrebbe essere più semplice eseguire il comando una volta prima di collegarlo e una volta dopo, così puoi vedere cosa cambia se non sei sicuro.

Apri il file di configurazione di OpenHAB e modifica la sezione su Z-Wave, decommentando entrambe le righe e inserendo il tuo indirizzo effettivo del dispositivo. Un ultimo passaggio per me è stato consentire all'utente OpenHAB di accedere al modem.

sudo usermod -a -G dialout openhab

Ora, per avviare tutto, riavvia OpenHAB

sudo service openhab riavvio

Si spera che se stai controllando il registro di debug, vedrai qualcosa di simile. Congratulazioni, ora stai parlando di Z-Wave. Potresti anche trovare il registro di debug inondato di messaggi da vari nodi Z-Wave. Iniziamo controllando HABMIN per vedere cosa ha trovato: http://openhab.local:8080/habmin/index.html (sostituendo openhab.local con il tuo hostname o indirizzo IP Raspberry Pi).

C'è molto da vedere in HABMIN, ma ci interessa solo il Configurazione -> Binding -> Z-Wave -> Dispositivi scheda, come puoi vedere di seguito. Espandi il nodo per modificare la posizione e l'etichetta del nome per facilità di riferimento.

Configurazione degli elementi Z-Wave

Ogni dispositivo Z-Wave avrà una configurazione specifica per OpenHAB. Per fortuna, la maggior parte dei dispositivi è già stata esplorata e ci saranno già esempi per il tuo. La configurazione di dispositivi personalizzati che non vengono riconosciuti va ben oltre lo scopo di questa guida, ma supponiamo che sia supportata per ora.

Innanzitutto, ho un interruttore di alimentazione e un misuratore Everspring AN158 di base sul Nodo 3. Una rapida ricerca su Google mi ha portato a un post sul blog su Wetwa.re, con una configurazione di elemento di esempio. L'ho adattato come segue:

Switch Dehumidifier_Switch 'Deumidificatore' {zwave='3:command=switch_binary'}

Number Dehumidifier_Watts 'Consumo energetico del deumidificatore [%.1f W]' { zwave='3:command=meter' }

Perfetto.

Il prossimo è un multisensore Aeotec Gen5.

Multisensore Aeon Labs Aeotec Z-Wave Gen5 (Z-Wave Plus) ACQUISTA ORA SU AMAZON

Per questo, ho trovato una configurazione di esempio su iwasdot.com e il mio multisensore è sul nodo 2.

Numero Hallway_Temperature 'Temperatura corridoio [%.1f °C]' (Corridoio, Temperatura) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Numero Hallway_Humidity 'Hallway Humidity [%.0f %%]' (Corridoio, Umidità) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Numero Hallway_Luminance 'Luminanza corridoio [%.0f Lux]' (Corridoio) {zwave='2:0:comando=sensor_multilevel,sensor_type=3'}

Contatta Hallway_Motion 'Movimento corridoio [%s]' (corridoio, movimento) {zwave='2:0:comando=sensor_binary,respond_to_basic=true'}

Numero sensor_1_battery 'Batteria [%s %%]' (Movimento) {zwave='2:0:comando=batteria'}

Se il formato di questo ti sembra strano, torna al primo guida per principianti , in particolare la sezione relativa all'associazione di tonalità, dove spiego come vengono aggiunti gli elementi. Probabilmente avrai solo bisogno di copiare e incollare esempi come questo, ma nel caso tu abbia un nuovo dispositivo, la documentazione vincolante dettaglia tutte le comandi .

Rilegatura Logitech Harmony

Prima di passare alle regole, volevo aggiungere una breve nota su come lavorare con l'associazione Harmony. Sono un grande fan della serie Harmony di telecomandi di ultima generazione per semplificare l'esperienza del media center domestico, ma spesso rappresentano un sistema separato all'interno della casa intelligente. Con OpenHAB, le attività di Logitech Harmony e il controllo completo dei dispositivi possono ora far parte del tuo sistema centralizzato e persino essere inclusi nelle regole di automazione.

Inizia installando i tre file di associazione che trovi utilizzando apt-cache per cercare 'armonia':

Non dimenticare di chown la directory dei binding di nuovo quando hai finito:

sudo apt-get install openhab-addon-action-harmonyhub

sudo apt-get install openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab:openhab /usr/share/openhab

Per configurare l'associazione, apri il file openhab.cfg e aggiungi una nuova sezione come segue:

########## TELECOMANDI HARMONY ##########

Harmonyhub: host = 192.168.1.181 o il tuo IP

Harmonyhub:nomeutente= your-harmony-e-mail-login

Harmonyhub:password= la tua password

L'indirizzo IP è quello del tuo hub Harmony. Usa uno scanner di rete per scoprirlo. Dovrai anche inserire i tuoi dati di accesso, quelli che inserisci quando avvii l'utilità di configurazione standard di Harmony. Questo è tutto. Al riavvio di Hue, il registro di debug dovrebbe avere un'improvvisa raffica di output dall'associazione.

Questo è un elenco in formato JSON di tutte le tue attività, dispositivi e comandi che possono essere inviati. È una buona idea copiarlo per riferimento futuro. puoi rendere ancora più facile la lettura con i nodi comprimibili incollandoli in un formattatore JSON online come questo .

Oltre all'attività PowerOff standard che è un'impostazione predefinita, troverai le tue attività definite elencate qui per nome. Ora creiamo un semplice controllo con un pulsante per avviare le attività. Innanzitutto, nel file degli articoli, aggiungi la seguente riga. Modifica il gruppo e l'icona se lo desideri.

/* Centro Armonia */

String Harmony_Activity 'Harmony [%s]' (Soggiorno) {harmonyhub='*[currentActivity]' }

Questo è un rilegatura di stringhe a due vie , che è in grado sia di recuperare l'attività corrente, sia di comandare all'attività corrente di essere qualcos'altro. Ora possiamo creare un pulsante per questo, nel file della mappa del sito.

Switch item=Harmony_Activity mapping=[PowerOff='Off',Exercise='Esercizio',13858434='TV',Karaoke='Karaoke']

come eliminare un file aperto in un altro programma

Nella parentesi quadra vedrai ogni attività insieme all'etichetta. Generalmente puoi fare riferimento direttamente alle attività come le hai chiamate sul telecomando, ma l'eccezione a questo che ho trovato era qualsiasi cosa con uno spazio nel nome dell'attività, come 'Guarda la TV'. In questo caso, dovrai utilizzare l'ID attività. Di nuovo, puoi trovare l'ID nell'output di debug JSON. Salva e aggiorna la tua interfaccia, dovresti vedere qualcosa di simile a questo:

Puoi anche fare riferimento alle attività nelle tue regole, come vedremo in seguito. Leggi la pagina wiki per maggiori informazioni sul Armonia vincolante .

Un'introduzione generale alle regole

La maggior parte degli hub di casa intelligente include una sorta di creazione di regole in modo da poter reagire automaticamente ai dati dei sensori e agli eventi in casa. In effetti, direi che una casa veramente intelligente non è quella di cui hai bisogno per passare il tempo a interagire con le app mobili: è invisibile all'utente finale e completamente automatizzata. A tal fine, OpenHAB include anche un potente linguaggio di scripting delle regole che è possibile programmare, superando di gran lunga la complessità della maggior parte degli hub domestici intelligenti o delle ricette IFTTT.

Le regole di programmazione suonano peggio di quello che sono. Iniziamo in modo semplice con un paio di regole che accendono o spengono la luce a seconda del sensore di presenza:

regola 'Luce dell'ufficio accesa quando James è presente'

quando

Articolo JamesInOffice cambiato da OFF a ON

poi

sendCommand(Office_Hue,ON)

fine

regola 'Luce dell'ufficio spenta quando James esce'

quando

Articolo JamesInOffice cambiato da ON a OFF

poi

sendCommand(Office_Hue,OFF)

fine

Innanzitutto, chiamiamo la regola: sii descrittivo, in modo da sapere quale evento si sta attivando. Successivamente, definiamo la nostra semplice regola dicendo quando x è vero, allora fai y . Fine significa la chiusura di quella particolare regola. Ci sono un certo numero di parole speciali che puoi usare nelle regole, ma per ora abbiamo a che fare con due semplici frammenti di sintassi: Articolo , che consente di interrogare lo stato di qualcosa; e inviaComando , che fa esattamente quello che pensi che farà. Te l'avevo detto che era facile.

Probabilmente non è necessario utilizzare un paio di regole, ma poiché la mia logica diventa più complessa, sarà utile averle separate se sto entrando o uscendo dall'area - e potrebbe essere una buona idea aggiungere un sensore di luce da qualche parte nell'equazione così non accendiamo inutilmente le luci.

Diamo un'occhiata a un altro esempio per creare una regola pianificata.

regola 'Esercizio ogni mattina'

quando

Tempo cron '0 0 8 1/1 * ? *'

poi

armoniaStartActivity('Esercizio')

fine

Ancora una volta, chiamiamo la regola, dichiariamo le condizioni quando dovrebbe attivarsi e le azioni da intraprendere. Ma in questo caso, stiamo definendo un modello temporale. Il codice divertente che vedi tra virgolette è un'espressione CRON per Quartz Scheduler (il formato è leggermente diverso da un normale CRONtab). ero solito cronmaker.com per aiutare a creare l'espressione, ma puoi anche leggere la guida al formato [Non più disponibile] per una spiegazione dettagliata e altri esempi.

CronMaker.com utilizzato per generare l'espressione Cron formattata correttamente

Le mie regole dicono semplicemente 'Ogni mattina alle 8:00, tutti i giorni della settimana, dì al mio sistema Harmony Ultimate di avviare l'attività di esercizio', che a sua volta attiva la TV, l'Xbox, l'amplificatore e preme il pulsante A dopo un minuto per avviarsi il disco nell'unità.

Purtroppo, OpenHAB non è ancora in grado di eseguire l'esercizio per me.

Un'altra regola che voglio mostrarti è qualcosa che uso per gestire i livelli di umidità nella mia casa. Ho un singolo deumidificatore che devo spostare ovunque sia necessario, quindi ho deciso di guardare tutti i miei sensori di umidità, trovare qual è il più alto e memorizzarlo in una variabile. Attualmente viene attivato ogni minuto, ma può essere facilmente abbassato. Dai prima un'occhiata:

import org.openhab.core.library.types.*

import org.openhab.model.script.actions.*

import java.lang.String

regola 'Monitoraggio dell'umidità'

quando Time cron '0 * * * * ?'

poi

var prevHigh = 0

var altoHum = ''

Umidità?.membri.perOgni[ronzio|

logDebug('humidity.rules', hum.name);

if(hum.state come DecimalType > prevHigh){

prevHigh = hum.state

highHum = ronzio.nome + ': ' + ronzio.stato + '%'

}

cose da fare su un laptop

]

logDebug('humidity.rules', highHum);

postUpdate(Dehumidifier_Needed,highHum);

fine

Il nucleo della regola è nel Umidità?.membri.foro linea. Umidità è un nome di gruppo per i miei sensori di umidità; .membri prende tutti gli elementi in quel gruppo; per ciascuno scorre su di esse (con un curioso formato di parentesi quadre che probabilmente non conosci). La sintassi delle regole è un derivato di Xtend, quindi puoi leggere il Documentazione Xtend se non riesci a trovare un esempio per adattarti.

Probabilmente non ne avrai bisogno, ci sono centinaia di regole di esempio là fuori:

MQTT per OpenHAB e Internet of Things

MQTT è un sistema di messaggistica leggero per la comunicazione da macchina a macchina: una sorta di Twitter per i tuoi Arduino o Raspberry Pi per parlare tra loro (anche se ovviamente funziona con molto più di quelli). Sta rapidamente guadagnando popolarità e sta trovando una casa con dispositivi Internet of Things, che sono in genere microcontrollori a basse risorse che necessitano di un modo affidabile per trasmettere i dati dei sensori all'hub o ricevere comandi remoti. Questo è esattamente quello che faremo con esso.

Ma perché reinventare la ruota?

MQ Telemetry Transport è stato inventato nel lontano 1999 per collegare gli oleodotti tramite connessioni satellitari lente, progettate specificamente per ridurre al minimo l'utilizzo della batteria e la larghezza di banda, fornendo comunque una consegna affidabile dei dati. Nel corso degli anni i principi di progettazione sono rimasti gli stessi, ma il caso d'uso si è spostato da sistemi embedded specializzati a dispositivi Internet of Things generici. Nel 2010 il protocollo è stato rilasciato senza royalty, aperto a chiunque di utilizzarlo e implementarlo. Ci piace gratis.

Ti starai chiedendo perché ci stiamo anche preoccupando di un altro protocollo - dopotutto abbiamo già HTTP - che può essere usato per inviare messaggi veloci tra tutti i tipi di sistemi connessi al web (come OpenHAB e IFTTT, in particolare con il nuovo canale maker ). E avresti ragione. Tuttavia, l'overhead di elaborazione di un server HTTP è piuttosto grande, tanto che non puoi eseguirne facilmente uno su un microcontrollore incorporato come Arduino (almeno, puoi, ma non avrai molta memoria rimasta per nient'altro ). MQTT è d'altra parte è leggero, quindi l'invio di messaggi in rete non ostruisce i tubi e può facilmente adattarsi al nostro piccolo spazio di memoria Arduino.

Come funziona MQTT?

MQTT richiede sia un server (chiamato 'broker') che uno o più client. Il server funge da intermediario, riceve i messaggi e li ritrasmette a eventuali client interessati.

Continuiamo con il Twitter-per-macchine analogia però. Proprio come gli utenti di Twitter possono twittare i propri 140 caratteri senza senso e gli utenti possono 'seguire' altri utenti per vedere un flusso curato di post, i client MQTT possono iscriversi a un determinato canale per ricevere tutti i messaggi da lì, nonché pubblicare i propri messaggi a quel canale. Questo modello di pubblicazione e sottoscrizione è indicato come pub/sottotitoli , in contrasto con la tradizione client/server modello di HTTP.

HTTP richiede che tu raggiunga la macchina con cui stai comunicando, ad esempio Hello, quindi fai avanti e indietro per riconoscerti costantemente l'un l'altro mentre ottieni o inserisci i dati. Con pub/sub, il client che esegue la pubblicazione non ha bisogno di sapere quali client sono abbonati: si limita a pompare i messaggi e il broker li ridistribuisce a tutti i client abbonati. Qualsiasi cliente può pubblicare e iscriversi agli argomenti, proprio come un utente di Twitter.

A differenza di Twitter, tuttavia, MQTT non è limitato a 140 caratteri. È indipendente dai dati, quindi puoi inviare numeri piccoli o blocchi di testo di grandi dimensioni, datagrammi in formato JSON o persino immagini e file binari.

Non è che MQTT sia migliore di HTTP per tutto, ma è è più adatto se avremo molti sensori in tutta la casa, che segnalano costantemente.

È anche importante sapere che OpenHAB non agirà come broker MQTT: di questo parleremo più avanti. Tuttavia, OpenHAB fungerà da client: può sia pubblicare il registro delle attività di OpenHAB, sia associare determinati canali a dispositivi, in modo che tu possa ad esempio avere uno switch controllato dai messaggi MQTT su un determinato canale. Questo è l'ideale per creare una casa piena di sensori.

Installa Mosquitto sul tuo Pi

Sebbene OpenHAB includa un client MQTT in modo da poter sottoscrivere un argomento e anche pubblicare messaggi, non fungerà da server. Per questo, devi utilizzare un broker MQTT basato sul web (a pagamento o gratuito) o installare il software gratuito sul tuo Pi. Mi piacerebbe tenerlo tutto in casa, quindi ho installato Mosquitto sul Pi.

Sfortunatamente, la versione disponibile tramite il solito apt-get è completamente obsoleta. Invece, aggiungiamo le fonti più recenti.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

Questo è tutto ciò che dobbiamo fare per avere un server MQTT attivo e funzionante sulla rete locale. Il tuo broker è in esecuzione sulla porta 1883 per impostazione predefinita.

Verifica che il tuo server MQTT funzioni utilizzando MQTT.fx gratuito, che è multipiattaforma. Fai clic sull'icona delle impostazioni per creare un nuovo profilo e inserisci l'indirizzo IP o il nome del tuo Raspberry Pi. Salva e premi Connetti. Se il semaforo in alto a destra diventa verde, sei a posto.

Per un test rapido, fai clic sulla scheda 'Iscriviti' e digita inTopic/ nella casella di testo, quindi premi il sottoscrivi pulsante. Ora sei iscritto per ricevere messaggi sull'argomento denominato inTopic, anche se mostrerà 0 messaggi. Torna alla scheda Pubblica, digita Argomento nella casella piccola e un breve messaggio nella casella di testo grande in basso. Colpire Pubblicare alcune volte e guarda indietro nella scheda Iscriviti. Dovresti vedere alcuni messaggi apparsi in quell'argomento.

Prima di aggiungere alcuni sensori reali alla nostra rete, dobbiamo conoscere i livelli di argomento, che ci consentono di strutturare e filtrare la rete MQTT. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole, non devono iniziare con $, né includere uno spazio o caratteri non ASCII - pratiche di programmazione standard per i nomi di variabili, in realtà.

Il separatore / indica un livello di argomento, che è gerarchico, ad esempio i seguenti sono tutti livelli di argomento validi.

inTopic/smallSubdivision/evenSmallerSubdivision

myHome/livingStanza/temperatura

miaCasa/Soggiorno/Umidità

miaCasa/cucina/temperatura

miaCasa/cucina/umidità

Dovresti già vedere come questa struttura ad albero sia perfetta per una casa intelligente piena di sensori e dispositivi. La migliore pratica per l'uso con più sensori in una singola stanza è pubblicare ogni variabile del sensore come il proprio livello di argomento, estendendosi a una maggiore specificità (come negli esempi sopra), piuttosto che provare a pubblicare più tipi di sensore sullo stesso canale .

I clienti possono quindi pubblicare o sottoscrivere un numero qualsiasi di livelli di argomenti individuali o utilizzare alcuni caratteri jolly speciali per filtrare dall'alto nella struttura.

Il carattere jolly + sostituisce qualsiasi livello di argomento. Ad esempio:

miaCasa/+/temperatura

sottoscriverebbe il cliente ad entrambi

myHome/livingStanza/temperatura

miaCasa/cucina/temperatura

... ma non i livelli di umidità.

Il # è un carattere jolly multilivello, quindi puoi recuperare qualsiasi cosa dall'array di sensori livingRoom con:

miaCasa/Soggiorno/#

Tecnicamente, puoi anche iscriverti al livello root # che ti dà assolutamente tutto ciò che passa attraverso il broker, ma può essere come ficcarti una manichetta antincendio in faccia: un po' opprimente. Prova a connetterti al broker MQTT pubblico da HiveMQ e iscriviti a #. Ho ricevuto circa 300 messaggi in pochi secondi prima che il mio client si bloccasse.

Suggerimento per principianti MQTT: ' /casa mia/' è un argomento diverso da ' casa mia/' – l'inclusione di una barra all'inizio crea un livello di argomento vuoto, che sebbene tecnicamente valido, non è consigliato perché può creare confusione.

Ora che conosciamo la teoria, proviamo con un Arduino, Ethernet Shield e un sensore di temperatura e umidità DHT11: probabilmente ne hai uno nel tuo kit di partenza, ma in caso contrario, sostituisci il sensore ambientale con un movimento sensore (o anche un pulsante).

Pubblicazione di MQTT da un Arduino con connessione Ethernet

Se hai un dispositivo ibrido compatibile con Arduino con Wi-Fi o Ethernet integrato, dovrebbe funzionare anche questo. Alla fine vorremo un modo migliore/più economico di comunicare che dover utilizzare una connessione di rete in ogni stanza, ma questo serve per imparare le basi.

Inizia scaricando libreria pubsubclient da Github . Se hai utilizzato il pulsante 'Scarica come ZIP', la struttura è un po' sbagliata. Decomprimi, rinomina la cartella in just pubsubcliente , quindi estrarre i due file dal src cartella e spostarli di un livello nella radice della cartella scaricata. Quindi sposta l'intera cartella nel tuo Arduino/librerie directory.

Ecco il mio codice di esempio che puoi adattare : l'uscita del segnale DHT11 è sul pin 7. Cambia l'IP del server per quello del tuo Pi sulla riga seguente:

client.setServer('192.168.1.99', 1883);

Sfortunatamente, non possiamo usare il suo nome amichevole (OpenHAB.local nel mio caso) poiché lo stack TCP/IP su Arduino è molto semplicistico e l'aggiunta del codice per la denominazione Bonjour richiederebbe molta memoria che non vogliamo sprecare. Per modificare gli argomenti su cui vengono trasmessi i dati del sensore, scorri verso il basso fino a queste righe:

buffer di caratteri[10];

dtostrf(t,0, 0, buffer);

client.publish('openhab/himitsu/temperature',buffer);

dtostrf(h,0, 0, buffer);

client.publish('openhab/himitsu/humidity',buffer);

Il codice include anche l'abbonamento a un canale di comando. Trova e regola la seguente riga:

client.subscribe('openhab/himitsu/comando');

Esamina il codice lì intorno e vedrai che potresti facilmente controllare un LED o un relè, ad esempio inviando comandi a canali specifici. Nel codice di esempio, invia semplicemente un messaggio di conferma della ricezione del comando.

Carica il tuo codice, collega il tuo Arduino alla rete e, utilizzando MQTT.fx, iscriviti a entrambi # o openhab / himitsu / # (o qualunque cosa tu abbia cambiato il nome della stanza, ma non dimenticare di includere il # alla fine). Presto dovresti vedere i messaggi in arrivo; e se invii ON o OFF al topic del comando, vedrai tornare anche i riconoscimenti.

Associazione MQTT per OpenHAB

Il passaggio finale nell'equazione è collegarlo a OpenHAB. Per questo, ovviamente, abbiamo bisogno di un legame.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab /usr/share/openhab

E modifica il file di configurazione per abilitare il binding.

mqtt:broker.url=tcp://localhost:1883

mqtt:broker.clientId=openhab

Riavvia OpenHAB

sudo service openhab riavvio

Quindi aggiungiamo un elemento o due:

/* Sensori MQTT */

Numero Himitsu_Temp 'Temperatura di Himitsu [%.1f °C]' (Himitsu,Temperature) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Numero Himitsu_Humidity'Himitsu Umidità [% .1f %%]' (Himitsu, Umidità) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Ormai dovresti capire il formato; sta diventando un Numero articolo dall'associazione MQTT, su un argomento specificato. Questo è un semplice esempio, potresti fare riferimento alla pagina wiki in cui si trova può diventare molto più complesso .

Congratulazioni, ora hai le basi per un array di sensori economico basato su Arduino. Lo rivisiteremo in futuro e collocheremo gli Arduino sulla loro rete RF completamente separata. Ho anche creato una versione identica per le schede Wizwiki 7500 se ti capita di avere uno di quelli.

Persistenza e dati grafici

Ormai probabilmente hai impostato un sacco di sensori, sia da Z-Wave che da Arduino personalizzati che eseguono MQTT, quindi puoi visualizzare lo stato attuale di quei sensori in qualsiasi momento e dovresti anche reagire al loro valore nelle regole. Ma la cosa interessante dei valori dei sensori è generalmente che cambiano nel tempo: è qui che entrano in gioco la persistenza e la rappresentazione grafica. Persistenza in OpenHAB significa salvare i dati nel tempo. Andiamo avanti e impostiamo RRD4J (Round Robin Database for Java), così chiamato perché i dati vengono salvati in modalità round robin: i dati più vecchi vengono scartati per comprimere la dimensione del database.

Installa i pacchetti rrd4j con i seguenti comandi.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

Quindi crea un nuovo file chiamato rrd4j.persiste nel configurazioni/persistenza cartella. Incolla quanto segue:

Strategie {

ogniMinuto : '0 * * * * ?'

ogniOra : '0 0 * * * ?'

tutti i giorni : '0 0 0 * * ?'

default = ogniModifica

}

Elementi {

// mantiene tutto quando il valore viene aggiornato, solo un valore predefinito e ripristinali dal database all'avvio

* : strategia = ogniModifica, restoreOnStartup

// successivamente definiamo strategie specifiche di ogni ora per qualsiasi cosa nel gruppo Temperatura e ogni minuto per l'umidità

come posso fare in modo che Chrome utilizzi meno memoria?

Temperatura* : strategia = ogniOra

Umidità* : strategia = ogniMinuto

// in alternativa puoi aggiungere elementi specifici qui, come

//Bedroom_Humidity,JamesInOffice: strategia = ogni minuto

}

Nella prima parte di questo file, stiamo definendo le strategie, il che significa semplicemente dare un nome a un'espressione CRON. È lo stesso che abbiamo già fatto con My.OpenHAB, ma questa volta creiamo alcune nuove strategie che possiamo usare ogni giorno, ogni ora e ogni minuto. Non li ho ancora usati tutti, ma potrei esserlo in futuro.

Nella seconda metà del file, diciamo a rr4dj quali valori di dati salvare. Per impostazione predefinita, salveremo tutto ogni volta che si aggiorna, ma ho anche specificato alcune strategie basate sul tempo per sensori specifici. Temperature di cui non mi preoccupo troppo, quindi l'ho impostato per salvare solo ogni ora, ma l'umidità è una grande preoccupazione per me, quindi voglio vedere come cambia ogni minuto. Se ci sono altri dati che desideri salvare in modo specifico a orari prestabiliti, aggiungili qui ora o modificali secondo necessità.

Nota: se vuoi rappresentare graficamente anche i dati, DEVI memorizzarli almeno una volta al minuto. Non importa se i dati del tuo sensore vengono aggiornati così rapidamente, devi semplicemente dire a rr4dj di memorizzarli una volta al minuto.

Con ciò definito, dovresti iniziare a vedere un output di debug che ti dice che i valori vengono archiviati.

Successivamente, facciamo dei bei grafici di tutti questi dati. È davvero facile. Per creare un grafico di un singolo sensore, aggiungi quanto segue alla mappa del tuo sito:

Elemento grafico=Camera_Periodo umidità=h

Questo è letteralmente tutto ciò di cui hai bisogno. I valori validi per il periodo sono h, 4h, 8h, 12h, D, 3D, L, 2 L, L, 2 L, 4 L, A ; dovrebbe essere ovvio cosa significano. Il valore predefinito è D per un giorno intero di dati se non specificato.

Per creare un grafico con più elementi, rappresenta semplicemente il nome del gruppo:

Voce del grafico=Periodo di umidità=h

Potresti anche essere interessato a sapere che puoi usare questo grafico altrove; sta generando un'immagine utilizzando il seguente URL: http://YOUROPENHABURL:8080/chart?groups=Humidity&period=h

Com'è Tuo Sistema OpenHAB in arrivo?

Questo è tutto per questa puntata della guida, ma non aspettarti che sarà l'ultima volta che sentirai parlare di OpenHAB. Si spera che questo e la guida per principianti ti abbiano fornito una solida base per sviluppare il tuo sistema OpenHAB completo, ma è un processo che non è mai completamente finito.

Per fortuna, OpenHAB può scalare bene da pochi dispositivi a centinaia, dalla semplice complessità delle regole al massimo dell'automazione domestica, quindi come sta andando il tuo sistema? Quali dispositivi hai scelto? Qual è il prossimo grande progetto che affronterai?

Parliamo nei commenti e per favore, se hai trovato utile questa guida, fai clic sui pulsanti di condivisione per dire ai tuoi amici come anche loro possono configurare il proprio sistema OpenHAB.

Ci auguriamo che gli articoli che consigliamo e discutiamo vi piacciano! MUO ha partnership affiliate e sponsorizzate, quindi riceviamo una quota delle entrate da alcuni dei tuoi acquisti. Ciò non influirà sul prezzo da pagare e ci aiuta a offrire i migliori consigli sui prodotti.

Condividere Condividere Tweet E-mail Una guida per principianti all'animazione del discorso

L'animazione del discorso può essere una sfida. Se sei pronto per iniziare ad aggiungere dialoghi al tuo progetto, analizzeremo il processo per te.

Leggi Avanti
Argomenti correlati
  • Fai da te
  • Casa intelligente
  • Arduino
  • Domotica
  • Forma lunga
  • Guida lunga
Circa l'autore James Bruce(707 articoli pubblicati)

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A+ e Network+. Quando non è impegnato come editor di recensioni hardware, gli piacciono i LEGO, la realtà virtuale e i giochi da tavolo. Prima di entrare a far parte di MakeUseOf, era un tecnico luci, insegnante di inglese e ingegnere di data center.

Altro da James Bruce

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti