Free non sempre significa "non buono quanto pagato" e OpenHAB non fa eccezione. Il software di domotica open source supera di gran lunga le capacità di qualsiasi altro sistema di automazione domestica sul mercato - ma non è facile da installare. In effetti, può essere addirittura frustrante.
Questa guida è disponibile per il download come PDF gratuito. Scarica OpenHAB Beginner's Guide Part 2: ZWave, MQTT, Rules and Charting ora . Sentiti libero di copiare e condividere questo con i tuoi amici e familiari.Nella parte 1 della guida, ti ho guidato attraverso l'installazione di OpenHAB su un Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una piattaforma di automazione domestica matura e open source che funziona su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica presenti oggi sul mercato. Leggi di più, ha introdotto i concetti chiave 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 alle regole
- Presentazione di MQTT e installazione di un broker MQTT sul tuo Pi, con sensori su un Arduino
- Registrazione dei dati e rappresentazione grafica
Introduzione a Z-Wave
Z-Wave è stato il protocollo domotico dominante per anni: è affidabile, è stato ampiamente sviluppato e funziona su un intervallo molto più lungo rispetto a qualsiasi altro prodotto di casa intelligente. Sono disponibili centinaia di sensori Z-Wave che eseguono una vasta gamma di attività. OpenHAB può funzionare 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 bene 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'unica ragione per scegliere Z-Wave è se non sei sistemato al 100% su OpenHAB e vorresti lasciare le tue opzioni aperte in futuro: Z-Wave ad esempio funziona con Samsung SmartThings Quale Smart Hub per la domotica è la cosa migliore per te ? Quale Smart Hub per la domotica è la cosa migliore per te? Per un po 'la gente pensò che l'idea non fosse altro che un trucco, ma le recenti versioni del prodotto hanno dimostrato che la domotica intelligente sta iniziando a essere all'altezza delle sue promesse. Maggiori informazioni sull'hub, oltre agli hub specifici di Z-Wave come Homeseer e una serie di altre opzioni software come Domoticz.
Sebbene OpenHAB includa un binding 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 a disposizione alcuni software per la configurazione della rete, quindi non ne parleremo qui. Se hai acquistato un controller Aeotec USB Z-Stick o simili, probabilmente non hai alcun software incluso, quindi continua a leggere.
Aeotec Z-Stick Gen5, Z-Wave Plus USB per creare gateway Aeotec Z-Stick Gen5, Z-Wave Plus USB per creare gateway Acquista ora A Amazon $ 44, 95
Se hai già una configurazione di rete Z-Wave, puoi semplicemente collegare il controller al Pi e iniziare a configurare il binding e gli elementi. Se questa è la tua prima incursione in Z-Wave, è un po 'più complessa.
Innanzitutto, dal punto di vista hardware: ogni controller ha il proprio modo di accoppiarsi con i dispositivi (tecnicamente noto come "modalità di inclusione" in cui viene assegnato un ID di nodo). Nel caso di Aotec Z-Stick, ciò significa scollegarlo dalla porta USB e premere il pulsante una volta per posizionarlo in modalità inclusione. Poi prendilo vicino al dispositivo che stai accoppiando e premi anche il pulsante di inclusione ( anche questo varierà: la mia presa Eprim richiede che il pulsante prema 3 volte in rapida successione, quindi la lezione qui è leggere il manuale per il tuo dispositivo) .
Lo Z-Stick lampeggia brevemente per indicare il successo. Questo presenta problemi quando lo si collega nuovamente al Pi, quando viene assegnata una nuova porta. Riavvia il tuo Pi per ripristinarlo alla porta standard se trovi che è stato riassegnato dinamicamente a uno diverso. Meglio ancora: non collegarlo al Pi fino a quando non avrai eseguito prima tutti gli accoppiamenti hardware.
Installazione di binding HABmin e Z-Wave
Poiché OpenHAB non è in realtà un'utility di configurazione per Z-Wave, installeremo un altro strumento di gestione web che fa qualcosa chiamato HABmin. Andate al repository Github di HABmin per scaricare la versione corrente. Una volta decompresso, troverai 2 file .jar nella directory degli addon, che dovrebbero essere collocati nella corrispondente directory dei componenti aggiuntivi nella tua condivisione OpenHAB Home (se usi anche la Z-Stick Aotec gen5, assicurati di 'ho almeno la versione 1.8 del binding Z-Wave) .
Quindi, crea una nuova cartella nella directory webapps e chiamala "habmin" (la minuscola è 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 per vedere quale preferisci.
Se non lo hai già fatto, collega il controller al tuo 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ù facile eseguire il comando una volta prima di collegarlo, e una volta dopo, in modo da poter vedere quali modifiche non si è sicuri.
Apri il file di configurazione di OpenHAB e modifica la sezione su Z-Wave, decommentando entrambe le righe e inserendo l'indirizzo del tuo dispositivo. Un ultimo passo per me è stato consentire all'utente OpenHAB di accedere al modem.
sudo usermod -a -G dialout openhab
Ora, per dare il calcio d'inizio a tutto, riavvia OpenHAB
riavvio del servizio sudo sudo
Speriamo che, se stai controllando il registro di debug, vedrai qualcosa di simile. Congratulazioni, stai parlando Z-Wave. È inoltre possibile trovare il registro di debug inondato di messaggi provenienti da vari nodi Z-Wave. Iniziamo controllando HABMIN per vedere che cosa si trova: 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 la scheda Configuration -> Bindings -> Z-Wave -> Devices, come puoi vedere qui sotto. Espandi il nodo per modificare la posizione e l'etichetta del nome per la tua facilità di riferimento.
Configurazione di elementi Z-Wave
Ogni dispositivo Z-Wave avrà una configurazione specifica per OpenHAB. Per fortuna, molti dispositivi sono già stati esplorati e ci saranno già esempi per il tuo. La configurazione di dispositivi personalizzati non riconosciuti è ben oltre lo scopo di questa guida, ma supponiamo che per ora sia supportata.
Per prima cosa, ho un interruttore di base Everspring AN158 e un metro sul Nodo 3. Un rapido googling mi ha portato a un post sul blog su Wetwa.re, con una configurazione di esempio. Ho adattato questo come segue:
Switch Deumidificatore_Switch "Deumidificatore" {zwave = "3: command = switch_binary"} Numero Deumidificatore_Watts "Consumo energetico del deumidificatore [% .1f W]" {zwave = "3: command = meter"}
Perfezionare.
Il prossimo è un multi-sensore Aeotec Gen5.
Aeotec Aeotec Z-Wave Gen5 Multi-Sensore (Z-Wave Plus) Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensore (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 "Hallway Temperature [% .1f ° C]" (Hallway, Temperature) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Humidity [% .0f %% ] "(Hallway, Humidity) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 5 "} Number Hallway_Luminance" Luminosità del corridoio [% .0f Lux] "(Hallway) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 3 "} Contatta Hallway_Motion" Hallway Motion [% s] "(Hallway, Motion) {zwave =" 2: 0: command = sensor_binary, respond_to_basic = true "} Numero sensor_1_battery" Batteria [% s %%] "( Motion) {zwave = "2: 0: comando = batteria"}
Se il formato di questo ti sembra strano, torna alla prima guida per principianti Introduzione a OpenHAB Home Automation su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una piattaforma di automazione domestica matura e open source che funziona su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Per saperne di più, in particolare la sezione Hue binding, dove spiego come vengono aggiunti gli articoli. Probabilmente avrai solo bisogno di copiare solo esempi di paste come questo, ma nel caso tu abbia un nuovo dispositivo, la documentazione di binding dettaglia tutti i comandi.
Logitech Harmony Binding
Prima di passare alle regole, volevo aggiungere una breve nota su come lavorare con il binding di Harmony. Sono un grande fan della serie Harmony di ultimi telecomandi Logitech Harmony Ultimate Review e Giveaway Logitech Harmony Ultimate Review e Giveaway Il tuo salotto è il caos - ammettilo. Sei perdonato per chiedermi quali telecomandi quale dispositivo. Cosa con TV, amplificatore, lettore TiVO, lettore BluRay, forse anche le attività di commutazione dell'illuminazione diventano un lungo ... Leggi di più per semplificare l'esperienza del centro multimediale di casa, ma spesso si presentano come 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 incluse nelle regole di automazione.
Inizia installando i tre file di bind che trovi usando apt-cache per cercare "harmony":
Non dimenticare di ridigitare la directory dei binding 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:
########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181 o il tuo ip harmonyhub: username = tuo-harmony-email-login harmonyhub: password = tuo- parola d'ordine
L'indirizzo IP è quello del tuo hub Harmony. Usa uno scanner di rete per scoprirlo. È inoltre necessario inserire i dettagli di accesso, quelli che si inseriscono quando si avvia l'utilità di configurazione Harmony standard. Questo è tutto. Al riavvio della tonalità, il registro di debug dovrebbe avere un improvviso burst di output dall'associazione.
Questo è un elenco formattato JSON di tutte le attività, i dispositivi e i comandi che possono essere inviati. È una buona idea copiarlo per riferimenti futuri. puoi renderlo ancora più facile da leggere con nodi comprimibili incollandoli in un formattatore JSON online come questo.
Oltre all'attività standard di PowerOff, che è di default, troverai le tue attività definite elencate qui per nome. Ora creiamo un semplice controllo a un tasto per iniziare le attività. Innanzitutto, nel tuo file di articoli, aggiungi la seguente riga. Cambia il gruppo e l'icona se vuoi.
/ * Harmony Hub * / String Harmony_Activity "Harmony [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"}
Questo è un binding String a due vie, che è in grado sia di recuperare l'attività corrente, sia di comandare che l'attività corrente sia qualcos'altro. Ora possiamo creare un pulsante per questo, nel file Sitemap.
Switch item = Harmony_Activity mapping = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']
Nella parentesi quadra vedrai ogni attività insieme all'etichetta. Generalmente puoi fare riferimento direttamente alle attività come le hai nominate sul telecomando, ma l'eccezione a questa che ho trovato era qualsiasi cosa con uno spazio nel nome dell'attività, ad esempio "Guarda TV". In questo caso, dovrai utilizzare l'ID dell'attività. Ancora, 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 binding di Harmony.
Un'introduzione generale alle regole
La maggior parte degli smart home hub include una sorta di creazione di regole in modo da poter reagire automaticamente ai dati del sensore e agli eventi domestici. In realtà, direi che una casa davvero intelligente non è quella che ti serve 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 di casa intelligenti. Battaglia degli hub della casa intelligente: cosa c'è là fuori e cosa sta arrivando? Battle of the Smart Home Hub: cosa c'è là fuori e cosa sta arrivando? Ulteriori informazioni o ricette IFTTT IFTTT ora si collega a qualsiasi cosa: presentazione del canale Maker IFTTT ora si collega a qualsiasi cosa: presentazione del canale Maker I potenziali usi di IFTTT sono infiniti. Ma fino ad ora, è stato difficile interfacciarlo con i tuoi progetti hardware. Oggi è tutto cambiato. Leggi di più .
Le regole di programmazione sembrano peggio di quello che è. Iniziamo 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 l'oggetto JamesInOffice è cambiato da OFF a ON, quindi inviaCommand (Office_Hue, ON) regola finale "Spegni l'ufficio quando James lascia" quando l'oggetto JamesInOffice viene modificato da ON a OFF e quindi inviaCommand (Office_Hue, OFF) end
In primo luogo, diamo un nome alla regola: descriviamo, quindi sapete quale evento sta sparando. Successivamente, definiamo la nostra semplice regola dicendo che x è vero, quindi fai y . Fine significa la chiusura di quella particolare regola. C'è un numero di parole speciali che puoi usare nelle regole, ma per ora abbiamo a che fare con due semplici bit di sintassi: Item, che ti permette di interrogare lo stato di qualcosa; e sendCommand, che fa esattamente quello che pensi che sarà. Te l'ho detto che era facile.
Probabilmente non è necessario usare un paio di regole, ma poiché la mia logica diventa più complessa, sarà vantaggioso separarle per capire se sto entrando o uscendo dall'area - e potrebbe essere una buona idea aggiungere un sensore di luce da qualche parte nell'equazione, quindi non accendiamo inutilmente le luci.
Diamo un'occhiata a un altro esempio per creare una regola pianificata.
regola "Esercizio ogni mattina" quando cron cron "0 0 8 1/1 *? *" quindi harmonyStartActivity ("Esercizio") termina
Ancora una volta, chiamiamo la regola, le condizioni dello stato quando dovrebbe sparare 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). Ho usato cronmaker.com per aiutare a creare l'espressione, ma puoi anche leggere la guida al formato per una spiegazione dettagliata e altri esempi.
Le mie regole dicono semplicemente "8am ogni mattina, ogni giorno della settimana, dire al mio sistema Harmony Ultimate di avviare l'attività di esercizio", che a sua volta attiva la TV, la Xbox, l'amplificatore e preme il pulsante A dopo un minuto per il lancio il disco nel lettore.
Purtroppo, OpenHAB non è ancora in grado di fare 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, così ho deciso di guardare tutti i miei sensori di umidità, trovare quale è il più alto e memorizzarlo in una variabile. Attualmente è attivato ogni minuto, ma può essere facilmente abbassato. Dai un'occhiata prima:
import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang.String rule "Humidity Monitor" quando cron cron "0 * * * *?" quindi var prevHigh = 0 var highHum = "" Umidità? .members.forEach [hum | logDebug ("umidità.rules", hum.name); if (hum.state come DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("umidità.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); fine
Il nucleo della regola è nella linea Humidity? .members.foreach . L'umidità è un nome di gruppo per i miei sensori di umidità; .members afferra tutti gli elementi di quel gruppo; foreach iterates su di loro (con un curioso formato di parentesi quadra che probabilmente non hai familiarità con). La sintassi delle regole è un derivato di Xtend, quindi puoi leggere la documentazione di Xtend se non riesci a trovare un esempio da adattare.
Probabilmente non avrai bisogno di farlo - ci sono centinaia di regole di esempio là fuori:
- Spiegazione dettagliata delle regole sul wiki ufficiale
- Le regole ufficiali campionano la pagina wiki
- Prendere le regole a nuovi livelli
- Campioni avanzati su IngeniousFool.net
MQTT per OpenHAB e Internet of Things
MQTT è un sistema di messaggistica leggero per la comunicazione machine-to-machine - una sorta di Twitter per i tuoi Arduinos o Raspberry Pis per parlare tra loro (anche se ovviamente funziona con molto più di quelli). Sta rapidamente guadagnando popolarità e si è trovato una casa con i dispositivi di Internet of Things, che sono in genere micro-controllori a bassa risorsa che hanno bisogno di un modo affidabile per trasmettere i dati dei sensori all'hub o ricevere comandi remoti. Questo è esattamente ciò che faremo con esso.
Ma perché reinventare la ruota?
Il trasporto di telemetria MQ è stato inventato nel 1999 per collegare le oleodotti tramite connessioni satellitari lente, specificamente progettate per ridurre al minimo l'utilizzo della batteria e la larghezza di banda, fornendo al tempo stesso un'erogazione 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 generali di Internet of Things. Nel 2010 il protocollo è stato rilasciato senza royalty, aperto a chiunque possa usarlo e implementarlo. Ci piace libero.
Forse ti starai chiedendo perché ci stiamo ancora preoccupando di un altro protocollo - abbiamo già l'HTTP dopo tutto - che può essere utilizzato per inviare messaggi rapidi tra tutti i tipi di sistemi connessi al Web (come OpenHAB e IFTTT, in particolare con il nuovo canale di creazione IFTTT ora si collega a qualsiasi cosa: presentazione del canale Maker IFTTT ora si collega a qualsiasi cosa: presentazione del canale Maker I potenziali usi di IFTTT sono infiniti, ma fino ad ora è stato difficile interfacciarlo con i propri progetti hardware. Oggi è tutto cambiato. Leggi di più ). E avresti ragione. Tuttavia, l'overhead di elaborazione di un server HTTP è abbastanza grande, tanto che non è possibile eseguirne facilmente uno su un microcontrollore embedded come Arduino (almeno, è possibile, ma non si avrà più memoria per nient'altro ). MQTT è l'altra mano è leggera, quindi l'invio di messaggi nella rete non intaserà 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 qualsiasi cliente interessato.
Continuiamo con l'analogia di Twitter per macchine però. Proprio come gli utenti di Twitter possono twittare i propri 140 caratteri senza senso e gli utenti possono "seguire" gli altri utenti per vedere un flusso di post curati, i client MQTT possono iscriversi a un particolare canale per ricevere tutti i messaggi da lì, così come pubblicare i propri messaggi a quel canale. Questo modello di pubblicazione e sottoscrizione è indicato come pub / sub, in contrasto con il modello client / server tradizionale di HTTP.
HTTP richiede che tu raggiunga la macchina con la quale stai comunicando, ad esempio Salve, quindi fai un giro avanti e indietro per riconoscerti costantemente mentre ricevi o metti i dati. Con pub / sub, il client che esegue la pubblicazione non ha bisogno di sapere quali client sono sottoscritti: distribuisce semplicemente i messaggi e il broker li ridistribuisce a tutti i client sottoscritti. Qualsiasi cliente può pubblicare e iscriversi agli argomenti, proprio come un utente di Twitter.
Tuttavia, a differenza di Twitter, MQTT non è limitato a 140 caratteri. È indipendente dai dati, quindi puoi inviare piccoli numeri o blocchi di testo di grandi dimensioni, datagrammi con formattazione JSON o anche immagini e file binari.
Non è che MQTT sia meglio di HTTP per ogni cosa - ma è più adatto se avremo molti sensori in tutta la casa, che riportano costantemente in.
È anche importante sapere che OpenHAB non agirà come il tuo broker MQTT - ci occuperemo in seguito. Tuttavia, OpenHAB agirà come un client: può sia pubblicare il log delle attività di OpenHAB, sia legare determinati canali ai dispositivi, in modo da poter disporre, ad esempio, di un interruttore controllato da messaggi MQTT su un particolare 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 poterti iscrivere a un argomento e anche pubblicare messaggi, non agirà da server. Per questo, è necessario utilizzare un broker MQTT basato sul Web (a pagamento o gratuito) o installare il software gratuito sul proprio 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 ultime fonti.
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key aggiungi 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.
Controlla che il tuo server MQTT funzioni usando il 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 piccolo semaforo in alto a destra diventa verde, sei a posto.
Per un test rapido, fai clic sulla scheda "subscribe" e digita inTopic / nella casella di testo, quindi premi il pulsante Iscriviti . Ora sei iscritto per ricevere un messaggio sull'argomento denominato in Topic, anche se mostrerà 0 messaggi. Torna alla scheda di pubblicazione, digita inTopic nella casella piccola e un breve messaggio nella casella di testo grande sottostante. Premi Pubblica alcune volte e guarda indietro nella scheda Iscriviti. Dovresti vedere alcuni messaggi che sono apparsi in quell'argomento.
Prima di aggiungere alcuni sensori effettivi 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 dovrebbero iniziare con $, o includere uno spazio, o caratteri non ASCII - pratiche di programmazione standard per nomi di variabili, davvero.
Il separatore / indica un livello di argomento, che è gerarchico, ad esempio i seguenti sono tutti livelli di argomento validi.
inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / temperature myHome / livingRoom / umidità myHome / cucina / temperatura myHome / cucina / umidità
Già, dovresti vedere come questa struttura ad albero è perfetta per una casa intelligente piena di sensori e dispositivi. La migliore pratica per l'uso con più sensori in una singola stanza è quella di pubblicare ogni variabile del sensore come se fosse il proprio livello di argomento - ramificandone più specificità (come negli esempi sopra) - piuttosto che provare a pubblicare più tipi di sensori sullo stesso canale .
I clienti possono quindi pubblicare o iscriversi a qualsiasi numero di singoli livelli di argomento o utilizzare alcuni caratteri jolly speciali per filtrare da più in alto nell'albero.
Il carattere jolly sostituisce qualsiasi livello di argomento. Per esempio:
myHome / + / temperatura
sottoscriverebbe il cliente ad entrambi
myHome / livingRoom / temperatura myHome / cucina / temperatura
... ma non i livelli di umidità.
Il # è un jolly multilivello, quindi puoi recuperare qualsiasi cosa dall'array del sensore livingRoom con:
myHome / Soggiorno / #
Tecnicamente, puoi anche iscriverti al livello root # che ottieni assolutamente tutto ciò che passa attraverso il broker, ma che può essere come attaccare una manichetta antincendio in faccia: un po 'travolgente. Prova a connetterti al broker MQTT pubblico da HiveMQ e iscrivendoti a #. Ho ricevuto circa 300 messaggi in pochi secondi prima che il mio cliente si arresti.
MQTT Suggerimento per principianti: " / myHome /" è un argomento diverso da " myHome /" - inclusa una barra all'inizio crea un livello di argomento vuoto, che sebbene tecnicamente valido, non è raccomandato perché può essere fonte di confusione.
Ora che conosciamo la teoria, proviamo con un Arduino, Ethernet Shield e un sensore di temperatura e umidità DHT11: probabilmente ne hai preso uno nel tuo kit di partenza, ma in caso contrario, basta scambiare il sensore ambientale per 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. Alla fine vorremmo un modo migliore / più economico per comunicare che dovevamo usare una connessione di rete in ogni stanza, ma questo serve per imparare le basi.
Inizia scaricando la libreria pubsubclient da Github. Se hai utilizzato il pulsante "Scarica come ZIP", la struttura è un po 'errata. Decomprimere, rinominare la cartella solo in pubsubclient, quindi estrarre i due file dalla cartella src e spostarli di un livello nella directory principale della cartella scaricata. Quindi sposta l'intera cartella nella directory Arduino / librerie .
Ecco il mio codice di esempio che puoi adattare: l'uscita del segnale DHT11 si trova sul pin 7. Modifica 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 descrittivo (OpenHAB.local nel mio caso) poiché lo stack TCP / IP su Arduino è molto semplicistico e aggiungere il codice per la denominazione di Bonjour sarebbe un sacco di memoria che non vogliamo sprecare . Per modificare gli argomenti su cui vengono trasmessi i dati del sensore, scorrere verso il basso fino a queste righe:
buffer di carbone [10]; dtostrf (t, 0, 0, buffer); client.publish ( "openhab / Himitsu / temperatura", buffer); dtostrf (h, 0, 0, buffer); client.publish ( "openhab / Himitsu / umidità", buffer);
Il codice include anche l'abbonamento a un canale di comando. Trova e regola la seguente riga:
client.subscribe ( "/ Himitsu / comando openhab");
Esaminare 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 ricevuta del comando.
Carica il tuo codice, collega il tuo Arduino alla rete e usa MQTT.fx iscriviti a # o a openhab / himitsu / # (o qualsiasi altra cosa tu abbia modificato il nome della stanza, ma non dimenticare di includere il # alla fine). Molto presto dovresti vedere i messaggi che arrivano; e se invii ON o OFF sull'argomento del comando, vedrai tornare anche i riconoscimenti.
Associazione MQTT per OpenHAB
Il passo finale nell'equazione è quello di collegare questo in 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 l'associazione.
mqtt: broker.url = tcp: // localhost: 1883 mqtt: broker.clientId = openhab
Riavvia OpenHAB
riavvio del servizio sudo sudo
Quindi aggiungiamo un elemento o due:
/ * Sensori MQTT * / Numero Himitsu_Temp "Himitsu Temperatura [% .1f ° C]" (Himitsu, Temperatura) {mqtt = "<[broker: openhab / himitsu / temperatura: stato: predefinito]"} Numero Himitsu_Humidity "Himitsu Umidità [ % .1f %%] "(Himitsu, Umidità) {mqtt =" <[broker: openhab / himitsu / umidità: stato: predefinito] "}
Ormai dovresti capire il formato; sta ottenendo un elemento numerico dall'associazione MQTT, su un argomento specificato. Questo è un semplice esempio, potresti voler fare riferimento alla pagina wiki dove può diventare molto più complessa.
Congratulazioni, ora hai le basi per un array di sensori a basso costo basato su Arduino. Lo rivedremo in futuro e posizioneremo gli Arduino sulla propria rete RF completamente separata. Ho anche creato una versione identica per le schede Wizwiki 7500 se ne hai una di quelle.
Dati di persistenza e grafici
A questo punto, probabilmente hai installato un certo numero di sensori, sia da Z-Wave che da Arduino personalizzati che eseguono MQTT, in modo da poter visualizzare lo stato corrente di tali sensori in qualsiasi momento e dovresti anche reagire al loro valore nelle regole. Ma la cosa interessante dei valori dei sensori è che generalmente cambiano nel tempo: è qui che entra in gioco persistenza e rappresentazione grafica. Persistenza in OpenHAB significa salvare i dati nel tempo. Andiamo avanti e impostiamo RRD4J (Round Robin Database per Java), così chiamato perché i dati vengono salvati in modalità round robin - i dati più vecchi vengono scartati per comprimere le dimensioni 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 creare un nuovo file chiamato rrd4j.persist nella cartella configurazioni / persistenza . Incolla quanto segue:
Strategie {everyMinute: "0 * * * *?" ogni ora: "0 0 * * *?" ogni giorno: "0 0 0 * *?" default = everyChange} Items {// mantiene tutto quando il valore è aggiornato, solo un default, e ripristina dal database all'avvio *: strategy = everyChange, restoreOnStartup // next definiamo strategie specifiche di everyHour per qualsiasi cosa nel gruppo Temperature, e ogni minuto per Humidity Temperature *: strategy = everyHour Humidity *: strategy = everyMinute // alternativamente puoi aggiungere elementi specifici qui, come // Bedroom_Humidity, JamesInOffice: strategy = everyMinute}
Nella prima parte di questo file, stiamo definendo strategie, che significa semplicemente dare un nome a un'espressione CRON. Questo è lo stesso che abbiamo già fatto con My.OpenHAB, ma questa volta creeremo alcune nuove strategie che possiamo usare ogni giorno, ogni giorno e ogni minuto. Non li ho ancora usati tutti, ma potrei essere in futuro.
Nella seconda metà del file, diciamo a rr4dj quali valori di dati salvare. Come impostazione predefinita, salveremo ogni cosa ogni volta che si aggiorna, ma ho anche specificato alcune strategie basate sul tempo per sensori specifici. Le temperature non mi preoccupano 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 si desidera salvare in modo specifico ad orari prestabiliti, aggiungili qui ora o aggiustali secondo necessità.
Nota: se si desidera rappresentare anche i dati, è necessario memorizzarli almeno una volta al minuto. Non importa se i dati del sensore vengono aggiornati anche in questo modo, devi semplicemente dire a rr4dj di memorizzarlo una volta al minuto.
Con quello definito, dovresti iniziare a vedere alcuni output di debug che ti dicono che i valori vengono memorizzati.
Quindi, facciamo alcuni 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 = Bedroom_Humidity period = h
Questo è letteralmente tutto ciò di cui hai bisogno. I valori validi per periodo sono h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; 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, devi semplicemente rappresentare graficamente il nome del gruppo:
Elemento 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 / grafico? groups = Umidità e periodo = h
Come sta il tuo sistema OpenHAB?
Questo è tutto per questa parte della guida, ma non aspettarti che questa sia l'ultima volta che ci parli di OpenHAB. Speriamo che questa e la guida per principianti ti abbiano dato una solida base per sviluppare il tuo sistema OpenHAB completo, ma è un processo che non è mai stato completamente completato.
Per fortuna, OpenHAB può scalare bene da pochi dispositivi a centinaia, dalla semplice complessità delle regole al massimo dell'automazione domestica, quindi come va 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 su quei pulsanti di condivisione per dire ai tuoi amici come anche loro possono impostare il proprio sistema OpenHAB.