Senzor consum contor gaz
Pentru a putea ajusta consumul de energie cu sau fără ajutorul unui modul OpenTherm este necesar să cunoști exact consumul de gaz ca să poți observa ce rezultate au modificările întreprinse.
Consumul de gaz poate fi înregistrat foarte ușor cu ajutorul unui senzor magnetic.
Ultima cifră din afișaj (sutimile de metru cub) conține un magnet în dreptul cifrei 0. La fiecare închidere a contactului se înregistrează 0.01 mc așa cum e precizat și pe fața contorului.
Pentru citire sunt foarte utili senzorii magnetici de geam/ușă deschisă. Aceștia utilizează în cele mai multe cazuri un senzor Reed care nu este chiar cea mai sensibilă soluție pentru citirea magnetului din contor.
Pentru tutorialul de astăzi am folosit un senzor Zigbee "Silvercrest smart window and door sensor" cumpărat dintr-un supermarket cunoscut. Acesta este la bază un model Tuya cu codul TY0203.
Se desface foarte ușor pentru a modifica conținutul.
Se îndepărtează senzorii Reed...
Se pregătesc cca. 35cm de conductor fin pentru conectarea unui senzor magnetic Hall model CC6201TO. Acesta are un consum infim (5 μA) și nu influențează deloc longevitatea bateriilor AAA din senzorul Zigbee.
Se atașează conductorii la senzorul Hall CC6201TO
Se aplica tuburi termocontractibile pentru izolare
Se introduc conductorii în carcasa senzorului Zigbee prin cele 3 găuri laterale deja existente.
Se cositoresc pe placa Zigbee astfel: roșu la plus, negru la minus și galben la contactul superior al vechiului senzor Reed (contactul Reed inferior este conectat la masă și nu ne este util).
Închidem carcasa senzorului Zigbee.
Montăm senzorul Zigbee într-o cutie închisă ermetic și scoatem senzorul printr-o gaura laterală pe care o etanșăm cu silicon.
Asociem senzorul Zigbee la coordonatorul nostru (Zigbee2MQTT sau ZHA) și acesta ne prezintă următoarele date:
Contact - este open atunci când ultima cifră a contorului este între 2 și 8 (depinde de model) și closed între 9 și 1. La fiecare trecere de la Open la Close sau de la Close la Open putem adăuga 0,01mc consum de gaz la valoarea salvată în Node Red sau Home Assistant.
Battery low, Tamper, Battery și Linkquality sunt restul de informații utile care sunt prezentate de acest model de senzor Zigbee. În cazul în care dorim să monitorizăm 2 contoare de gaz (apropiate unul de altul) putem utiliza un al doilea senzor Hall CC6201TO în locul butonului tamper.
Integrarea senzorului în Node Red
Avem nevoie de un nod MQTT in, un nod funcție și un nod MQTT out. Apoi pentru salvarea indexului de un nod MQTT in și o funcție pentru salvarea în flow.
În funcție de cum este configurat Zigbee2MQTT avem două metode de integrare.
1. Zigbee2MQTT cu mesaje atribut
Preluam mesajul Zigbee din topicul corect, ieșirea este tip String
Prelucrăm informația primită astfel:
var contact_gaz = flow.get('contact_gaz') || 'false'; var index = flow.get('index_gaz') || 0; var m = null; if (msg.payload == 'true' && contact_gaz == 'false' && index > 0) { index += 0.01; index = cnt.toFixed(2); index = parseFloat(cnt); m = {topic:'contor/gaz',payload:index}; } flow.set('contact_gaz',msg.payload); return m;
contact_gaz conține ultima stare a senzorului de gaz, adăugăm 0.01 doar dacă anterior era false iar cel curent este true
index_gaz conține indexul curent al contorului, trebuie inițializat manual (salvat în topic 'contor/gaz')
Nodul de ieșire este simplu, în afară de Retain true totul este standard.
Pentru salvarea indexului curent de gaz folosim un nod MQTT in configurat pentru preluare JSON ca sa ne identifice indexul numeric.
Indexul nou îl salvăm direct în flow ca 'index_gaz'.
flow.set('index_gaz',msg.payload);
2. Zigbee2MQTT cu mesaje JSON
În cazul mesajelor de tip JSON nodul MQTT de intrare trebuie configurat pentru preluare JSON astfel:
Informația primită o prelucrăm astfel:
var contact_gaz = flow.get('contact_gaz') || false; var index = flow.get('index_gaz') || 0; var m = null; if (msg.payload.contact === true && contact_gaz === false && index > 0) { index += 0.01; index = cnt.toFixed(2); index = parseFloat(cnt); m = {topic:'contor/gaz',payload:index}; } flow.set('contact_gaz',msg.payload.contact); return m;
Din acest moment avem consumul de gaz în timp real, îl putem salva într-o bază de date de tipul InfluxDB, putem genera grafice cu Grafana, calcula diferențe în funcție de reglaje.
De exemplu, în graficele de mai jos se poate observa:
- verde = temperatura centralei (OpenTherm)
albastru = modulatia flăcării (OpenTherm) - consumul instantaneu în mc/h care este diferit de modulația centralei raportată prin OpenTherm
în grafic se pot observa câteva liniuțe fine care apar o dată la 10 minute, este consumul unei plite pe gaz. - indexul contorului de gaz