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.

senzor pe contor gaz


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.

senzor Zigbee Silvercrest smart window and door sensor


Se desface foarte ușor pentru a modifica conținutul.

senzor Zigbee desfăcut


Se îndepărtează senzorii Reed...

fără senzori 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.

senzor hall CC6201


Se atașează conductorii la senzorul Hall CC6201TO

conductori la senzor hall CC6201


Se aplica tuburi termocontractibile pentru izolare

termocontractibil la senzor hall CC6201


Se introduc conductorii în carcasa senzorului Zigbee prin cele 3 găuri laterale deja existente.

conductori în carcasă Zigbee


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).

conductori cositoriți pe placa Zigbee


Închidem carcasa senzorului Zigbee.

Î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.

Montăm senzorul Zigbee într-o cutie închisă ermetic 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:

date senzor în Zigbee2MQTT


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

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

preluare mesaj MQTT mod atribut


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.

nod ieșire MQTT



Pentru salvarea indexului curent de gaz folosim un nod MQTT in configurat pentru preluare JSON ca sa ne identifice indexul numeric.

nod intrare MQTT index gaz


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:

nod intrare MQTT index gaz mod JSON


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:

  1. verde = temperatura centralei (OpenTherm)
    albastru = modulatia flăcării (OpenTherm)
  2. 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.
  3. indexul contorului de gaz



exemplu grafic consum