Nicht in jedem Haushalt ist bereits eine Heizung mit einem passenden Internet-Adapter verbaut, über den Verbrauchswerte ausgelesen werden können. Möchte man aber dennoch den Verbrauch der Heizung dokumentieren, könnte in Haushalten mit Gasanschluss der Gaszähler die Lösung sein. Viele Gaszähler haben haben am Zählwerk einen Magnet eingebaut, der beim Null-Durchlauf der dritten Nachkommastelle abgefragt werden kann. Unterhalb der Zählereinheit lässt sich eine Aussparung erkennen, in der im Original von den meisten Herstellern eine Lesemodul mit Reed-Kontakt eingesetzt werden kann.

Aussparung für Reed Kontakt in Gaszähler

Aussparung für Reed Kontakt in Gaszähler

Hinweis: Uns haben immer wieder Fragen erreicht, ob diese Lösung sicher ist. Diese Anleitung nimmt KEINERLEI Änderungen am Gaszähler vor, sie nutzt lediglich die vorgesehen Aussparung für die Digitalisierung des Zählerrads, das eingesetzte Aqara-Modul arbeitet mit einer Knopfzelle mit 3V Spannung.

Außerdem erreichen uns auf Grund der aktuellen Situation in der Energieversorgung und den Preissteigerungen viele dankende Hinweise, dass damit der Verbrauch erst analysiert und dann auch optimiert werden kann.

Empfehlung:
Einen entsprechenden Lösungsansatz für smarte Stromzähler haben wir hier mit USB-Lesekopf oder hier mit WIFI-Lesekopf beschrieben.
Wer den Wasserzähler smart machen möchte, findet hier eine smarte Anleitung.

Über diese Möglichkeit, können wir den Zählerstand über Impulse des Nulldurchlaufs erfassen. Wir brauchen hierfür nicht mehr als einen Tür- oder Fensterkontakt, der magnetisch arbeitet. Z.B. kostengünstig den Türkontakt von Aqara. Die Hauptplatine lässt sich einfach aus dem Gehäuse lösen und passt in diesem Fall, ein Gaszähler des Herstellers elster, genau in die Aussparung.

Xiaomi Aqara Türkontakt für den Gaszähler

Xiaomi Aqara Türkontakt für den Gaszähler

In den Gaszähler eingesetzt, sieht die Lösung wie folgt aus:

Elster Gaszähler mit Aqara Türkontakt zur Verbrauchsmessung

Elster Gaszähler mit Aqara Türkontakt zur Verbrauchsmessung

Leider ist die Genauigkeit der Lösung deutlich unter 100%, nach ca. 6 Monaten beläuft sich die Abweichung, offenbar durch fehlende bzw. ausgesetzte Impulse durch den Aqara Türkontaktsensor, auf ca. 6%. Dennoch reicht dies für eine grundlegende Ermittlung des Gasverbrauchs unserer Meinung nach aus.

In ioBroker müssen jetzt nur die Impulse erfasst und ein virtueller Zählerstand hochgezählt werden:

Gaszähler smart machen mit Blockly Script

Gaszähler smart machen mit Blockly Script

Als Blockly Script zum Import:

<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</variable>
  </variables>
  <block type="comment" id="n|,v(`aGOkJU._Td}A)U" x="63" y="113">
    <field name="COMMENT">Initiale Anlage Datenpunkt in 0_userdata</field>
    <next>
      <block type="create" id="vbVY%8QwK0/PSL``P@^C">
        <field name="NAME">0_userdata.0.Haus.Gaszaehler.Stand</field>
        <value name="VALUE">
          <block type="math_number" id="0*-s/P|{{c=Jb:7FTUS:">
            <field name="NUM">3472.02</field>
          </block>
        </value>
        <next>
          <block type="comment" id="VA;+A.z1jSiWze=.XN.!">
            <field name="COMMENT">Trigger auf Türsensor, wenn geöffnet</field>
            <next>
              <block type="on" id="!B3c)zg!B}sKAmV3[fv;">
                <field name="OID">zigbee.0.00158d0002bfedad.opened</field>
                <field name="CONDITION">ne</field>
                <field name="ACK_CONDITION"></field>
                <statement name="STATEMENT">
                  <block type="controls_if" id="dJJ^]%qBhLuNsEhhQ(QU">
                    <value name="IF0">
                      <block type="on_source" id="v%n]JUgucGNb2`5%gqW|">
                        <field name="ATTR">state.val</field>
                      </block>
                    </value>
                    <statement name="DO0">
                      <block type="comment" id="VeWjEGfnphgH%ydcz0V;">
                        <field name="COMMENT">IST Stand um 0.01 hochzählen</field>
                        <next>
                          <block type="variables_set" id="5Ky.EHsYi?11:OSE_Me^">
                            <field name="VAR" id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</field>
                            <value name="VALUE">
                              <block type="math_rndfixed" id="[Emx+G?!qoPs[Zr9A|FF">
                                <field name="n">2</field>
                                <value name="x">
                                  <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="e1ojYI#gi4H%~qprS/21">
                                    <field name="NUM">3.1234</field>
                                  </shadow>
                                  <block type="get_value" id="|AiqsA(@Tego.tA-34k3">
                                    <field name="ATTR">val</field>
                                    <field name="OID">0_userdata.0.Haus.Gaszaehler.Stand</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <next>
                              <block type="math_change" id="aFOU~GPEe,6x#x;CHpm{">
                                <field name="VAR" id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</field>
                                <value name="DELTA">
                                  <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id=".fA8)L]+KOMIs.-BXnSp">
                                    <field name="NUM">1</field>
                                  </shadow>
                                  <block type="math_number" id="83_~Ny8Si=5v^6PD+-v2">
                                    <field name="NUM">0.01</field>
                                  </block>
                                </value>
                                <next>
                                  <block type="variables_set" id="p?lVK*64NBFZF`-}mUnX">
                                    <field name="VAR" id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</field>
                                    <value name="VALUE">
                                      <block type="math_rndfixed" id="iSY[mYY843YQD,OGSy`F">
                                        <field name="n">2</field>
                                        <value name="x">
                                          <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="e1ojYI#gi4H%~qprS/21">
                                            <field name="NUM">3.1234</field>
                                          </shadow>
                                          <block type="variables_get" id="1kVce~3/{;:CoK/zx!3(">
                                            <field name="VAR" id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                    <next>
                                      <block type="comment" id="f2$+muX8{^:KMP=W8EP{">
                                        <field name="COMMENT">Objekt mit neuem Wert aktualisieren</field>
                                        <next>
                                          <block type="update" id="[Hy:rqv?%s8@JE;d2$IM">
                                            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                            <field name="OID">javascript.0.Gaszaehler.Stand</field>
                                            <field name="WITH_DELAY">FALSE</field>
                                            <value name="VALUE">
                                              <block type="variables_get" id="OV=RpFK6kU?_9ta|tIUm">
                                                <field name="VAR" id="(k3c!X[.Tfd3!{(S@O~b">zaehlerstand</field>
                                              </block>
                                            </value>
                                          </block>
                                        </next>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

Als ioBroker Script:

var zaehlerstand;

// Initiale Anlage Datenpunkt in 0_userdata
createState("0_userdata.0.Haus.Gaszaehler.Stand", 3472.02, async function () {
});
// Trigger auf Türsensor, wenn geöffnet
on({id: "zigbee.0.00158d0002bfedad.opened"/*Is open*/, change: "ne"}, async function (obj) {
  var value = obj.state.val;
  var oldValue = obj.oldState.val;
  if ((obj.state ? obj.state.val : "")) {
    // IST Stand um 0.01 hochzählen
    zaehlerstand = Math.round(getState("0_userdata.0.Haus.Gaszaehler.Stand").val*100)/100;
    zaehlerstand = (typeof zaehlerstand == 'number' ? zaehlerstand : 0) + 0.01;
    zaehlerstand = Math.round(zaehlerstand*100)/100;
    // Objekt mit neuem Wert aktualisieren
    setState("javascript.0.Gaszaehler.Stand"/*Gaszaehler.Stand*/, zaehlerstand, true);
  }
});

Möchte man den Verbrauch stündlich, täglich, wöchentlich, monatlich und jährlich protokollieren, kann dieses Script dazu genutzt werden, alternativ nutzt man hierzu den SourceAnalytix-Adapter.