Sommario:

Allarme da PIR a WiFi (e domotica): 7 passaggi (con immagini)
Allarme da PIR a WiFi (e domotica): 7 passaggi (con immagini)

Video: Allarme da PIR a WiFi (e domotica): 7 passaggi (con immagini)

Video: Allarme da PIR a WiFi (e domotica): 7 passaggi (con immagini)
Video: Allarme antifurto economico facile che funziona bene, wireless. EZVIZ smart home sensor kit Zigbee 2024, Luglio
Anonim
Image
Image
Allarme PIR a WiFi (e Domotica)
Allarme PIR a WiFi (e Domotica)

Panoramica

Questa istruzione ti darà la possibilità di visualizzare l'ultima data/ora (e facoltativamente una cronologia delle ore) di quando sono stati attivati i PIR (sensori a infrarossi passivi) del tuo allarme domestico, nel tuo software di automazione domestica. In questo progetto, discuterò come utilizzare con OpenHAB (software di automazione domestica gratuito, che uso personalmente) sebbene funzionerà con qualsiasi altro software o applicazione di automazione domestica che supporta MQTT (anche descritto più avanti in questo articolo). Questa istruzione ti guiderà attraverso i passaggi necessari su come collegare un circuito stampato e Wemos D1 mini (una scheda IOT che utilizza un chip ESP8266) che attinge alle zone di allarme nella scatola di controllo dell'allarme in modo che quando una zona (che contiene uno o più PIR) viene attivato, il Wemos invia un messaggio in modalità wireless utilizzando il protocollo MQTT al software di automazione domestica che a sua volta visualizza l'ultima data/ora di tale attivazione. Viene fornito anche il codice Arduino per programmare il Wemos.

introduzione

L'immagine sopra è ciò che vedo tramite una delle schermate dell'app OpenHAB sul mio iPhone. Il testo della data/ora è codificato a colori per fornire una rappresentazione più rapida di quando è stato attivato il PIR: mostrerà rosso (attivato nell'ultimo minuto), arancione (attivato negli ultimi 5 minuti), verde (attivato negli ultimi 30 minuti), blu (attivato nell'ultima ora) o altrimenti, nero. Facendo clic sulla data/ora, verrà visualizzata una vista cronologica dei trigger PIR, dove 1 significa attivato e 0 è inattivo. Ci sono molti usi per questo, ad esempio potrebbe integrare la tua soluzione di presenza a casa, può rilevare i movimenti se sei assente e tramite le regole OpenHAB, inviare notifiche al tuo telefono, potresti usarlo come faccio io per vedere se i miei figli sono alzarsi nel cuore della notte, innescato da un PIR che risiede fuori dalle loro camere da letto!

OpenHAB è semplicemente il software di automazione domestica che uso, ce ne sono molti altri - e se supportano MQTT, puoi facilmente adattare questo progetto al software che usi.

Ipotesi

Questa istruzione presuppone che tu abbia già (o installerai):

  • Ovviamente un sistema di allarme domestico con PIR (sensori infrarossi passivi) e che hai accesso alla scatola di controllo dell'allarme per collegare il cablaggio necessario
  • OpenHAB (software di automazione domestica open source gratuito) in esecuzione, anche se, come discusso, dovrebbe funzionare con qualsiasi software di automazione domestica che può includere un'associazione MQTT. In alternativa, puoi modificare tu stesso il codice in base alle tue esigenze.
  • Broker Mosquitto MQTT (o simile) installato e vincolato configurato con OpenHAB (MQTT è un protocollo di tipo sottoscrizione/pubblicazione di messaggistica che è leggero e ottimo per la comunicazione tra dispositivi)

Se non esegui OpenHAB e un broker MQTT, consulta questo eccellente articolo sul sito Web MakeUseOf

Di cosa ho bisogno?

Per creare il controller wireless, dovrai procurarti le seguenti parti:

  • Wemos D1 mini V2 (ha un CHIP wireless ESP8266 integrato)
  • Un comparatore LM339 (questo eseguirà il controllo del PIR inattivo rispetto a quello attivato)
  • Una fonte di alimentazione a 5 V CC per Wemos (OPPURE, un convertitore buck CC-CC. Nota: un regolatore di tensione LM7805 potrebbe non funzionare per questa applicazione come discusso più avanti in questo progetto)
  • Due resistori per un partitore di tensione (la dimensione dipenderà dalle tensioni di allarme, discusse più avanti nel progetto)
  • Un resistore da 1K ohm per fungere da resistore pull down per il controllo della potenza dell'LM339
  • Un MOSFET 2N7000 (o simile) per accendere logicamente l'LM339 (possibilmente opzionale, discusso più avanti nel progetto)
  • Una breadboard di dimensioni adeguate per la configurazione e il test del circuito
  • Un mucchio di fili per breadboard per collegare tutto insieme
  • Strumenti necessari: tronchesi laterali, filo unipolare
  • Un multimetro DC (obbligatorio!)

Passaggio 1: la scatola di controllo del sistema di allarme

La scatola di controllo del sistema di allarme
La scatola di controllo del sistema di allarme

Prima alcune avvertenze e disclaimer

Personalmente, ho un sistema di allarme Bosch. Ti consiglio vivamente di scaricare il manuale pertinente per il tuo particolare sistema di allarme e familiarizzare con esso prima di iniziare poiché dovrai spegnere il sistema di allarme per cablare le zone. Ti consiglierei anche di leggere questo articolo nella sua interezza prima di iniziare!

Di seguito è riportato un elenco di alcune cose che dovresti sapere prima di iniziare: assicurati di leggerle e comprenderle prima di procedere! Non mi assumo alcuna responsabilità se rovini il tuo sistema di allarme e/o devi pagare il tuo installatore per ripararlo. Tuttavia, se leggi e comprendi quanto segue e prendi le precauzioni necessarie, dovresti stare bene:

1. Il mio sistema di allarme aveva una batteria di backup all'interno della scatola e aveva anche un interruttore antimanomissione all'interno del coperchio (che fornisce l'accesso alla scheda del sistema di allarme) in modo da spegnere l'allarme anche dall'esterno, quando si rimuove il pannello anteriore del controllo scatola ha fatto scattare l'allarme! Per aggirare questo problema mentre lavoravo al progetto, ho bypassato la protezione antimanomissione scollegando e poi cortocircuitando l'interruttore antimanomissione (il grosso filo rosso come mostrato nella foto sopra)

2. Quando si riaccende il sistema di allarme, dopo circa ~12 ore la centrale di allarme ha iniziato a emettere un segnale acustico con codici di errore. Dopo aver determinato i codici di errore tramite il manuale, ho scoperto che mi stava avvertendo che:

  • La data/ora non è stata impostata (mi serviva il codice principale e la sequenza di tasti dal manuale per riconfigurare)
  • Che la batteria di backup non fosse collegata (soluzione semplice, avevo appena dimenticato di ricollegare la batteria)

3. Nel mio allarme, ci sono 4 blocchi di connessione di zona (etichettati Z1-Z4) per i PIR da collegare alla scheda di allarme principale, tuttavia - il mio sistema di allarme è effettivamente in grado di 8 zone. Ogni blocco di connessione di zona può effettivamente gestire 2 x zone ciascuno (Z1 fa Z1 e Z5, Z2 fa Z2 e Z6 e così via). Il sistema di allarme ha una protezione antimanomissione integrata per impedire a qualcuno di dire, aprendo il coperchio del sistema di allarme come menzionato sopra, o tagliando i fili a un PIR. Distingue tra ogni zona tamper tramite resistori EOL (fine linea). Si tratta di resistori di dimensioni specifiche che risiedono alla "fine della linea" - in altre parole, all'interno del PIR (o dell'interruttore antimanomissione della scatola di controllo, o della scatola della sirena o qualunque cosa sia collegata a quella zona) Come accennato in precedenza, questi resistori sono usati come "tamper". protezione' - tecnicamente, se qualcuno taglia i cavi a un PIR - perché il sistema di allarme si aspetta di vedere una certa resistenza da quel PIR, quindi se la resistenza cambia, si presume che qualcuno abbia manomesso il sistema e attiverà l'allarme.

Per esempio:

Sul mio allarme, la zona "Z4" ha 2 fili, uno va al PIR nel mio corridoio e uno va all'interruttore antimanomissione della scatola di controllo dell'allarme. All'interno del corridoio PIR, ha una resistenza da 3300 ohm. L'altro filo che va all'interruttore antimanomissione della scatola di controllo ha una resistenza da 6800 ohm collegata in serie. In questo modo il sistema di allarme distingue (logicamente) tra manomissioni "Z4" e "Z8". Allo stesso modo, la zona "Z3" ha un PIR (con una resistenza da 3300 ohm all'interno) e anche l'interruttore antimanomissione della sirena (con una resistenza da 6800 ohm all'interno) che costituisce "Z7". L'installatore dell'allarme avrebbe preconfigurato il sistema di allarme in modo da sapere quale dispositivo è collegato a ciascuna zona (e modificato la dimensione del resistore EOL per adattarlo, perché il sistema di allarme è programmato per sapere quali sono le dimensioni dei diversi resistori EOL. Sotto in nessun caso dovresti cambiare il valore di questi resistori!)

Quindi, in base a quanto sopra, poiché ogni zona può avere più dispositivi collegati (con diversi valori di resistenza) e ricordando la formula V = IR (tensione = ampere x resistenza), ciò può anche significare che ogni zona può avere tensioni diverse. Il che ci porta al passaggio successivo, misurando ciascuna zona di tensione IDLE vs TRIGGERED…

Passaggio 2: misurazione della tensione della zona di allarme

Misurazione della tensione della zona di allarme
Misurazione della tensione della zona di allarme
Misurazione della tensione della zona di allarme
Misurazione della tensione della zona di allarme

Una volta ottenuto l'accesso alla scheda principale del sistema di allarme (e bypassato l'interruttore antimanomissione se ne hai uno, come nel passaggio precedente), riaccendi il sistema di allarme. Ora dobbiamo misurare la tensione di ciascuna zona quando è IDLE (nessun movimento davanti al PIR) vs TRIGGERED (il PIR ha rilevato un movimento) Prendi carta e penna in modo da poter annotare le letture della tensione.

AVVERTENZA: è molto probabile che la maggior parte del sistema di allarme funzioni a 12 V CC, tuttavia avrà la sua alimentazione iniziale a 220 V (o 110 V) CA, con un trasformatore che converte l'alimentazione da CA a CC. LEGGERE il manuale e prendere ulteriori precauzioni assicurandosi di NON misurare alcun terminale CA!!! Come per lo screenshot del mio sistema di allarme in questa pagina, puoi vedere che la parte inferiore dell'immagine è l'alimentazione CA, trasformata in 12V CC. Stiamo misurando i 12V DC nelle caselle rosse evidenziate. Non toccare mai l'alimentazione CA. Fate estrema attenzione!

Misurazione della tensione PIR

Ho 4 x PIR collegati a Z1 fino a Z4. Misura ciascuna delle tue zone come segue.

  1. Innanzitutto, identificare il terminale GND e i terminali di zona sul pannello di allarme. Li ho evidenziati nell'immagine mostrata dal manuale del mio allarme Bosch.
  2. Prendi il tuo multimetro e imposta la misurazione della tensione su 20 V CC. Collegare il cavo nero (COM) dal multimetro al terminale GND sull'allarme. Posiziona il cavo rosso (+) del tuo multimetro sulla prima zona - nel mio caso etichettato "Z1". Annotare la lettura della tensione. Eseguire gli stessi passaggi per le zone rimanenti. Le mie misure di tensione sono le seguenti:
  • Z1 = 6,65V
  • Z2 = 6,65V
  • Z3 = 7,92 V
  • Z4 = 7,92 V

Come sopra, le mie prime due zone hanno solo PIR collegati. Nelle ultime due zone sono cablati sia i PIR che la protezione antimanomissione (manomissione scatola di controllo Z3, manomissione sirena Z4). Notare le differenze di tensione.

3. Probabilmente avrai bisogno di 2 persone per questo passaggio successivo. Dovrai anche sapere quale PIR si trova in quale zona. Torna indietro e leggi la tensione sulla prima zona. Ora chiedi a qualcuno in casa di camminare davanti al PIR, la tensione dovrebbe scendere. Prendere nota della nuova lettura della tensione. Nel mio caso, le tensioni si leggono come segue quando vengono attivati i PIR:

  • Z1 = 0V
  • Z2 = 0V
  • Z3 = 4,30V
  • Z4 = 4,30V

Come sopra, posso vedere che quando vengono attivate le zone 1 e 2, la tensione scende da 6,65 V a 0 V. Tuttavia, quando vengono attivate le zone 3 e 4, la tensione scende da 7,92 V a 4,30 V.

Misurazione alimentazione 12V

Useremo il terminale 12V DC dalla scatola di controllo dell'allarme per alimentare il nostro progetto. Dobbiamo misurare la tensione dall'alimentazione a 12V DC sull'allarme. Sebbene indichi già 12V, dobbiamo conoscere una lettura più accurata. Nel mio caso, in realtà legge 13,15 V. Annota questo, avrai bisogno di questo valore nel passaggio successivo.

Perché misuriamo la tensione?

Il motivo per cui abbiamo bisogno di misurare la tensione per ogni PIR è a causa del circuito che creeremo. Useremo un chip comparatore differenziale quad LM339 (o comparatore quad op-amp) come componente elettrico principale per questo progetto. L'LM339 ha 4 comparatori di tensione indipendenti (4 canali) in cui ogni canale accetta 2 x tensioni di ingresso (un ingresso invertente (-) e uno non invertente (+), vedi diagramma) Se la tensione della tensione di ingresso invertente dovesse scendere al di sotto di la tensione non invertente, allora la sua uscita correlata sarà portata a massa. Allo stesso modo, se la tensione di ingresso non invertente scende al di sotto dell'ingresso invertente, l'uscita viene portata a Vcc. Convenientemente, a casa mia ho 4 x PIR/zone di allarme, quindi ogni zona sarà collegata a ciascun canale del comparatore. Se hai più di 4 x PIR, ti servirà un comparatore con più canali, o un altro LM339!

Nota: l'LM339 consuma energia in nano-ampere, quindi non influenzerà la resistenza EOL del sistema di allarme esistente.

Se questo è fonte di confusione, continua comunque con il passaggio successivo, inizierà ad avere più senso una volta che lo avremo collegato!

Passaggio 3: creazione di un divisore di tensione

Image
Image

Cos'è un partitore di tensione?

Un partitore di tensione è un circuito con 2 x resistori (o più) in serie. Forniamo tensione in (Vin) al primo resistore (R1) L'altro lato di R1 si collega al primo lato del secondo resistore (R2) e l'altra estremità di R2 si collega a GND. Prendiamo quindi una tensione di uscita (Vout) dalla connessione tra R1 e R2. Quella tensione diventerà la nostra tensione di riferimento per l'LM339. Per ulteriori informazioni su come funzionano i divisori di tensione, vedere il video di YouTube di Adohms

(Nota: i resistori non hanno polarità, quindi possono essere cablati in entrambi i modi)

Calcolo della nostra tensione di riferimento

Supponendo che la tensione diminuisca quando viene attivato il PIR (questo dovrebbe essere il caso per la maggior parte degli allarmi), ciò che stiamo cercando di ottenere è ottenere una lettura della tensione che sia praticamente a metà strada tra la nostra tensione di inattività più bassa e la nostra tensione di attivazione più alta, questa diventerà la nostra tensione di riferimento.

Prendendo come esempio la mia sveglia…

Le tensioni di zona inattive erano Z1 = 6,65 V, Z2 = 6,65 V, Z3 = 7,92 V, Z4 = 7,92 V. La tensione a vuoto più bassa è quindi 6,65 V

Le tensioni di intervento della zona erano: Z1 = 0V, Z2 = 0V, Z3 = 4,30V, Z4 = 4,30V. La massima tensione di attivazione è quindi 4,30 V

Quindi dobbiamo scegliere un numero a metà tra 4,30 V e 6,65 V (non deve essere esatto, solo approssimativamente) Nel mio caso, la mia tensione di riferimento deve essere intorno a 5,46 V. Nota: se la tensione minima di inattività e quella di attivazione massima sono molto vicine l'una all'altra a causa di più zone che causano un intervallo di tensioni diverse, potrebbe essere necessario creare 2 o più divisori di tensione.

Calcolo dei valori dei nostri resistori per il partitore di tensione

Ora abbiamo una tensione di riferimento, dobbiamo calcolare le dimensioni dei resistori di cui abbiamo bisogno per creare un partitore di tensione che fornirà la nostra tensione di riferimento. Utilizzeremo la sorgente di tensione a 12 V CC (Vs) dell'allarme. Tuttavia, come nel passaggio precedente, quando abbiamo misurato l'alimentazione a 12 V CC, abbiamo effettivamente ottenuto 13,15 V. Dobbiamo calcolare il partitore di tensione usando questo valore come sorgente.

Calcola Vout usando la legge di ohm…

Vout = Vs x R2 / (R1 + R2)

…oppure usa un calcolatore online del partitore di tensione:-)

Dovrai sperimentare con i valori del resistore fino a raggiungere l'uscita desiderata. Nel mio caso, ha funzionato con R1 = 6.8k ohm e R2 = 4.7K ohm, calcolato in forma lunga come segue:

Vout = Vs x R2 / (R1 + R2)

Vout = 13,15 x 4700 / (6800 + 4700)

Vout = 61, 805 / 11, 500

Vout = 5.37V

Passaggio 4: collegare l'LM339

Cablaggio del Wemos D1 Mini
Cablaggio del Wemos D1 Mini

Divisore di tensione per ingressi invertenti LM339

Come discusso in precedenza per quanto riguarda il comparatore LM339, occorrono 2 x ingressi. Uno sarà una tensione da ciascun PIR a ciascun canale non invertente (+) terminale, l'altro sarà la nostra tensione di riferimento al nostro terminale invertente (-). La tensione di riferimento deve alimentare tutti e 4 gli ingressi invertenti del comparatore. Spegnere il sistema di allarme prima di eseguire questi passaggi.

  • Esegui un filo dal blocco 12 V CC sul sistema di allarme alla guida + sulla breadboard *
  • Esegui un filo dal blocco GND sul sistema di allarme al binario - sulla breadboard **
  • Installare il comparatore LM339 al centro della breadboard (la tacca indica più vicino al pin 1)
  • Installa i 2 resistori per creare un circuito divisore di tensione e un cavo per l'uscita di tensione divisa
  • Eseguire i cavi dal Vout "diviso in tensione" a ciascun terminale invertente LM339

* SUGGERIMENTO: se possibile, usa una clip a coccodrillo per l'alimentazione, in quanto ciò rende più facile fornire alimentazione ON/OFF al tuo progetto** IMPORTANTE! Potrebbe essere necessario un MOSFET SE stai alimentando il Wemos dal pannello di allarme! Nel mio caso, l'LM339, il Wemos e l'Allarme ricevono tutti l'alimentazione dalla stessa fonte (cioè: il sistema di allarme stesso) Questo mi permette di accendere tutto con una singola connessione di alimentazione. Tuttavia, per impostazione predefinita, i pin GPIO sul Wemos sono definiti come pin "INPUT", il che significa che prendono qualsiasi tensione venga loro lanciata e si affidano a quella fonte per fornire livelli corretti di tensione (livelli min/max) in modo che il Wemos non riesca t schiantarsi o bruciarsi. Nel mio caso il sistema di allarme si accende e inizia a eseguire la sequenza di avvio molto velocemente - così velocemente, infatti, che lo fa prima che Wemos possa avviarsi e dichiarare i pin GPIO come "INPUT_PULLUP" (tensione sollevata internamente all'interno del patata fritta). Ciò non significa che le differenze di tensione causerebbero il crash del Wemos quando l'intero sistema si accendeva. L'unico modo per aggirarlo sarebbe spegnere e riaccendere manualmente il Wemos. Per risolvere questo problema, viene aggiunto un MOSFET che funge da "interruttore logico" per l'accensione dell'LM339. Ciò consente al Wemos di avviarsi, impostare i suoi 4 pin GPIO del comparatore come "INPUT_PULLUP", ritardare alcuni secondi e POI (tramite un altro pin GPIO D5 definito come OUTPUT) inviare il segnale "HIGH" tramite il pin GPIO D5 al MOSFET, che accende logicamente l'LM339. Consiglierei di cablare come sopra, ma SE scopri che Wemos si blocca come ho fatto io, dovrai includere il MOSFET con un resistore di pull down da 1k ohm. Per ulteriori informazioni su come eseguire questa operazione, vedere la fine di questa istruzione.

Zone di allarme agli ingressi non invertenti LM339

Ora dobbiamo far passare i fili da ciascuna zona della centrale di allarme agli ingressi del comparatore LM339. Con il sistema di allarme ancora spento, per ogni zona alimentare un filo ad ogni ingresso non invertente (+) del comparatore LM339. Ad esempio, nel mio sistema:

  • Il filo da Z1 va all'ingresso LM339 1+
  • Il filo da Z2 va all'ingresso LM339 2+
  • Il filo da Z3 va all'ingresso LM339 3+
  • Il filo da Z4 va all'ingresso LM339 4+

Fare riferimento al pin-out dell'LM339 al punto 3 se si ha un promemoria (è codificato a colori con l'immagine della breadboard). Una volta terminato, la tua breadboard dovrebbe apparire simile all'immagine mostrata in questo passaggio.

Accendere il sistema di allarme e misurare la tensione in uscita dal partitore di tensione per assicurarsi che corrisponda alla tensione di riferimento calcolata in precedenza.

Passaggio 5: cablaggio del Wemos D1 Mini

Cablaggio del Wemos D1 mini

Ora ci siamo occupati di tutti gli ingressi LM339, ora dobbiamo cablare il Wemos D1 mini. Ogni pin di output LM339 va a un pin Wemos GPIO (general purpose input/output) che designeremo tramite codice come pin di input pullup. Il Wemos richiede fino a 5 V massimo come tensione Vcc (sorgente di ingresso) (sebbene la regoli internamente fino a 3,3 V) Utilizzeremo un regolatore di tensione LM7805 molto comune (EDIT: vedi sotto) per far scendere il binario 12 V sulla breadboard fino a 5V per alimentare il Wemos. La scheda tecnica dell'LM7805 indica che è necessario un condensatore collegato su ciascun lato del regolatore per attenuare la potenza, come mostrato nell'immagine della breadboard. La gamba più lunga del condensatore è positiva (+), quindi assicurati che sia collegata nel modo giusto.

Il regolatore di tensione prende tensione (pin sul lato sinistro), massa (pin centrale) e tensione fuori (pin sul lato destro) Ricontrolla il pin-out se il tuo regolatore di tensione varia dall'LM7805.

(EDIT: ho scoperto che gli amplificatori provenienti dal pannello di allarme erano troppo alti per essere gestiti dall'LM7805. Ciò stava causando molto calore nel piccolo dissipatore di calore dell'LM7805 e causandone il guasto, causando a sua volta l'arresto del Wemos funzionante. Ho sostituito l'LM7805 e i condensatori con un convertitore buck DC-DC e da allora non ho avuto problemi. Questi sono molto facili da cablare. Basta collegare la tensione di ingresso dall'allarme, collegarsi prima a un multimetro e utilizzare la vite del potenziometro e regolare fino a quando la tensione di uscita è ~ 5V)

Pin di ingresso GPIO

Per questo progetto, utilizziamo i seguenti pin:

  • zona Z1 => pin D1
  • zona Z2 => pin D2
  • zona Z3 => pin D3
  • zona Z4 => pin D5

Collegare le uscite dall'LM339 ai relativi pin GPIO sulla scheda Wemos, come da immagine della breadboard mostrata in questo passaggio. Ancora una volta, ho codificato a colori gli input e gli output corrispondenti, per rendere più facile vedere cosa si riferisce a cosa. Ogni pin GPIO in Arduino è definito come un 'INPUT_PULLUP', il che significa che verranno tirati fino a 3,3 V in condizioni di utilizzo normale (IDLE) e l'LM339 li tirerà a terra se il PIR viene attivato. Il codice rileva la variazione da ALTO a BASSO e invia un messaggio in modalità wireless al software di automazione domestica. Se hai problemi con questo funzionamento, è possibile che tu abbia i tuoi ingressi invertenti e non invertenti nel modo sbagliato (se la tensione dal tuo PIR diventa alta quando viene attivato, come accade con la maggior parte dei PIR per hobby, allora vorrai le connessioni il in altro modo)

Arduino IDE

Rimuovi il Wemos dalla breadboard, ora dobbiamo caricare il codice su di esso (link alternativo qui) Non entrerò nei dettagli su come farlo, poiché ci sono molti articoli sul web sul caricamento del codice su Wemos o altri ESP8266 tipo tavole. Collega il cavo USB alla scheda Wemos e al PC e avvia l'IDE Arduino. Scarica il codice e aprilo nel tuo progetto. Dovrai assicurarti che sia installata e caricata la scheda corretta per il tuo progetto, nonché la porta COM corretta selezionata (Strumenti, Porta). Avrai anche bisogno delle librerie appropriate installate (PubSubClient, ESP8266Wifi) Per ottenere la scheda Wemos inclusa nel tuo schizzo, consulta questo articolo.

Dovrai modificare le seguenti righe di codice e sostituirle con il tuo SSID e la password per la tua connessione wireless. Inoltre, modifica l'indirizzo IP in modo che punti al tuo broker MQTT.

// Wifi

const char* ssid = "your_wifi_ssid_here"; const char* password = "tua_password_wifi_qui"; // Indirizzo IP del broker MQTT MQTT_SERVER(172, 16, 223, 254)

Una volta modificato, verifica il tuo codice, quindi caricalo sulla scheda Wemos tramite un cavo USB.

Appunti:

  • Se utilizzi porte GPIO diverse, dovrai modificare il codice. Se stai usando più o meno zone di quelle che ho io, dovrai anche aggiustare il codice e TOTAL_ZONES=4; costante per adattarsi.
  • All'avvio del mio sistema di allarme, il sistema di allarme eseguiva un test di alimentazione a tutti e 4 i PIR che portavano a terra tutti i GPIO collegati, facendo credere ai Wemo che le zone fossero state attivate. Il codice ignorerà l'invio di messaggi MQTT se vede tutte e 4 le zone attive contemporaneamente, poiché presuppone che il sistema di allarme si stia accendendo.

Link per il download alternativo al codice QUI

Passaggio 6: test e configurazione di OpenHAB

Test e configurazione OpenHAB
Test e configurazione OpenHAB

Test MQTT

MQTT è un sistema di messaggistica "sottoscrivi/pubblica". Uno o più dispositivi possono parlare con un "broker MQTT" e "iscriversi" a un determinato argomento. Qualsiasi messaggio in arrivo da qualsiasi altro dispositivo che viene "pubblicato" sullo stesso argomento, verrà inviato dal broker a tutti i dispositivi che lo hanno sottoscritto. È un protocollo estremamente leggero e semplice da usare e perfetto come un semplice sistema di trigger come quello qui. Per i test, puoi visualizzare i messaggi MQTT in arrivo da Wemos al tuo broker MQTT eseguendo il seguente comando sul tuo server Mosquitto (Mosquitto è uno dei tanti software MQTT Broker disponibili). Questo comando si iscrive ai messaggi keepalive in arrivo:

mosquitto_sub -v -t openhab/alarm/status

Dovresti vedere i messaggi in entrata provenienti da Wemos ogni 30 secondi circa con il numero "1" (che significa "Sono vivo") Se vedi "0" costanti (o nessuna risposta) allora non c'è comunicazione. Una volta che vedi il numero 1 in arrivo, significa che Wemos sta comunicando con il broker MQTT (cerca "MQTT Last Will and Testament" per ulteriori informazioni su come funziona, o guarda questo post di blog davvero interessante)

Dopo aver dimostrato che la comunicazione è funzionante, possiamo verificare che lo stato di una zona venga segnalato tramite MQTT. Iscriviti al seguente argomento (il # è un carattere jolly)

mosquitto_sub -v -t openhab/alarm/#

Dovrebbero arrivare i soliti messaggi di stato, così come l'indirizzo IP del Wemos stesso. Cammina di fronte a un PIR e dovresti anche vedere le informazioni sulla zona che indicano che è APERTA, quindi un secondo circa dopo che è CHIUSA, in modo simile al seguente:

openhab/allarme/stato 1

openhab/allarme/zona1 OPEN

openhab/allarme/zona1 CHIUSO

Una volta che funziona, possiamo configurare OpenHAB in modo che sia ben rappresentato nella GUI.

Configurazione OpenHAB

Le seguenti modifiche sono necessarie per OpenHAB:

File di trasformazione 'alarm.map': (opzionale, per il test)

CLOSED=IdleOPEN=TriggeredNULL=Sconosciuto-=Sconosciuto

File di trasformazione 'status.map':

0=Fallito

1=In linea -=GI! NULL=sconosciuto

file "oggetti":

String alarmMonitorState "Alarm Monitor [MAP(status.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/status:state:default]" } String alarmMonitorIPAddress "Alarm Monitor IP [%s]" { mqtt ="<[mqttbroker:openhab/alarm/ipaddress:state:default]" } Numero zone1_Chart_Period "Grafico zona 1" Contatto alarmZone1State "Stato zona 1 [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/zone1:state:default" } String alarmZone1Trigger "Lounge PIR [%1$ta %1$tr]" Number zone2_Chart_Period "Zone 2 Chart" Contact alarmZone2State "Zone 2 State [MAP(alarm.map):% s]" { mqtt="<[mqttbroker:openhab/alarm/zone2:state:default" } String alarmZone2Trigger "First Hall PIR [%1$ta %1$tr]" Number zone3_Chart_Period "Zone 3 Chart" Contact alarmZone3State "Zone 3 Stato [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/zone3:state:default" } Stringa alarmZone3Trigger "PIR camera da letto [%1$ta %1$tr]" Numero zone4_Chart_Period "Grafico zona 4" Contact alarmZone4State "Stato zona 4 [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openha b/alarm/zone4:state:default" } String alarmZone4Trigger "PIR sala principale [%1$ta %1$tr]"

file 'sitemap' (incluso il grafico rrd4j):

Text item=alarmZone1Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Switch item=zone1_Chart_Period label= Mappature "Periodo"=[0="Ora", 1="Giorno", 2="Settimana"] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone1_Chart_Period==0, zone1_Chart_Period= =Non inizializzato] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone1_Chart_Period==1] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone1_Chart_Period==2] } } Text item=alarmZone2Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Switch item= zone2_Chart_Period label="Periodo" mapping=[0="Ora", 1="Giorno", 2="Settimana"] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone2_Chart_Period==0, zone2_Chart_Period==Non inizializzato] Immagine url="https://localhost:8080/rrdchart.png" visibilità=[zone2_Chart_Period==1] Immagine url="https://localhost:8080/rrdchart.png" visibilità=[zone2_Chart_Period ==2] } } Elemento di testo=alarmZone3Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Cambia elemento=zone3_Chart_Period label="Period" mapping =[0="Ora", 1="Giorno", 2="Settimana"] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone3_Chart_Period==0, zone3_Chart_Period==Non inizializzato] Immagine url="https://localhost:8080/rrdchart.png" visibilità=[zone3_Chart_Period==1] Immagine url="https://localhost:8080/rrdchart.png" visibilità=[zone3_Chart_Period==2] } } Testo item=alarmZone4Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Cambia item=zone4_Chart_Period label=" Mappature periodo"=[0="Ora", 1="Giorno", 2="Settimana"] Url immagine="https://localhost:8080/rrdchart.png" visibilità=[zone4_Chart_Period==0, zone4_Chart_Period== Non inizializzato] Url immagine = "https://localhost:8080/rrdchart.png" visibilità=[zone4_Chart_Period==1] Url immagine = "https://localhost:8080/rrdchart.png" visibilità = [zone4_Chart_Period==2] } } // FACOLTATIVO ma utile per diagnosticare lo stato e l'indirizzo IP ss Text item=alarmMonitorState Text item=alarmMonitorIPAddress

file "regole":

regola "Cambio stato zona 1 allarme"

quando Item alarmZone1State è cambiato in OPEN quindi postUpdate(alarmZone1Trigger, new DateTimeType()) alarmZone1State.state = CLOSED end

regola "Cambio stato zona 2 allarme"

quando Item alarmZone2State è cambiato in OPEN quindi postUpdate(alarmZone2Trigger, new DateTimeType()) alarmZone2State.state = CLOSED end

regola "Cambio stato zona 3 allarme"

quando Item alarmZone3State è cambiato in OPEN quindi postUpdate(alarmZone3Trigger, new DateTimeType()) alarmZone3State.state = CLOSED end

regola "Cambio stato zona 4 allarme"

quando Item alarmZone4State è cambiato in OPEN quindi postUpdate(alarmZone4Trigger, new DateTimeType()) alarmZone4State.state = CLOSED end

Potrebbe essere necessario modificare leggermente la configurazione OpenHAB di cui sopra per adattarla alla propria configurazione.

In caso di problemi con l'attivazione dei PIR, iniziare dall'inizio e misurare le tensioni per ciascuna parte del circuito. Una volta che sei soddisfatto, controlla il cablaggio, assicurati che ci sia un terreno comune, controlla i messaggi su Wemos tramite una console di debug seriale, controlla la comunicazione MQTT e controlla la sintassi della tua trasformazione, degli elementi e dei file della mappa del sito.

Buona fortuna!

Consigliato: