Annuncio pubblicitario

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 presente sul mercato, ma non è facile da configurare. In effetti, può essere decisamente frustrante.

Questa guida è disponibile per il download in formato PDF gratuito. Scarica la Guida per principianti di OpenHAB Parte 2: ZWave, MQTT, Regole e grafici ora. Sentiti libero di copiare e condividere questo con i tuoi amici e familiari.

Nella prima parte della guida, ti ho guidato attraverso l'installazione di OpenHAB su un Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry PiOpenHAB è una piattaforma di automazione domestica open source matura che funziona su una varietà di hardware ed è protocollo agnostico, nel senso che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più , ha introdotto i concetti chiave di OpenHAB e ti ha mostrato come aggiungere i tuoi primi oggetti nel sistema. Oggi andremo oltre:

instagram viewer

  • Aggiunta di dispositivi ZWave
  • Aggiunta di un controller Harmony Ultimate
  • Introduzione alle regole
  • Presentazione di MQTT e installazione di un broker MQTT sul Pi, con sensori su un Arduino
  • Registrazione dei dati e rappresentazione grafica

Introduzione a Z-Wave

Z-Wave è da anni il protocollo di domotica dominante: è affidabile, è stato ampiamente sviluppato e funziona su una gamma molto più lunga rispetto a qualsiasi altro prodotto di casa intelligente. Ci sono centinaia di sensori Z-Wave disponibili per te che svolgono una vasta gamma di attività. OpenHAB può 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 benissimo per te o potrebbe essere afflitto da problemi piccoli ma persistenti. Almeno, non comprare una casa piena di sensori fino a quando non avrai avuto la possibilità di provarne alcuni. L'unico motivo per scegliere Z-Wave è se non sei settato al 100% su OpenHAB e desideri lasciare aperte le tue opzioni in futuro: Z-Wave ad esempio funziona con Samsung SmartThings Quale Smart Hub per l'automazione domestica è il migliore per te?Per un po ', la gente ha pensato all'idea come nient'altro che un espediente, ma le recenti versioni dei prodotti hanno dimostrato che l'automazione della casa intelligente sta iniziando a mantenere le sue promesse. Leggi di più hub, nonché hub specifici di Z-Wave come Homeseer e una gamma di altre opzioni software come Domoticz.

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

Aeotec Z-Stick Gen5, Z-Wave Plus USB per creare gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB per creare gateway Acquista ora su Amazon $44.95

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ù complessa.

Innanzitutto, dal lato hardware: ogni controller ha il suo modo di accoppiarsi con i dispositivi (tecnicamente noto come "modalità di inclusione" in cui è assegnato un ID nodo). Nel caso di Aotec Z-Stick, questo significa scollegarlo dalla porta USB e premere una volta il pulsante per metterlo in modalità di inclusione. Quindi avvicinalo al dispositivo che stai accoppiando e premi anche il pulsante di inclusione su quello (questo varierà anche: la mia presa Everspring richiede che il pulsante prema 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 ripristinarlo alla porta standard se trovi che è stato riassegnato dinamicamente a un'altra. Meglio ancora: non collegarlo al Pi finché non hai fatto prima tutti gli accoppiamenti hardware.

Installazione dei collegamenti HABmin e Z-Wave

Dato che OpenHAB non è in realtà un'utilità di configurazione per Z-Wave, installeremo un altro strumento di gestione web, qualcosa chiamato HABmin. Dirigiti verso il HABmin Github repository scarica la versione attuale. Dopo averlo decompresso, troverai 2 .vaso file nella directory dei componenti aggiuntivi: questi devono essere collocati nella corrispondente directory dei componenti aggiuntivi nella condivisione Home di OpenHAB (se stai usando anche Aotec gen5 Z-Stick, assicurati di avere almeno la versione 1.8 del legame Z-Wave).

Quindi, crea una nuova cartella nella directory di webapps e la chiama "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 aggiuntivo .jar. Potrebbe valere la pena provare entrambi solo per vedere quale preferisci.

Se non l'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, la Z-stick si è presentata come /dev/ttyACM0 (un modem). Potrebbe essere più semplice eseguire il comando una volta prima di collegarlo e una volta dopo, in modo da poter vedere cosa cambia se non si è sicuri.

devtty

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

sudo usermod -a -G dialout openhab

Ora, per dare il via a tutto, riavvia OpenHAB

sudo service openhab restart

Spero che, se stai controllando il registro di debug, vedrai qualcosa del genere. Congratulazioni, ora stai parlando con Z-Wave. È inoltre possibile che il registro di debug sia inondato di messaggi provenienti da vari nodi Z-Wave. Cominciamo controllando HABMIN per vedere cosa ha trovato: http://openhab.local: 8080 / habmin / index.html (sostituendo openhab.local con il nome host o l'indirizzo IP di Raspberry Pi).

zwave si avvia nel registro di openhab

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

modifica il nome del dispositivo

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 i tuoi. La configurazione di dispositivi personalizzati non riconosciuti va ben oltre lo scopo di questa guida, ma supponiamo che per ora sia supportata.

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

Switch Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Numero Deumidifier_Watts "Consumo energetico deumidificatore [% .1f W]" {zwave = "3: command = meter"}

Perfetto.

Il prossimo è un multi-sensore Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Acquista ora su Amazon $69.27

Per questo, ho trovato un esempio di configurazione su iwasdot.come 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 "Umidità corridoio [% .0f %%]" (Corridoio, umidità) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Numero Hallway_Luminance "Luminanza corridoio [% .0f Lux]" (Corridoio) {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 %%]" (Movimento) {zwave = "2: 0: comando = batteria"}

Se il formato di questo ti sembra strano, ti preghiamo di tornare al primo guida per principianti Introduzione a OpenHAB Home Automation su Raspberry PiOpenHAB è una piattaforma di automazione domestica open source matura che funziona su una varietà di hardware ed è protocollo agnostico, nel senso che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più , in particolare la sezione Rilegatura tonalità, in cui spiego come vengono aggiunti gli elementi. Probabilmente dovrai copiare sempre esempi di questo tipo, ma nel caso in cui tu abbia un nuovo dispositivo, la documentazione di rilegatura dettaglia tutti i comandi.

Logitech Harmony Binding

Prima di passare alle regole, volevo aggiungere una breve nota sul lavoro con l'associazione Harmony. Sono un grande fan di Serie Harmony di telecomandi finali Logitech Harmony Ultimate Review e GiveawayIl tuo salotto è il caos - ammettilo. Sei perdonato per esserti chiesto quale telecomando controlla quale dispositivo. Che cosa succede con la TV, l'amplificatore, il TiVO, il lettore BluRay, forse anche l'illuminazione: le attività di commutazione diventano un lungo ... Leggi di più per semplificare l'esperienza del centro multimediale domestico, 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 sistema centralizzato e persino incluse nelle regole di automazione.

Inizia installando i tre file di binding che trovi utilizzando apt-cache per cercare "harmony":

ricerca apt-cache di openhab per il binding dell'armonia

Non dimenticare di chown la directory dei bind 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, aprire il file openhab.cfg e aggiungere una nuova sezione come segue:

########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181o il tuo ip
harmonyhub: username =your-armonia-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 dettagli di accesso, quelli che inserisci quando avvii l'utility di configurazione Harmony standard. Questo è tutto. Al riavvio di Hue, il registro di debug dovrebbe presentare un improvviso scoppio di output dall'associazione.

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

uscita openhab formattata json

Oltre all'attività standard di PowerOff che è predefinita, troverai le tue attività definite elencate qui per nome. Ora creiamo un semplice controllo con un pulsante per iniziare le attività. Innanzitutto, nel file degli 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 Rilegatura String bidirezionale, 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 esso, nel file Sitemap.

Cambia elemento = Harmony_Activity mappings = [PowerOff = 'Off', Esercizio = 'Esercizio', 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 tuo telecomando, ma l'eccezione a ciò che ho scoperto era qualsiasi cosa con uno spazio nel nome dell'attività, come "Guarda la TV". In questo caso, dovrai utilizzare l'ID attività. Ancora una volta, è possibile trovare l'ID nell'output di debug JSON. Salva e aggiorna la tua interfaccia, dovresti vedere qualcosa di simile a questo:

armonia di openhab nella mappa del sito

Puoi anche fare riferimento alle attività nelle tue regole, come vedremo in seguito. Leggi la pagina wiki per maggiori informazioni su Rilegatura di armonia.

Un'introduzione generale alle regole

La maggior parte degli hub domestici intelligenti include una sorta di creazione di regole in modo da poter reagire automaticamente ai dati del sensore e agli eventi domestici. In effetti, direi che una casa davvero intelligente non è una casa 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 puoi programmare, superando di gran lunga la complessità della maggior parte hub domestici intelligenti Battle of the Smart Home Hub: Cosa c'è là fuori e cosa sta arrivando? Leggi di più o Ricette IFTTT IFTTT ora si collega a qualsiasi cosa: Presentazione di Maker ChannelI potenziali usi di IFTTT sono infiniti. Ma fino ad ora, è stato difficile interfacciarlo con i tuoi progetti hardware. Oggi è cambiato tutto. Leggi di più .

Le regole di programmazione suona peggio di quello che è. Cominciamo 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 l'oggetto JamesInOffice è cambiato da OFF a ON. quindi sendCommand (Office_Hue, ON) regola fine "Spia dell'ufficio spenta quando James lascia" quando l'oggetto JamesInOffice è cambiato da ON a OFF. quindi sendCommand (Office_Hue, OFF) fine

Innanzitutto, chiamiamo la regola: sii descrittivo, quindi sai quale evento sta per essere attivato. Successivamente, definiamo la nostra semplice regola dicendo quando x è vero, quindi y. Fine indica 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 bit di sintassi: Articolo, che consente di interrogare lo stato di qualcosa; e sendCommand, che fa esattamente quello che pensi che farà. Ti ho detto che è stato facile.

Probabilmente non è necessario usare un paio di regole, ma man mano che la mia logica diventa più complessa, sarà vantaggioso separarli per capire se sono entrare o uscire dall'area - e potrebbe essere una buona idea aggiungere un sensore di luce da qualche parte nell'equazione in modo da non accendere inutilmente luci.

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

regola "Esercitare ogni mattina" quando Time cron "0 0 8 1/1 *? *" then harmonyStartActivity ("Esercizio") fine.

Ancora una volta, nominiamo la regola, dichiariamo le condizioni in cui 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 CRONtab normale). ero solito cronmaker.com per creare l'espressione, ma puoi anche leggere la guida al formato [Non più disponibile] per una spiegazione dettagliata e altri esempi.

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

Le mie regole dicono semplicemente "8am ogni mattina, ogni giorno della settimana, dire al mio sistema Harmony Ultimate di iniziare l'attività di Esercizio", che a sua volta attiva la TV, la Xbox, l'amplificatore e preme il pulsante A dopo un minuto per avviare il disco nell'unità.

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 unico deumidificatore che devo spostare ovunque sia necessario, quindi ho deciso di esaminare 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. Regola stringa "Humidity Monitor" quando Time cron "0 * * * *?" then var prevHigh = 0 var highHum = "" Umidità? .members.forEach [hum | logDebug ("umidità.regole", nomeum.um); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("umidità.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); fine.

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

Probabilmente non sarà necessario però: ci sono centinaia di regole di esempio là fuori:

  • Spiegazione dettagliata delle regole sul wiki ufficiale
  • Il campioni di regole ufficiali pagina wiki
  • Portare le regole a nuove altezze
  • Campioni avanzati su IngeniousFool.net

MQTT per OpenHAB e Internet of Things

MQTT è un sistema di messaggistica leggero per le comunicazioni machine-to-machine - una sorta di Twitter per il tuo Arduinos o Raspberry Pis per parlare tra loro (anche se ovviamente funziona molto più che semplicemente quelli). Sta rapidamente guadagnando popolarità e si trova una casa con dispositivi Internet of Things, che in genere sono bassi microcontroller delle risorse che necessitano di un modo affidabile per trasmettere i dati dei sensori all'hub o ricevere in remoto comandi. Questo è esattamente quello che ci faremo.

Ma perché reinventare la ruota?

Il trasporto telemetrico MQ è stato inventato nel lontano 1999 per collegare oleodotti tramite satellite lento connessioni, appositamente progettate per ridurre al minimo l'utilizzo della batteria e la larghezza di banda, garantendo comunque affidabilità consegna dei dati. Nel corso degli anni i principi di progettazione sono rimasti gli stessi, ma il caso d'uso è passato da sistemi integrati specializzati a dispositivi Internet of Things generali. Nel 2010 il protocollo è stato rilasciato senza diritti d'autore, aperto a chiunque da utilizzare e implementare. Ci piace gratis.

Forse ti starai chiedendo perché ci stiamo anche preoccupando di un altro protocollo - dopo tutto abbiamo già l'HTTP - 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 del creatore IFTTT ora si collega a qualsiasi cosa: Presentazione di Maker ChannelI potenziali usi di IFTTT sono infiniti. Ma fino ad ora, è stato difficile interfacciarlo con i tuoi progetti hardware. Oggi è cambiato tutto. Leggi di più ). E avresti ragione. Tuttavia, l'overhead di elaborazione di un server HTTP è piuttosto grande, al punto che non è possibile eseguirne uno su un server microcontrollore incorporato come Arduino (almeno, puoi, ma non avrai molta memoria per nulla altro). MQTT è invece leggero, quindi l'invio di messaggi in rete non ostruirà i tubi e può facilmente adattarsi al nostro piccolo spazio di memoria di Arduino.

Come funziona MQTT?

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

Continuiamo con Twitter-per-macchine analogia però. Proprio come gli utenti di Twitter possono twittare i propri 140 caratteri insignificanti 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 su quello canale. Questo modello di pubblicazione e sottoscrizione è indicato come pub / sub, al contrario della tradizione client / server modello di HTTP.

HTTP richiede di contattare la macchina con cui stai comunicando, per esempio Ciao, quindi di avere un continuo riconoscimento reciproco mentre ricevi o metti i dati. Con pub / sub, il cliente che esegue la pubblicazione non ha bisogno di sapere quali clienti sono abbonati: semplicemente elimina i messaggi e il broker li ridistribuisce a tutti i clienti abbonati. Qualsiasi cliente può sia pubblicare sia iscriversi agli argomenti, proprio come un utente di Twitter.

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

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

È anche importante sapere che OpenHAB non agirà come il tuo broker MQTT - lo affronteremo in seguito. Tuttavia, OpenHAB fungerà da client: può sia pubblicare il tuo registro attività di OpenHAB, sia legare in particolare canali ai dispositivi, ad esempio puoi avere uno switch 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 che tu possa iscriverti a un argomento e anche pubblicare messaggi, non funzionerà come 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 tenere tutto internamente, 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 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.

Profilo di esempio mqttfx

Per un test rapido, fai clic sulla scheda "iscriviti" e digita inTopic / nella casella di testo, quindi premi il tasto sottoscrivi pulsante. Ora sei iscritto per ricevere un messaggio sull'argomento denominato in Topic, sebbene mostrerà 0 messaggi. Torna alla scheda di pubblicazione, digita Topic nella casella piccola e un breve messaggio nella casella di testo grande di seguito. Colpire Pubblicare alcune volte e guardare indietro nella scheda Iscriviti. Dovresti vedere alcuni messaggi apparsi in quell'argomento.

test inTopic MQTT

Prima di aggiungere alcuni sensori reali alla nostra rete, dobbiamo conoscere i livelli degli argomenti, 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, in realtà.

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

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / LivingRoom / temperatura. myHome / Soggiorno / umidità. myHome / cucina / temperatura. myHome / cucina / umidità

Dovresti già vedere come questa struttura ad albero è perfetta per una casa intelligente piena di sensori e dispositivi. La migliore pratica da utilizzare con più sensori in una singola stanza è quella di pubblicare ciascuna variabile del sensore in base al proprio argomento - ramificarsi per una maggiore specificità (come negli esempi sopra) - piuttosto che provare a pubblicare più tipi di sensori sullo stesso canale.

I clienti possono quindi pubblicare o abbonarsi a qualsiasi numero di singoli livelli di argomento oppure utilizzare alcuni caratteri jolly speciali per filtrare dall'alto nella struttura ad albero.

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

myHome / + / temperatura

abbonerebbe il client ad entrambi

myHome / LivingRoom / temperatura. myHome / cucina / temperatura

... ma non i livelli di umidità.

# È un carattere jolly multi-livello, quindi puoi recuperare qualsiasi cosa dall'array di sensori livingRoom con:

myHome / Soggiorno / #

Tecnicamente, puoi anche iscriverti al livello radice # che ti dà assolutamente tutto da fare passare attraverso il broker, ma può essere come attaccarti una manichetta antincendio in faccia: un po ' travolgente. 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.

MQTT Suggerimento per principianti: “/myHome/” è un argomento diverso da "casa mia/" - l'inclusione di 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 uno nel tuo kit di partenza, ma in caso contrario, sostituisci il sensore ambientale con un sensore di movimento (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 desidereremo un modo migliore / più economico per comunicare che dover usare una connessione di rete in ogni stanza, ma questo serve per imparare le basi.

Inizia scaricando biblioteca pubsubclient di Github. Se hai utilizzato il pulsante "Scarica come ZIP", la struttura è leggermente sbagliata. Decomprimi, rinomina la cartella in just pubsubclient, quindi estrarre i due file da src cartella e spostarli su di un livello alla radice della cartella scaricata. Quindi sposta l'intera cartella sul 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 seguente riga:

client.setServer ("192.168.1.99", 1883);

Sfortunatamente, non possiamo usare il nome descrittivo (OpenHAB.local nel mio caso) poiché lo stack TCP / IP su Arduino è molto semplicistico e aggiungere il codice per la denominazione Bonjour sarebbe un sacco di memoria che non vogliamo sprecare. Per modificare gli argomenti su cui vengono trasmessi i dati del sensore, scorrere fino a queste righe:

buffer di caratteri [10]; dtostrf (t, 0, 0, buffer); client.publish ( "openhab / Himitsu / temperatura", tampone); 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 ( "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 per confermare la ricezione del comando.

Carica il tuo codice, collega Arduino alla rete e usando MQTT.fx iscriviti a uno dei due # o openhab / Himitsu / # (o qualunque cosa tu abbia cambiato il nome della stanza, ma non dimenticare di includere il # alla fine). Molto presto dovresti vedere i messaggi in arrivo; e se invii ON o OFF all'argomento del comando, vedrai anche i riconoscimenti tornare.

messaggi mqtt arduino che ritornano

Binding MQTT per OpenHAB

Il passaggio finale dell'equazione è agganciarlo 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 l'associazione.

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

Riavvia OpenHAB

sudo service openhab restart

Quindi aggiungiamo uno o due elementi:

/ * Sensori MQTT * / Numero Himitsu_Temp "Temperatura Himitsu [% .1f ° C]"(Himitsu, Temperature) {mqtt = " (Himitsu, Humidity) {mqtt = "

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

Congratulazioni, ora hai la base di un array di sensori basato su Arduino economico. Lo rivedremo in futuro e posizioneremo gli Arduino sulla propria rete RF completamente separata. Ho anche creato una versione identica per schede Wizwiki 7500 se ti capita di avere uno di quelli.

Dati di persistenza e rappresentazione grafica

Ormai probabilmente hai installato un sacco di sensori, sia da Z-Wave che da Arduinos personalizzati con MQTT, quindi può visualizzare lo stato corrente di tali sensori in qualsiasi momento e dovresti anche reagire al loro valore in regole. Ma la cosa interessante dei valori dei sensori è generalmente che cambiano nel tempo: è qui che arrivano la persistenza e la 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 modo 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 crea un nuovo file chiamato rrd4j.persist nel configurazioni / persistenza cartella. Incolla quanto segue:

Strategie {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange. } Gli elementi {// persistono tutto quando il valore viene aggiornato, solo un valore predefinito e ripristinali 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 // in alternativa puoi aggiungere qui elementi specifici, come // Bedroom_Humidity, JamesInOffice: strategia = everyMinute. }

Nella prima parte di questo file, stiamo definendo le strategie, il che significa semplicemente dare un nome a un'espressione CRON. Questo è 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 essere in futuro.

Nella seconda metà del file, diciamo a rr4dj quali valori di dati salvare. Come impostazione predefinita, salveremo tutto ogni volta che viene aggiornato, ma ho anche specificato alcune strategie basate sul tempo per sensori specifici. Le temperature non mi preoccupano troppo, quindi ho impostato questo per salvare solo ogni ora, ma l'umidità è una grande preoccupazione per me, quindi voglio vedere come sta cambiando ogni minuto. Se ci sono altri dati che desideri specificamente salvare ad orari prestabiliti, aggiungili qui ora o modifica se necessario.

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

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

rrd4j memorizza i dati

Successivamente, 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 = Periodo camera_umidità = h

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

Per creare un grafico con più elementi, basta semplicemente rappresentare graficamente il nome del gruppo:

Voce del grafico = Periodo di umidità = h
grafico

Potresti anche essere interessato a sapere che puoi usare questo grafico altrove; sta generando un'immagine utilizzando il seguente URL: http://YOUROPENHABURL: 8080 / grafico? gruppi = umidità & periodo = h

Com'è Il tuo Sistema OpenHAB in arrivo?

Questo è tutto per questa puntata della guida, ma non aspettarti che sia l'ultimo che hai sentito parlare di OpenHAB. Spero 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 veramente completo.

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, se hai trovato utile questa guida, fai clic su quei pulsanti di condivisione per dire ai tuoi amici come anche loro possono configurare il proprio sistema OpenHAB.

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.