Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Gaszähler mit ESPEasy und Honeywell IN-Z65

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    511

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

Gaszähler mit ESPEasy und Honeywell IN-Z65

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
blockly
34 Beiträge 9 Kommentatoren 9.0k Aufrufe 15 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H Offline
    H Offline
    h1ob
    schrieb am zuletzt editiert von
    #2

    Hallo Georg,

    hier wie gewünscht meine Lösung. Diese funktioniert bisher einwandfrei. Ich habe mich mal hingesetzt und ausfühlich kommentiert, damit klar ist, was ich bewirken möchte.

    Wichtig ist nur, dass die Datenpunkte unter gaszaehler.0* existieren. Oder du legst dir eigene Punkte an und weist sie entsprechend den Variablen im Skript zu. Bei Fragen melde dich gerne.

    Gruß
    Davor

    var bLogging = false; // Log (de)aktivieren
    var iZaehlerTotal = 'mqtt.0.Gaszaehler.Gasverbrauch.Total'; //Anzahl Impulse vom NodeMCU (Total)
    var iTotal = 'gaszaehler.0.total';
    var iArbeitsvariable = 'gaszaehler.0.arbeitsvariable'; //Anzahl Impulse
    var iAktuell = 'gaszaehler.0.aktuellerstand'; // Aktueller Stand des Gaszählers
    var iAktuellkwh = 'gaszaehler.0.aktuellerstandkwh'; // Aktueller Stand in kWh
    var iOffset = 'gaszaehler.0.zaeheleroffset';// Offset, falls Anzeige und tatsächlicher Verbrauch abweichen sollten
    var iImpuls = 0.01; //1 Impuls des Gaszählers entspricht 0,01m³ = 10 Liter
    const cBrennwert = 11.5; //Brennwert des Gases: 11.5 (Für Umrechung m³ in kWh)
    
    // Zeitvariablen für persistente Speicherung (Datenpunkte werden per SQL Adapter geloggt)
    var iTag = 'gaszaehler.0.verbrauch.tag';
    var iWoche = 'gaszaehler.0.verbrauch.woche';
    var iMonat = 'gaszaehler.0.verbrauch.monat';
    var iQuartal = 'gaszaehler.0.verbrauch.quartal';
    var iJahr = 'gaszaehler.0.verbrauch.jahr';
    var iZwSumme, iZwSummeKwh;
    
    // Zeitvariablen für temporäre Speicherung (Datenpunkte werden per Schedule und Funktion jeweils genullt)
    var iTempTag = 'gaszaehler.0.verbrauch.tempTag';
    var iTempWoche = 'gaszaehler.0.verbrauch.tempWoche';
    var iTempMonat = 'gaszaehler.0.verbrauch.tempMonat';
    var iTempQuartal = 'gaszaehler.0.verbrauch.tempQuartal';
    var iTempJahr = 'gaszaehler.0.verbrauch.tempJahr'; 
    
    // Variablen für Kostenrechnung
    const iGrundGebuehr = 8.88;
    const iArbeitsPreis = 0.055;
    var iKostenTag = 'gaszaehler.0.kosten.tag';
    var iKostenWoche = 'gaszaehler.0.kosten.woche';
    var iKostenMonat = 'gaszaehler.0.kosten.monat';
    var iKostenQuartal = 'gaszaehler.0.kosten.quartal';
    var iKostenJahr = 'gaszaehler.0.kosten.jahr';
    
    // Prüfe ob per MQTT neue Daten angekommen sind
    // Total count damit kein Verbrauch verloren geht, wenn die NodeMCU oder ioBroker neu gestartet werden
    on({id: 'mqtt.0.Gaszaehler.Gasverbrauch.Total', change: "any"}, function (obj) {   
        if(bLogging) log('Total count reingekommen: ' + obj.state.val);
        // lokale Variablen für Zwischenberechnung
        // Total aus dem Datenpunkt
        var liTotal = parseInt(getState(iTotal).val,10);
        if(bLogging) log('Total in Datenpunkt (alter Wert): ' + liTotal);
        // Total per MQTT
        var liTotalmqtt = parseInt(obj.state.val,10);
        if(bLogging) log('Total vom NodeMCU per MQTT: ' + liTotalmqtt);
        // Prüfe ob der Wert im Datenpunkt größer ist als der Wert, der per MQTT reingekommen ist.
        // Wenn ja: NodeMCU wurde vermutlich neu gestartet. Wert im Datenpunkt wird auf 0 gesetzt, damit das neue Delta
        // was bisher angefallen ist verarbeitet werden kann.
        if(liTotal > liTotalmqtt) {
            setState(iTotal,0);
            liTotal = 0;
            if(bLogging) log('Total count genullt, da Total count über MQTT kleiner! NodeMCU vermutlich neu gestartet!');
        };
        // Delta zwischen MQTT Total zu letztem Total im Datenpunkt
        var liDelta = liTotalmqtt - liTotal;
        setState(iArbeitsvariable, liDelta);
        if(bLogging) log('neuer Wert Arbeitsvariable Total (MQTT) - Total Datenpunkt: ' + liDelta);
        // Zwischenrechnung für die anschließende Aufsummierung (*1000 wegen JS Rechenschwäche - Wird später wieder aufgelöst)
        iZwSumme = iImpuls * liDelta * 1000; //m3
        iZwSummeKwh = iImpuls * liDelta * cBrennwert * 1000; // kWh
        if(bLogging) log('Zwischensumme (mal 1000 wegen JS Rechenschwäche): ' + iZwSumme + ' m3 und ' + iZwSummeKwh +' kWh');
        // Aktuelle Werte aus den Datenpunkten + Delta in Variablen schreiben, da Arbeit mit setState() und getState() asynchron und Werte evl. veraltet
        // Neuer Stand in Kubikmeter
        // TODO: Offset einbauen
        var lfAktuellm3 = ((parseFloat(getState(iAktuell).val)) + iZwSumme / 1000).toFixed(3);
        if(bLogging) log('Neuer Stand in m3: ' + lfAktuellm3);
        // Neuer Stand in kWh
        var lfAktuellkwh = ((parseFloat(getState(iAktuellkwh).val)) + iZwSummeKwh / 1000).toFixed(3);
        if(bLogging) log('Neuer Stand in kWh: ' + lfAktuellkwh);
        // Neue Zählerstände wegschreiben
        setState(iAktuell, lfAktuellm3);
        setState(iAktuellkwh, lfAktuellkwh);
        if(bLogging) log('Zu schreibender Verbrauch in m3/kWh: ' + lfAktuellm3 + ' / ' + lfAktuellkwh);   
        // Total Counter Datenpunkt = Total Counter vom NodeMCU
        setState(iTotal, liTotalmqtt);
        if(bLogging) log('Total count in Datenpunkt jetzt: ' + liTotalmqtt);
        // Zwischenrechnung für Funktionsaufruf (Werte pro Tag/Woche... aufsummieren)
        var liFuncSumme = iZwSummeKwh / 1000;
        if(bLogging) log('Verbrauch in kWh der den Perioden hinzugefügt wird: ' + liFuncSumme);
        // Funktion zum Aufsummieren der Werte aufrufen
        fSummenbildung(liFuncSumme);
    });
    
    // Funktionen
    
    function fSummenbildung(summe) {
        setState(iTempTag, (parseFloat(getState(iTempTag).val) + summe).toFixed(3));
        setState(iTempWoche, (parseFloat(getState(iTempWoche).val) + summe).toFixed(3));
        setState(iTempMonat, (parseFloat(getState(iTempMonat).val) + summe).toFixed(3));
        setState(iTempQuartal, (parseFloat(getState(iTempQuartal).val) + summe).toFixed(3));
        setState(iTempJahr, (parseFloat(getState(iTempJahr).val) + summe).toFixed(3));
    }
    
    function fZaehlerstandReset(zeitraum) {
        switch(zeitraum) {
            case 'Tag':
                if (bLogging) log('GASZAEHLER: Gestern: ' + parseFloat(getState(iTempTag).val).toFixed(3));
                setState(iTag, getState(iTempTag).val);
                setState(iKostenTag, (parseFloat(getState(iTempTag).val) * iArbeitsPreis).toFixed(3));
                setState(iTempTag, 0);
                break;
            case 'Woche':
                if (bLogging) log('GASZAEHLER: Vergangene Woche: ' + parseFloat(getState(iTempWoche).val).toFixed(3));
                setState(iWoche, getState(iTempWoche).val);
                setState(iKostenWoche, ((parseFloat(getState(iTempWoche).val) * iArbeitsPreis) + (iGrundGebuehr / 4)).toFixed(3));
                setState(iTempWoche, 0);
                break; 
            case 'Monat':
                if (bLogging) log('GASZAEHLER: Verganener Monat: ' + parseFloat(getState(iTempMonat).val).toFixed(3));
                setState(iMonat, getState(iTempMonat).val);
                setState(iTempMonat, 0);
                setState(iKostenMonat, ((parseFloat(getState(iTempMonat).val) * iArbeitsPreis) + iGrundGebuehr).toFixed(3));
                break; 
            case 'Quartal':
                if (bLogging) log('GASZAEHLER: Vergangenes Quartal: ' + parseFloat(getState(iTempQuartal).val).toFixed(3));
                setState(iQuartal, getState(iTempQuartal).val);
                setState(iKostenQuartal, ((parseFloat(getState(iTempQuartal).val) * iArbeitsPreis) + (iGrundGebuehr * 4)).toFixed(3));
                setState(iTempQuartal, 0);
                break;
            case 'Jahr':
                if (bLogging) log('GASZAEHLER: Vergangenes Jahr: ' + parseFloat(getState(iTempJahr).val).toFixed(3));
                setState(iJahr, getState(iTempJahr).val);
                setState(iKostenJahr, ((parseFloat(getState(iTempJahr).val) * iArbeitsPreis) + (iGrundGebuehr * 12)).toFixed(3));
                setState(iTempJahr, 0);
                break; 
            default:
                log('GASZAEHLER: Fehler beim Reset der Datenpunkte!');
            
        }
    }
    
    
    // Täglich um 0 Uhr ausführen
    schedule("0 0 * * *", function() {
        fZaehlerstandReset('Tag');
    });
    // Montags um 0 Uhr ausführen
    schedule("0 0 * * 1", function() {
        fZaehlerstandReset('Woche');
    });
    // Monatsersten um 0 Uhr ausführen
    schedule("0 0 1 * *", function() {
        fZaehlerstandReset('Monat');
    });
    // Quartalsersten (Jan,Apr,Jul,Okt) um 0 Uhr ausführen
    schedule("0 0 1 1 *", function() {
        fZaehlerstandReset('Quartal');
    });
    schedule("0 0 1 4 *", function() {
        fZaehlerstandReset('Quartal');
    });
    schedule("0 0 1 7 *", function() {
        fZaehlerstandReset('Quartal');
    });
    schedule("0 0 1 10 *", function() {
        fZaehlerstandReset('Quartal');
    });
    // Neujahr um 0 Uhr ausführen
    schedule("0 0 1 1 *", function() {
        fZaehlerstandReset('Jahr');
    });
    
    G 2 Antworten Letzte Antwort
    0
    • H h1ob

      Hallo Georg,

      hier wie gewünscht meine Lösung. Diese funktioniert bisher einwandfrei. Ich habe mich mal hingesetzt und ausfühlich kommentiert, damit klar ist, was ich bewirken möchte.

      Wichtig ist nur, dass die Datenpunkte unter gaszaehler.0* existieren. Oder du legst dir eigene Punkte an und weist sie entsprechend den Variablen im Skript zu. Bei Fragen melde dich gerne.

      Gruß
      Davor

      var bLogging = false; // Log (de)aktivieren
      var iZaehlerTotal = 'mqtt.0.Gaszaehler.Gasverbrauch.Total'; //Anzahl Impulse vom NodeMCU (Total)
      var iTotal = 'gaszaehler.0.total';
      var iArbeitsvariable = 'gaszaehler.0.arbeitsvariable'; //Anzahl Impulse
      var iAktuell = 'gaszaehler.0.aktuellerstand'; // Aktueller Stand des Gaszählers
      var iAktuellkwh = 'gaszaehler.0.aktuellerstandkwh'; // Aktueller Stand in kWh
      var iOffset = 'gaszaehler.0.zaeheleroffset';// Offset, falls Anzeige und tatsächlicher Verbrauch abweichen sollten
      var iImpuls = 0.01; //1 Impuls des Gaszählers entspricht 0,01m³ = 10 Liter
      const cBrennwert = 11.5; //Brennwert des Gases: 11.5 (Für Umrechung m³ in kWh)
      
      // Zeitvariablen für persistente Speicherung (Datenpunkte werden per SQL Adapter geloggt)
      var iTag = 'gaszaehler.0.verbrauch.tag';
      var iWoche = 'gaszaehler.0.verbrauch.woche';
      var iMonat = 'gaszaehler.0.verbrauch.monat';
      var iQuartal = 'gaszaehler.0.verbrauch.quartal';
      var iJahr = 'gaszaehler.0.verbrauch.jahr';
      var iZwSumme, iZwSummeKwh;
      
      // Zeitvariablen für temporäre Speicherung (Datenpunkte werden per Schedule und Funktion jeweils genullt)
      var iTempTag = 'gaszaehler.0.verbrauch.tempTag';
      var iTempWoche = 'gaszaehler.0.verbrauch.tempWoche';
      var iTempMonat = 'gaszaehler.0.verbrauch.tempMonat';
      var iTempQuartal = 'gaszaehler.0.verbrauch.tempQuartal';
      var iTempJahr = 'gaszaehler.0.verbrauch.tempJahr'; 
      
      // Variablen für Kostenrechnung
      const iGrundGebuehr = 8.88;
      const iArbeitsPreis = 0.055;
      var iKostenTag = 'gaszaehler.0.kosten.tag';
      var iKostenWoche = 'gaszaehler.0.kosten.woche';
      var iKostenMonat = 'gaszaehler.0.kosten.monat';
      var iKostenQuartal = 'gaszaehler.0.kosten.quartal';
      var iKostenJahr = 'gaszaehler.0.kosten.jahr';
      
      // Prüfe ob per MQTT neue Daten angekommen sind
      // Total count damit kein Verbrauch verloren geht, wenn die NodeMCU oder ioBroker neu gestartet werden
      on({id: 'mqtt.0.Gaszaehler.Gasverbrauch.Total', change: "any"}, function (obj) {   
          if(bLogging) log('Total count reingekommen: ' + obj.state.val);
          // lokale Variablen für Zwischenberechnung
          // Total aus dem Datenpunkt
          var liTotal = parseInt(getState(iTotal).val,10);
          if(bLogging) log('Total in Datenpunkt (alter Wert): ' + liTotal);
          // Total per MQTT
          var liTotalmqtt = parseInt(obj.state.val,10);
          if(bLogging) log('Total vom NodeMCU per MQTT: ' + liTotalmqtt);
          // Prüfe ob der Wert im Datenpunkt größer ist als der Wert, der per MQTT reingekommen ist.
          // Wenn ja: NodeMCU wurde vermutlich neu gestartet. Wert im Datenpunkt wird auf 0 gesetzt, damit das neue Delta
          // was bisher angefallen ist verarbeitet werden kann.
          if(liTotal > liTotalmqtt) {
              setState(iTotal,0);
              liTotal = 0;
              if(bLogging) log('Total count genullt, da Total count über MQTT kleiner! NodeMCU vermutlich neu gestartet!');
          };
          // Delta zwischen MQTT Total zu letztem Total im Datenpunkt
          var liDelta = liTotalmqtt - liTotal;
          setState(iArbeitsvariable, liDelta);
          if(bLogging) log('neuer Wert Arbeitsvariable Total (MQTT) - Total Datenpunkt: ' + liDelta);
          // Zwischenrechnung für die anschließende Aufsummierung (*1000 wegen JS Rechenschwäche - Wird später wieder aufgelöst)
          iZwSumme = iImpuls * liDelta * 1000; //m3
          iZwSummeKwh = iImpuls * liDelta * cBrennwert * 1000; // kWh
          if(bLogging) log('Zwischensumme (mal 1000 wegen JS Rechenschwäche): ' + iZwSumme + ' m3 und ' + iZwSummeKwh +' kWh');
          // Aktuelle Werte aus den Datenpunkten + Delta in Variablen schreiben, da Arbeit mit setState() und getState() asynchron und Werte evl. veraltet
          // Neuer Stand in Kubikmeter
          // TODO: Offset einbauen
          var lfAktuellm3 = ((parseFloat(getState(iAktuell).val)) + iZwSumme / 1000).toFixed(3);
          if(bLogging) log('Neuer Stand in m3: ' + lfAktuellm3);
          // Neuer Stand in kWh
          var lfAktuellkwh = ((parseFloat(getState(iAktuellkwh).val)) + iZwSummeKwh / 1000).toFixed(3);
          if(bLogging) log('Neuer Stand in kWh: ' + lfAktuellkwh);
          // Neue Zählerstände wegschreiben
          setState(iAktuell, lfAktuellm3);
          setState(iAktuellkwh, lfAktuellkwh);
          if(bLogging) log('Zu schreibender Verbrauch in m3/kWh: ' + lfAktuellm3 + ' / ' + lfAktuellkwh);   
          // Total Counter Datenpunkt = Total Counter vom NodeMCU
          setState(iTotal, liTotalmqtt);
          if(bLogging) log('Total count in Datenpunkt jetzt: ' + liTotalmqtt);
          // Zwischenrechnung für Funktionsaufruf (Werte pro Tag/Woche... aufsummieren)
          var liFuncSumme = iZwSummeKwh / 1000;
          if(bLogging) log('Verbrauch in kWh der den Perioden hinzugefügt wird: ' + liFuncSumme);
          // Funktion zum Aufsummieren der Werte aufrufen
          fSummenbildung(liFuncSumme);
      });
      
      // Funktionen
      
      function fSummenbildung(summe) {
          setState(iTempTag, (parseFloat(getState(iTempTag).val) + summe).toFixed(3));
          setState(iTempWoche, (parseFloat(getState(iTempWoche).val) + summe).toFixed(3));
          setState(iTempMonat, (parseFloat(getState(iTempMonat).val) + summe).toFixed(3));
          setState(iTempQuartal, (parseFloat(getState(iTempQuartal).val) + summe).toFixed(3));
          setState(iTempJahr, (parseFloat(getState(iTempJahr).val) + summe).toFixed(3));
      }
      
      function fZaehlerstandReset(zeitraum) {
          switch(zeitraum) {
              case 'Tag':
                  if (bLogging) log('GASZAEHLER: Gestern: ' + parseFloat(getState(iTempTag).val).toFixed(3));
                  setState(iTag, getState(iTempTag).val);
                  setState(iKostenTag, (parseFloat(getState(iTempTag).val) * iArbeitsPreis).toFixed(3));
                  setState(iTempTag, 0);
                  break;
              case 'Woche':
                  if (bLogging) log('GASZAEHLER: Vergangene Woche: ' + parseFloat(getState(iTempWoche).val).toFixed(3));
                  setState(iWoche, getState(iTempWoche).val);
                  setState(iKostenWoche, ((parseFloat(getState(iTempWoche).val) * iArbeitsPreis) + (iGrundGebuehr / 4)).toFixed(3));
                  setState(iTempWoche, 0);
                  break; 
              case 'Monat':
                  if (bLogging) log('GASZAEHLER: Verganener Monat: ' + parseFloat(getState(iTempMonat).val).toFixed(3));
                  setState(iMonat, getState(iTempMonat).val);
                  setState(iTempMonat, 0);
                  setState(iKostenMonat, ((parseFloat(getState(iTempMonat).val) * iArbeitsPreis) + iGrundGebuehr).toFixed(3));
                  break; 
              case 'Quartal':
                  if (bLogging) log('GASZAEHLER: Vergangenes Quartal: ' + parseFloat(getState(iTempQuartal).val).toFixed(3));
                  setState(iQuartal, getState(iTempQuartal).val);
                  setState(iKostenQuartal, ((parseFloat(getState(iTempQuartal).val) * iArbeitsPreis) + (iGrundGebuehr * 4)).toFixed(3));
                  setState(iTempQuartal, 0);
                  break;
              case 'Jahr':
                  if (bLogging) log('GASZAEHLER: Vergangenes Jahr: ' + parseFloat(getState(iTempJahr).val).toFixed(3));
                  setState(iJahr, getState(iTempJahr).val);
                  setState(iKostenJahr, ((parseFloat(getState(iTempJahr).val) * iArbeitsPreis) + (iGrundGebuehr * 12)).toFixed(3));
                  setState(iTempJahr, 0);
                  break; 
              default:
                  log('GASZAEHLER: Fehler beim Reset der Datenpunkte!');
              
          }
      }
      
      
      // Täglich um 0 Uhr ausführen
      schedule("0 0 * * *", function() {
          fZaehlerstandReset('Tag');
      });
      // Montags um 0 Uhr ausführen
      schedule("0 0 * * 1", function() {
          fZaehlerstandReset('Woche');
      });
      // Monatsersten um 0 Uhr ausführen
      schedule("0 0 1 * *", function() {
          fZaehlerstandReset('Monat');
      });
      // Quartalsersten (Jan,Apr,Jul,Okt) um 0 Uhr ausführen
      schedule("0 0 1 1 *", function() {
          fZaehlerstandReset('Quartal');
      });
      schedule("0 0 1 4 *", function() {
          fZaehlerstandReset('Quartal');
      });
      schedule("0 0 1 7 *", function() {
          fZaehlerstandReset('Quartal');
      });
      schedule("0 0 1 10 *", function() {
          fZaehlerstandReset('Quartal');
      });
      // Neujahr um 0 Uhr ausführen
      schedule("0 0 1 1 *", function() {
          fZaehlerstandReset('Jahr');
      });
      
      G Offline
      G Offline
      GeorgS
      schrieb am zuletzt editiert von
      #3

      @h1ob Danke für das Script war lange nicht richtig aktiv =)

      grüße
      Georg

      Intel NUC, MaxCul, Xiaomi Vacuum Cleaner, Philips Hue, Zigbee, FritzDECT,Shelly

      1 Antwort Letzte Antwort
      0
      • H h1ob

        Hallo Georg,

        hier wie gewünscht meine Lösung. Diese funktioniert bisher einwandfrei. Ich habe mich mal hingesetzt und ausfühlich kommentiert, damit klar ist, was ich bewirken möchte.

        Wichtig ist nur, dass die Datenpunkte unter gaszaehler.0* existieren. Oder du legst dir eigene Punkte an und weist sie entsprechend den Variablen im Skript zu. Bei Fragen melde dich gerne.

        Gruß
        Davor

        var bLogging = false; // Log (de)aktivieren
        var iZaehlerTotal = 'mqtt.0.Gaszaehler.Gasverbrauch.Total'; //Anzahl Impulse vom NodeMCU (Total)
        var iTotal = 'gaszaehler.0.total';
        var iArbeitsvariable = 'gaszaehler.0.arbeitsvariable'; //Anzahl Impulse
        var iAktuell = 'gaszaehler.0.aktuellerstand'; // Aktueller Stand des Gaszählers
        var iAktuellkwh = 'gaszaehler.0.aktuellerstandkwh'; // Aktueller Stand in kWh
        var iOffset = 'gaszaehler.0.zaeheleroffset';// Offset, falls Anzeige und tatsächlicher Verbrauch abweichen sollten
        var iImpuls = 0.01; //1 Impuls des Gaszählers entspricht 0,01m³ = 10 Liter
        const cBrennwert = 11.5; //Brennwert des Gases: 11.5 (Für Umrechung m³ in kWh)
        
        // Zeitvariablen für persistente Speicherung (Datenpunkte werden per SQL Adapter geloggt)
        var iTag = 'gaszaehler.0.verbrauch.tag';
        var iWoche = 'gaszaehler.0.verbrauch.woche';
        var iMonat = 'gaszaehler.0.verbrauch.monat';
        var iQuartal = 'gaszaehler.0.verbrauch.quartal';
        var iJahr = 'gaszaehler.0.verbrauch.jahr';
        var iZwSumme, iZwSummeKwh;
        
        // Zeitvariablen für temporäre Speicherung (Datenpunkte werden per Schedule und Funktion jeweils genullt)
        var iTempTag = 'gaszaehler.0.verbrauch.tempTag';
        var iTempWoche = 'gaszaehler.0.verbrauch.tempWoche';
        var iTempMonat = 'gaszaehler.0.verbrauch.tempMonat';
        var iTempQuartal = 'gaszaehler.0.verbrauch.tempQuartal';
        var iTempJahr = 'gaszaehler.0.verbrauch.tempJahr'; 
        
        // Variablen für Kostenrechnung
        const iGrundGebuehr = 8.88;
        const iArbeitsPreis = 0.055;
        var iKostenTag = 'gaszaehler.0.kosten.tag';
        var iKostenWoche = 'gaszaehler.0.kosten.woche';
        var iKostenMonat = 'gaszaehler.0.kosten.monat';
        var iKostenQuartal = 'gaszaehler.0.kosten.quartal';
        var iKostenJahr = 'gaszaehler.0.kosten.jahr';
        
        // Prüfe ob per MQTT neue Daten angekommen sind
        // Total count damit kein Verbrauch verloren geht, wenn die NodeMCU oder ioBroker neu gestartet werden
        on({id: 'mqtt.0.Gaszaehler.Gasverbrauch.Total', change: "any"}, function (obj) {   
            if(bLogging) log('Total count reingekommen: ' + obj.state.val);
            // lokale Variablen für Zwischenberechnung
            // Total aus dem Datenpunkt
            var liTotal = parseInt(getState(iTotal).val,10);
            if(bLogging) log('Total in Datenpunkt (alter Wert): ' + liTotal);
            // Total per MQTT
            var liTotalmqtt = parseInt(obj.state.val,10);
            if(bLogging) log('Total vom NodeMCU per MQTT: ' + liTotalmqtt);
            // Prüfe ob der Wert im Datenpunkt größer ist als der Wert, der per MQTT reingekommen ist.
            // Wenn ja: NodeMCU wurde vermutlich neu gestartet. Wert im Datenpunkt wird auf 0 gesetzt, damit das neue Delta
            // was bisher angefallen ist verarbeitet werden kann.
            if(liTotal > liTotalmqtt) {
                setState(iTotal,0);
                liTotal = 0;
                if(bLogging) log('Total count genullt, da Total count über MQTT kleiner! NodeMCU vermutlich neu gestartet!');
            };
            // Delta zwischen MQTT Total zu letztem Total im Datenpunkt
            var liDelta = liTotalmqtt - liTotal;
            setState(iArbeitsvariable, liDelta);
            if(bLogging) log('neuer Wert Arbeitsvariable Total (MQTT) - Total Datenpunkt: ' + liDelta);
            // Zwischenrechnung für die anschließende Aufsummierung (*1000 wegen JS Rechenschwäche - Wird später wieder aufgelöst)
            iZwSumme = iImpuls * liDelta * 1000; //m3
            iZwSummeKwh = iImpuls * liDelta * cBrennwert * 1000; // kWh
            if(bLogging) log('Zwischensumme (mal 1000 wegen JS Rechenschwäche): ' + iZwSumme + ' m3 und ' + iZwSummeKwh +' kWh');
            // Aktuelle Werte aus den Datenpunkten + Delta in Variablen schreiben, da Arbeit mit setState() und getState() asynchron und Werte evl. veraltet
            // Neuer Stand in Kubikmeter
            // TODO: Offset einbauen
            var lfAktuellm3 = ((parseFloat(getState(iAktuell).val)) + iZwSumme / 1000).toFixed(3);
            if(bLogging) log('Neuer Stand in m3: ' + lfAktuellm3);
            // Neuer Stand in kWh
            var lfAktuellkwh = ((parseFloat(getState(iAktuellkwh).val)) + iZwSummeKwh / 1000).toFixed(3);
            if(bLogging) log('Neuer Stand in kWh: ' + lfAktuellkwh);
            // Neue Zählerstände wegschreiben
            setState(iAktuell, lfAktuellm3);
            setState(iAktuellkwh, lfAktuellkwh);
            if(bLogging) log('Zu schreibender Verbrauch in m3/kWh: ' + lfAktuellm3 + ' / ' + lfAktuellkwh);   
            // Total Counter Datenpunkt = Total Counter vom NodeMCU
            setState(iTotal, liTotalmqtt);
            if(bLogging) log('Total count in Datenpunkt jetzt: ' + liTotalmqtt);
            // Zwischenrechnung für Funktionsaufruf (Werte pro Tag/Woche... aufsummieren)
            var liFuncSumme = iZwSummeKwh / 1000;
            if(bLogging) log('Verbrauch in kWh der den Perioden hinzugefügt wird: ' + liFuncSumme);
            // Funktion zum Aufsummieren der Werte aufrufen
            fSummenbildung(liFuncSumme);
        });
        
        // Funktionen
        
        function fSummenbildung(summe) {
            setState(iTempTag, (parseFloat(getState(iTempTag).val) + summe).toFixed(3));
            setState(iTempWoche, (parseFloat(getState(iTempWoche).val) + summe).toFixed(3));
            setState(iTempMonat, (parseFloat(getState(iTempMonat).val) + summe).toFixed(3));
            setState(iTempQuartal, (parseFloat(getState(iTempQuartal).val) + summe).toFixed(3));
            setState(iTempJahr, (parseFloat(getState(iTempJahr).val) + summe).toFixed(3));
        }
        
        function fZaehlerstandReset(zeitraum) {
            switch(zeitraum) {
                case 'Tag':
                    if (bLogging) log('GASZAEHLER: Gestern: ' + parseFloat(getState(iTempTag).val).toFixed(3));
                    setState(iTag, getState(iTempTag).val);
                    setState(iKostenTag, (parseFloat(getState(iTempTag).val) * iArbeitsPreis).toFixed(3));
                    setState(iTempTag, 0);
                    break;
                case 'Woche':
                    if (bLogging) log('GASZAEHLER: Vergangene Woche: ' + parseFloat(getState(iTempWoche).val).toFixed(3));
                    setState(iWoche, getState(iTempWoche).val);
                    setState(iKostenWoche, ((parseFloat(getState(iTempWoche).val) * iArbeitsPreis) + (iGrundGebuehr / 4)).toFixed(3));
                    setState(iTempWoche, 0);
                    break; 
                case 'Monat':
                    if (bLogging) log('GASZAEHLER: Verganener Monat: ' + parseFloat(getState(iTempMonat).val).toFixed(3));
                    setState(iMonat, getState(iTempMonat).val);
                    setState(iTempMonat, 0);
                    setState(iKostenMonat, ((parseFloat(getState(iTempMonat).val) * iArbeitsPreis) + iGrundGebuehr).toFixed(3));
                    break; 
                case 'Quartal':
                    if (bLogging) log('GASZAEHLER: Vergangenes Quartal: ' + parseFloat(getState(iTempQuartal).val).toFixed(3));
                    setState(iQuartal, getState(iTempQuartal).val);
                    setState(iKostenQuartal, ((parseFloat(getState(iTempQuartal).val) * iArbeitsPreis) + (iGrundGebuehr * 4)).toFixed(3));
                    setState(iTempQuartal, 0);
                    break;
                case 'Jahr':
                    if (bLogging) log('GASZAEHLER: Vergangenes Jahr: ' + parseFloat(getState(iTempJahr).val).toFixed(3));
                    setState(iJahr, getState(iTempJahr).val);
                    setState(iKostenJahr, ((parseFloat(getState(iTempJahr).val) * iArbeitsPreis) + (iGrundGebuehr * 12)).toFixed(3));
                    setState(iTempJahr, 0);
                    break; 
                default:
                    log('GASZAEHLER: Fehler beim Reset der Datenpunkte!');
                
            }
        }
        
        
        // Täglich um 0 Uhr ausführen
        schedule("0 0 * * *", function() {
            fZaehlerstandReset('Tag');
        });
        // Montags um 0 Uhr ausführen
        schedule("0 0 * * 1", function() {
            fZaehlerstandReset('Woche');
        });
        // Monatsersten um 0 Uhr ausführen
        schedule("0 0 1 * *", function() {
            fZaehlerstandReset('Monat');
        });
        // Quartalsersten (Jan,Apr,Jul,Okt) um 0 Uhr ausführen
        schedule("0 0 1 1 *", function() {
            fZaehlerstandReset('Quartal');
        });
        schedule("0 0 1 4 *", function() {
            fZaehlerstandReset('Quartal');
        });
        schedule("0 0 1 7 *", function() {
            fZaehlerstandReset('Quartal');
        });
        schedule("0 0 1 10 *", function() {
            fZaehlerstandReset('Quartal');
        });
        // Neujahr um 0 Uhr ausführen
        schedule("0 0 1 1 *", function() {
            fZaehlerstandReset('Jahr');
        });
        
        G Offline
        G Offline
        GeorgS
        schrieb am zuletzt editiert von
        #4

        @h1ob Ich habe jetzt dein Skript übernommen und meine Datenpunkte einmgepflegt...

        Leider bringt mir das Skript unmassen an Fehlermeldungen :( Die Datenpunkte habe ich alle als Strings angelegt hoffe das ist richtig?

        grüße
        Georg

        Intel NUC, MaxCul, Xiaomi Vacuum Cleaner, Philips Hue, Zigbee, FritzDECT,Shelly

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          GeorgS
          schrieb am zuletzt editiert von
          #5

          Das sagt mir ioBroker wenn MQTT Daten abholt :/

          javascript.0	2019-04-14 19:26:54.385	warn	at TCP.onread (net.js:601:20)
          javascript.0	2019-04-14 19:26:54.385	warn	at Socket.Readable.push (_stream_readable.js:208:10)
          javascript.0	2019-04-14 19:26:54.385	warn	at readableAddChunk (_stream_readable.js:250:11)
          javascript.0	2019-04-14 19:26:54.385	warn	at addChunk (_stream_readable.js:263:12)
          javascript.0	2019-04-14 19:26:54.385	warn	at Socket.emit (events.js:211:7)
          javascript.0	2019-04-14 19:26:54.385	warn	at emitOne (events.js:116:13)
          javascript.0	2019-04-14 19:26:54.385	warn	at Socket.realHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:825:20)
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:103:24)
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.expectHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:499:31)
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.finish (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:541:12)
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.flush (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:347:3)
          javascript.0	2019-04-14 19:26:54.385	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:508:14
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.applyExtensions (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:371:5)
          javascript.0	2019-04-14 19:26:54.385	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:536:18
          javascript.0	2019-04-14 19:26:54.385	warn	at Receiver.ontext (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:841:10)
          javascript.0	2019-04-14 19:26:54.385	warn	at WebSocket.emit (events.js:214:7)
          javascript.0	2019-04-14 19:26:54.384	warn	at emitTwo (events.js:126:13)
          javascript.0	2019-04-14 19:26:54.384	warn	at WebSocket.onMessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:442:14)
          javascript.0	2019-04-14 19:26:54.384	warn	at WebSocket.ws.onmessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js:146:10)
          javascript.0	2019-04-14 19:26:54.384	warn	at WS.Transport.onData (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:137:8)
          javascript.0	2019-04-14 19:26:54.384	warn	at WS.Transport.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:145:8)
          javascript.0	2019-04-14 19:26:54.384	warn	at WS.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.384	warn	at WS.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:268:10)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:451:14)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.384	warn	at Manager.ondata (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:322:16)
          javascript.0	2019-04-14 19:26:54.384	warn	at Decoder.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:246:12)
          javascript.0	2019-04-14 19:26:54.384	warn	at Decoder.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
          javascript.0	2019-04-14 19:26:54.384	warn	at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.384	warn	at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8)
          javascript.0	2019-04-14 19:26:54.384	warn	at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.384	warn	at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.384	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
          javascript.0	2019-04-14 19:26:54.384	warn	at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3705:37)
          javascript.0	2019-04-14 19:26:54.384	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25)
          javascript.0	2019-04-14 19:26:54.383	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38)
          javascript.0	2019-04-14 19:26:54.383	warn	at Object.<anonymous> (script.js.common.Wohnung.WarmwasserHeizung.Gaszaehler:149:5)
          javascript.0	2019-04-14 19:26:54.383	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
          javascript.0	2019-04-14 19:26:54.383	warn	Wrong type of javascript.0.Allgemein.Gas.gesammt: "number". Please fix, while deprecated and will not work in next versions.
          javascript.0	2019-04-14 19:26:54.383	warn	at TCP.onread (net.js:601:20)
          javascript.0	2019-04-14 19:26:54.383	warn	at Socket.Readable.push (_stream_readable.js:208:10)
          javascript.0	2019-04-14 19:26:54.383	warn	at readableAddChunk (_stream_readable.js:250:11)
          javascript.0	2019-04-14 19:26:54.383	warn	at addChunk (_stream_readable.js:263:12)
          javascript.0	2019-04-14 19:26:54.383	warn	at Socket.emit (events.js:211:7)
          javascript.0	2019-04-14 19:26:54.383	warn	at emitOne (events.js:116:13)
          javascript.0	2019-04-14 19:26:54.383	warn	at Socket.realHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:825:20)
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:103:24)
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.expectHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:499:31)
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.finish (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:541:12)
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.flush (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:347:3)
          javascript.0	2019-04-14 19:26:54.383	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:508:14
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.applyExtensions (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:371:5)
          javascript.0	2019-04-14 19:26:54.383	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:536:18
          javascript.0	2019-04-14 19:26:54.383	warn	at Receiver.ontext (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:841:10)
          javascript.0	2019-04-14 19:26:54.383	warn	at WebSocket.emit (events.js:214:7)
          javascript.0	2019-04-14 19:26:54.383	warn	at emitTwo (events.js:126:13)
          javascript.0	2019-04-14 19:26:54.383	warn	at WebSocket.onMessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:442:14)
          javascript.0	2019-04-14 19:26:54.383	warn	at WebSocket.ws.onmessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js:146:10)
          javascript.0	2019-04-14 19:26:54.383	warn	at WS.Transport.onData (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:137:8)
          javascript.0	2019-04-14 19:26:54.383	warn	at WS.Transport.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:145:8)
          javascript.0	2019-04-14 19:26:54.382	warn	at WS.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at WS.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:268:10)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:451:14)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.382	warn	at Manager.ondata (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:322:16)
          javascript.0	2019-04-14 19:26:54.382	warn	at Decoder.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:246:12)
          javascript.0	2019-04-14 19:26:54.382	warn	at Decoder.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.382	warn	at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8)
          javascript.0	2019-04-14 19:26:54.382	warn	at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
          javascript.0	2019-04-14 19:26:54.382	warn	at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3705:37)
          javascript.0	2019-04-14 19:26:54.382	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25)
          javascript.0	2019-04-14 19:26:54.382	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38)
          javascript.0	2019-04-14 19:26:54.382	warn	at Object.<anonymous> (script.js.common.Wohnung.WarmwasserHeizung.Gaszaehler:141:5)
          javascript.0	2019-04-14 19:26:54.382	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
          javascript.0	2019-04-14 19:26:54.382	warn	Wrong type of javascript.0.Allgemein.Gas.aktuellerstand: "string". Please fix, while deprecated and will not work in next versions.
          javascript.0	2019-04-14 19:26:54.382	warn	at TCP.onread (net.js:601:20)
          javascript.0	2019-04-14 19:26:54.382	warn	at Socket.Readable.push (_stream_readable.js:208:10)
          javascript.0	2019-04-14 19:26:54.381	warn	at readableAddChunk (_stream_readable.js:250:11)
          javascript.0	2019-04-14 19:26:54.381	warn	at addChunk (_stream_readable.js:263:12)
          javascript.0	2019-04-14 19:26:54.381	warn	at Socket.emit (events.js:211:7)
          javascript.0	2019-04-14 19:26:54.381	warn	at emitOne (events.js:116:13)
          javascript.0	2019-04-14 19:26:54.381	warn	at Socket.realHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:825:20)
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:103:24)
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.expectHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:499:31)
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.finish (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:541:12)
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.flush (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:347:3)
          javascript.0	2019-04-14 19:26:54.381	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:508:14
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.applyExtensions (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:371:5)
          javascript.0	2019-04-14 19:26:54.381	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:536:18
          javascript.0	2019-04-14 19:26:54.381	warn	at Receiver.ontext (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:841:10)
          javascript.0	2019-04-14 19:26:54.381	warn	at WebSocket.emit (events.js:214:7)
          javascript.0	2019-04-14 19:26:54.381	warn	at emitTwo (events.js:126:13)
          javascript.0	2019-04-14 19:26:54.381	warn	at WebSocket.onMessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:442:14)
          javascript.0	2019-04-14 19:26:54.378	warn	at WebSocket.ws.onmessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js:146:10)
          javascript.0	2019-04-14 19:26:54.378	warn	at WS.Transport.onData (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:137:8)
          javascript.0	2019-04-14 19:26:54.378	warn	at WS.Transport.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:145:8)
          javascript.0	2019-04-14 19:26:54.378	warn	at WS.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.378	warn	at WS.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:268:10)
          javascript.0	2019-04-14 19:26:54.378	warn	at Socket.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:451:14)
          javascript.0	2019-04-14 19:26:54.378	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.378	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.378	warn	at Manager.ondata (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:322:16)
          javascript.0	2019-04-14 19:26:54.378	warn	at Decoder.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:246:12)
          javascript.0	2019-04-14 19:26:54.378	warn	at Decoder.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
          javascript.0	2019-04-14 19:26:54.378	warn	at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.378	warn	at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8)
          javascript.0	2019-04-14 19:26:54.378	warn	at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.378	warn	at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.378	warn	at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12)
          javascript.0	2019-04-14 19:26:54.378	warn	at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10)
          javascript.0	2019-04-14 19:26:54.377	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.377	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
          javascript.0	2019-04-14 19:26:54.377	warn	at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3705:37)
          javascript.0	2019-04-14 19:26:54.377	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25)
          javascript.0	2019-04-14 19:26:54.377	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38)
          javascript.0	2019-04-14 19:26:54.377	warn	at Object.<anonymous> (script.js.common.Wohnung.WarmwasserHeizung.Gaszaehler:111:5)
          javascript.0	2019-04-14 19:26:54.377	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
          javascript.0	2019-04-14 19:26:54.377	warn	Wrong type of javascript.0.Allgemein.Gas.arbeitsvariable: "number". Please fix, while deprecated and will not work in next versions.
          javascript.0	2019-04-14 19:26:54.377	warn	at TCP.onread (net.js:601:20)
          javascript.0	2019-04-14 19:26:54.377	warn	at Socket.Readable.push (_stream_readable.js:208:10)
          javascript.0	2019-04-14 19:26:54.377	warn	at readableAddChunk (_stream_readable.js:250:11)
          javascript.0	2019-04-14 19:26:54.377	warn	at addChunk (_stream_readable.js:263:12)
          javascript.0	2019-04-14 19:26:54.377	warn	at Socket.emit (events.js:211:7)
          javascript.0	2019-04-14 19:26:54.377	warn	at emitOne (events.js:116:13)
          javascript.0	2019-04-14 19:26:54.377	warn	at Socket.realHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:825:20)
          javascript.0	2019-04-14 19:26:54.377	warn	at Receiver.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:103:24)
          javascript.0	2019-04-14 19:26:54.377	warn	at Receiver.expectHandler (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:499:31)
          javascript.0	2019-04-14 19:26:54.377	warn	at Receiver.finish (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:541:12)
          javascript.0	2019-04-14 19:26:54.377	warn	at Receiver.flush (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:347:3)
          javascript.0	2019-04-14 19:26:54.377	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:508:14
          javascript.0	2019-04-14 19:26:54.377	warn	at Receiver.applyExtensions (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:371:5)
          javascript.0	2019-04-14 19:26:54.376	warn	at /opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/Receiver.js:536:18
          javascript.0	2019-04-14 19:26:54.376	warn	at Receiver.ontext (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:841:10)
          javascript.0	2019-04-14 19:26:54.376	warn	at WebSocket.emit (events.js:214:7)
          javascript.0	2019-04-14 19:26:54.376	warn	at emitTwo (events.js:126:13)
          javascript.0	2019-04-14 19:26:54.376	warn	at WebSocket.onMessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/ws/lib/WebSocket.js:442:14)
          javascript.0	2019-04-14 19:26:54.376	warn	at WebSocket.ws.onmessage (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js:146:10)
          javascript.0	2019-04-14 19:26:54.376	warn	at WS.Transport.onData (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:137:8)
          javascript.0	2019-04-14 19:26:54.376	warn	at WS.Transport.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js:145:8)
          javascript.0	2019-04-14 19:26:54.376	warn	at WS.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.376	warn	at WS.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:268:10)
          javascript.0	2019-04-14 19:26:54.376	warn	at Socket.onPacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js:451:14)
          javascript.0	2019-04-14 19:26:54.376	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.376	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.376	warn	at Manager.ondata (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:322:16)
          javascript.0	2019-04-14 19:26:54.376	warn	at Decoder.add (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/index.js:246:12)
          javascript.0	2019-04-14 19:26:54.376	warn	at Decoder.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/component-emitter/index.js:134:20)
          javascript.0	2019-04-14 19:26:54.376	warn	at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.376	warn	at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8)
          javascript.0	2019-04-14 19:26:54.376	warn	at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.376	warn	at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
          javascript.0	2019-04-14 19:26:54.376	warn	at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12)
          javascript.0	2019-04-14 19:26:54.375	warn	at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10)
          javascript.0	2019-04-14 19:26:54.375	warn	at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20)
          javascript.0	2019-04-14 19:26:54.375	warn	at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30)
          javascript.0	2019-04-14 19:26:54.375	warn	at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3705:37)
          javascript.0	2019-04-14 19:26:54.375	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25)
          javascript.0	2019-04-14 19:26:54.375	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38)
          javascript.0	2019-04-14 19:26:54.375	warn	at Object.<anonymous> (script.js.common.Wohnung.WarmwasserHeizung.Gaszaehler:99:9)
          javascript.0	2019-04-14 19:26:54.375	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20)
          javascript.0	2019-04-14 19:26:54.375	warn	Wrong type of javascript.0.Allgemein.Gas.gesammt: "number". Please fix, while deprecated and will not work in next versions.
          

          grüße
          Georg

          Intel NUC, MaxCul, Xiaomi Vacuum Cleaner, Philips Hue, Zigbee, FritzDECT,Shelly

          1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            GeorgS
            schrieb am zuletzt editiert von GeorgS
            #6

            Da ich das Javascript so nicht hin bekomme habe, habe ich @h1ob sein Script in Blockly umgeschrieben.

            Jetzt funktioniert das ganze =) Ich werde das Blockly Sckript noch ein wenig verschönen und dann hier Posten...

            EDIT: Ich habe meinen ersten Post Bearbeitet das man nicht hier rumsuchen muss um an das Skript und die Einstellungen des ESP zu kommen!

            grüße
            Georg

            Intel NUC, MaxCul, Xiaomi Vacuum Cleaner, Philips Hue, Zigbee, FritzDECT,Shelly

            1 Antwort Letzte Antwort
            0
            • G Offline
              G Offline
              GeorgS
              schrieb am zuletzt editiert von GeorgS
              #7

              und hier nun das fertige Skript, wenn ihr verbesserungsvorschläge habt gerne her damit :)

              GaszählerESP.txt

              Danke für die Hilfe aus der FB Gruppe =)

              grüße
              Georg

              Intel NUC, MaxCul, Xiaomi Vacuum Cleaner, Philips Hue, Zigbee, FritzDECT,Shelly

              oberfraggerO B 3 Antworten Letzte Antwort
              0
              • G GeorgS

                und hier nun das fertige Skript, wenn ihr verbesserungsvorschläge habt gerne her damit :)

                GaszählerESP.txt

                Danke für die Hilfe aus der FB Gruppe =)

                oberfraggerO Offline
                oberfraggerO Offline
                oberfragger
                schrieb am zuletzt editiert von oberfragger
                #8

                Hi in die Runde,

                ich habe mir auch den IN-Z62 geholt und würde nun gerne meinen Honeywell BK-G2 auslesen.

                Leider werde ich aus dem Schaltbild nicht ganz schlau... und denke mir- irgenwie kann ich das doch vielleicht via USB direkt an meinen Raspberry4 anschließen. Der ist direkt in der Nähe des Gaszählers.

                Auf dem läuft der ioBroker mit diversen Instanzen und auch beispielsweise auch Smartmeter um meinen Stromzähler abzufragen. Das war sehr schön via plug&play.

                Ich habe auf dem Raspi4 ein PoE-Hat und bin mir unsicher ob ich etwas an den GPIOs machen kann. Der Kollege hier hat das via Python-Script und GPIO gemacht. http://blog.bubux.de/gaszaehler-auslesen/

                Habt Ihr einfache Ideen oder soll ich lieber bei der vorgeschlagenen Schaltung mittels ESP bleiben? Da ist mir nämlich noch unklar... wo kommt da der Strom her? Außerdem warum muss da ein Widerstand ran... und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                Könnt Ihr mir bitte einen netten Anstoß geben...

                Danke im Voraus.

                SBorgS 2 Antworten Letzte Antwort
                0
                • oberfraggerO oberfragger

                  Hi in die Runde,

                  ich habe mir auch den IN-Z62 geholt und würde nun gerne meinen Honeywell BK-G2 auslesen.

                  Leider werde ich aus dem Schaltbild nicht ganz schlau... und denke mir- irgenwie kann ich das doch vielleicht via USB direkt an meinen Raspberry4 anschließen. Der ist direkt in der Nähe des Gaszählers.

                  Auf dem läuft der ioBroker mit diversen Instanzen und auch beispielsweise auch Smartmeter um meinen Stromzähler abzufragen. Das war sehr schön via plug&play.

                  Ich habe auf dem Raspi4 ein PoE-Hat und bin mir unsicher ob ich etwas an den GPIOs machen kann. Der Kollege hier hat das via Python-Script und GPIO gemacht. http://blog.bubux.de/gaszaehler-auslesen/

                  Habt Ihr einfache Ideen oder soll ich lieber bei der vorgeschlagenen Schaltung mittels ESP bleiben? Da ist mir nämlich noch unklar... wo kommt da der Strom her? Außerdem warum muss da ein Widerstand ran... und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                  Könnt Ihr mir bitte einen netten Anstoß geben...

                  Danke im Voraus.

                  SBorgS Offline
                  SBorgS Offline
                  SBorg
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von SBorg
                  #9

                  @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                  irgenwie kann ich das doch vielleicht via USB direkt an meinen Raspberry4 anschließen.

                  "Irgendwie" schon, aber kompliziert und aufwändig...

                  @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                  ob ich etwas an den GPIOs machen kann.

                  Wenn noch ein GPIO frei ist wäre das die erste Wahl.

                  @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                  Da ist mir nämlich noch unklar... wo kommt da der Strom her? Außerdem warum muss da ein Widerstand ran... und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                  Der kommt von "Links", z.B. von einem USB-5V-Steckernetzteil. Da der ESP nur mit 3.3V arbeitet hängt dann noch ein sog. Stepdown-Regler (5V --> 3.3V) davor. Du brauchst eigentlich nur den Widerstand. Der kommt an VCC vom PI und an die Leitung vom Sensor. Dies ist ein PullUp-Widerstand. Der sorgt dafür, dass die Impulse aus dem Sensor "eindeutig" sind (0 oder 1). Sollte mal der Wert gerade so an der Schwelle sein, weiß die Elektronik sonst nicht genau "ist das nu ein Impuls oder nicht?"

                  Damit hast du ein auswertbares Signal an GPIOxx. Jetzt kommt es nur noch darauf an, wie du das in den Broker bringen willst. Python. bash, SimpleAPI, MQTT...
                  Da wäre dann der Weg mittels eines ESPs einfacher ;)

                  LG SBorg ( SBorg auf GitHub)
                  Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                  1 Antwort Letzte Antwort
                  0
                  • oberfraggerO Offline
                    oberfraggerO Offline
                    oberfragger
                    schrieb am zuletzt editiert von
                    #10

                    @SBorg said in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                    Wenn noch ein GPIO frei ist wäre das die erste Wahl.

                    Ich habe mich mal etwas belesen- ja man kann die GPIOs wohl trotz PoE Hat benutzen.

                    Aufgrund Deiner Rückmeldung & letztem Satz lesen ich raus, dass ich den Aufwand mit GPIO lassen soll und einfach ein rumliegendes USB-Netzteil (5V, 0,5 A) und das Zubehör für wenig Geld bestellen soll und dann dann via Wlan mache...

                    Also so wie die Anleitung von dem Frank im 1. Post?
                    Und wenn ich einen WemosD1 oder NodeMCU dazwischenklemme, "spare" ich mir den Spannungswandler. Bei einem NodeMCu hätte ich den Vorteil, dass ich das Micro-USB Kabel da direkt anschliessen kann? Nicht über meine Fragen wudnern, habe bisher noch nicht mit einem ESP826 rumgewerkelt.

                    In seiner Lösung setzt der Frank ja auf FHEM. Komme ich erst einmal ohne zurecht? Hatte das schon mal für andere Zwecke eingesetzt, wenn es geht würde ich die Werte aber lieber direkt in den ioBroker oder die DB bekommen.

                    Sorry...ich bin noch ganz am Anfang... und Danke im Voraus.

                    1 Antwort Letzte Antwort
                    0
                    • oberfraggerO oberfragger

                      Hi in die Runde,

                      ich habe mir auch den IN-Z62 geholt und würde nun gerne meinen Honeywell BK-G2 auslesen.

                      Leider werde ich aus dem Schaltbild nicht ganz schlau... und denke mir- irgenwie kann ich das doch vielleicht via USB direkt an meinen Raspberry4 anschließen. Der ist direkt in der Nähe des Gaszählers.

                      Auf dem läuft der ioBroker mit diversen Instanzen und auch beispielsweise auch Smartmeter um meinen Stromzähler abzufragen. Das war sehr schön via plug&play.

                      Ich habe auf dem Raspi4 ein PoE-Hat und bin mir unsicher ob ich etwas an den GPIOs machen kann. Der Kollege hier hat das via Python-Script und GPIO gemacht. http://blog.bubux.de/gaszaehler-auslesen/

                      Habt Ihr einfache Ideen oder soll ich lieber bei der vorgeschlagenen Schaltung mittels ESP bleiben? Da ist mir nämlich noch unklar... wo kommt da der Strom her? Außerdem warum muss da ein Widerstand ran... und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                      Könnt Ihr mir bitte einen netten Anstoß geben...

                      Danke im Voraus.

                      SBorgS Offline
                      SBorgS Offline
                      SBorg
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von SBorg
                      #11

                      Habe ich noch vergessen:
                      @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                      und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                      Ja, ein 330 Ohm Vorwiderstand an einen freien GPIO und dann die LED gegen GND da dran, dann kannst du die auch bspw. blinken lassen bei einem Impuls.
                      Zuerst: vergiss mal FHEM, brauchst du nicht. Du kannst zwei Wege gehen.

                      1. Weg: mit dem PI. Da benötigst du außer dem Sensor, der LED und zwei Widerständen nichts weiter
                      2. Weg: mittels ESP (egal ob Wemos, NodeMCU etc.). Auch hier Sensor, LED und zwei Widerstände

                      Für beides natürlich eine geeignete 5V Spannungsversorgung (Wemos & Co. können mit 5V betrieben werden).
                      Mit beiden Wegen hast du nun aber das Problem, dass du zwar die Impulse vom Zähler bekommst und die LED theoretisch schalten kannst, aber du brauchst noch Software für die Verbindung zum ioB.
                      Für Weg #1 musst du nun programmieren/dir was passendes suchen. ZB. pigpio (https://www.elektronik-kompendium.de/sites/raspberry-pi/2202121.htm), dann die passenden Befehle in ein Bash-Script und mittels SimpleAPI an den ioB schicken. Oder ein Python-Script, oder...
                      Weg #2 ist da etwas einfacher, denn du flashst auf den Wemos oä. ESPEasy, ESPurna, Tasmota... drauf und musst nur noch die Einstellungen vornehmen wie bspw. im FHEM-Beispel von oben (bei ESPEasy) nur das dann hier der MQTT vom ioB eingetragen wird. Schon hast du die Zählimpulse im Broker und kannst sie auswerten. Noch eine "rule" definiert, wenn GPIOxx low (=Zählimpuls) dann GPIOyy high für 500ms, schon blinkt auch die LED bei einem Zählimpuls.

                      @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                      Bei einem NodeMCu hätte ich den Vorteil, dass ich das Micro-USB Kabel da direkt anschliessen kann?

                      Jein, zumindest anders als du es möchtest (du denkst wahrscheinlich als Verbindung zum PI?). Über den µ-USB kannst du Wemos & Co. nur mit Spannung versorgen, programmieren und per Terminal auf dem Rechner Daten auslesen. Man kann es auch so programmieren, dass man die Daten dann bspw. am PI abgreift, aber das ist schon nicht mehr so einfach. Da die Teile aber WLAN haben, kann ich die Daten auch direkt zum ioB funken.

                      Und nix "sorry", jeder hat mal angefangen und musste Fragen stellen :)

                      LG SBorg ( SBorg auf GitHub)
                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                      oberfraggerO 2 Antworten Letzte Antwort
                      0
                      • SBorgS SBorg

                        Habe ich noch vergessen:
                        @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                        und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                        Ja, ein 330 Ohm Vorwiderstand an einen freien GPIO und dann die LED gegen GND da dran, dann kannst du die auch bspw. blinken lassen bei einem Impuls.
                        Zuerst: vergiss mal FHEM, brauchst du nicht. Du kannst zwei Wege gehen.

                        1. Weg: mit dem PI. Da benötigst du außer dem Sensor, der LED und zwei Widerständen nichts weiter
                        2. Weg: mittels ESP (egal ob Wemos, NodeMCU etc.). Auch hier Sensor, LED und zwei Widerstände

                        Für beides natürlich eine geeignete 5V Spannungsversorgung (Wemos & Co. können mit 5V betrieben werden).
                        Mit beiden Wegen hast du nun aber das Problem, dass du zwar die Impulse vom Zähler bekommst und die LED theoretisch schalten kannst, aber du brauchst noch Software für die Verbindung zum ioB.
                        Für Weg #1 musst du nun programmieren/dir was passendes suchen. ZB. pigpio (https://www.elektronik-kompendium.de/sites/raspberry-pi/2202121.htm), dann die passenden Befehle in ein Bash-Script und mittels SimpleAPI an den ioB schicken. Oder ein Python-Script, oder...
                        Weg #2 ist da etwas einfacher, denn du flashst auf den Wemos oä. ESPEasy, ESPurna, Tasmota... drauf und musst nur noch die Einstellungen vornehmen wie bspw. im FHEM-Beispel von oben (bei ESPEasy) nur das dann hier der MQTT vom ioB eingetragen wird. Schon hast du die Zählimpulse im Broker und kannst sie auswerten. Noch eine "rule" definiert, wenn GPIOxx low (=Zählimpuls) dann GPIOyy high für 500ms, schon blinkt auch die LED bei einem Zählimpuls.

                        @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                        Bei einem NodeMCu hätte ich den Vorteil, dass ich das Micro-USB Kabel da direkt anschliessen kann?

                        Jein, zumindest anders als du es möchtest (du denkst wahrscheinlich als Verbindung zum PI?). Über den µ-USB kannst du Wemos & Co. nur mit Spannung versorgen, programmieren und per Terminal auf dem Rechner Daten auslesen. Man kann es auch so programmieren, dass man die Daten dann bspw. am PI abgreift, aber das ist schon nicht mehr so einfach. Da die Teile aber WLAN haben, kann ich die Daten auch direkt zum ioB funken.

                        Und nix "sorry", jeder hat mal angefangen und musste Fragen stellen :)

                        oberfraggerO Offline
                        oberfraggerO Offline
                        oberfragger
                        schrieb am zuletzt editiert von
                        #12

                        @SBorg Danke für die ausführliche Antwort.

                        Ich werde mich wohl erstmal um die Variante mit dem NodeMCU kümmern & bestellen.

                        Woran ich nicht gedacht habe... einfach mal den Raspi zur Spannungsversorgung hijacken! Wie ich meine Daten bekomme (WLAN vs. USB) ist mir vorerst nicht so wichtig. Wichtig ist erst einmal, dass es grundsätzlich läuft.

                        Ich werde berichten....jetzt erstmal den NodeMCU bestellen und dann weiter sehen. Wenn es erfolgreich war, poste ich mal hier eine Step-by-step Anleitung for Beginners ;)

                        1 Antwort Letzte Antwort
                        0
                        • G GeorgS

                          und hier nun das fertige Skript, wenn ihr verbesserungsvorschläge habt gerne her damit :)

                          GaszählerESP.txt

                          Danke für die Hilfe aus der FB Gruppe =)

                          B Offline
                          B Offline
                          bumbumb
                          schrieb am zuletzt editiert von
                          #13

                          @GeorgS Hallo die werte über mqtt kommen fehlerfrei an, aber was muss ich mit deinem Script machen wo und wie muss ich welche Werte setzen, bei mir passiert leider nichts. Kannst du mir helfen.
                          Danke

                          oberfraggerO 1 Antwort Letzte Antwort
                          0
                          • B bumbumb

                            @GeorgS Hallo die werte über mqtt kommen fehlerfrei an, aber was muss ich mit deinem Script machen wo und wie muss ich welche Werte setzen, bei mir passiert leider nichts. Kannst du mir helfen.
                            Danke

                            oberfraggerO Offline
                            oberfraggerO Offline
                            oberfragger
                            schrieb am zuletzt editiert von
                            #14

                            @bumbumb Wie hast du das umgesetzt. genau wie in der Schalte? Wieviel Widerstände (und welche?) hast Du verbaut. Bin da gerade etwas lost. In der Schalte sehe ich nur 1nen 10k Widerstand.

                            oberfraggerO 1 Antwort Letzte Antwort
                            0
                            • oberfraggerO oberfragger

                              @bumbumb Wie hast du das umgesetzt. genau wie in der Schalte? Wieviel Widerstände (und welche?) hast Du verbaut. Bin da gerade etwas lost. In der Schalte sehe ich nur 1nen 10k Widerstand.

                              oberfraggerO Offline
                              oberfraggerO Offline
                              oberfragger
                              schrieb am zuletzt editiert von oberfragger
                              #15

                              So mal in die Runde.

                              Ich habe den NodeMCU mit ESPEasy geflasht. Spannungsversorgung via USB. Danach entsprechend dem Blogeintrag eingerichtet. Den Reedkontakt einfach mal an GPIO-14 (4 war im Pulse Counter nicht möglich).

                              Jetzt explodiert mir die Zeit...!?! Ideen?

                              74462b78-99de-4326-a904-15dab8582319-image.png

                              Wie mache ich nun weiter. Muss ich ein Script bauen, welches die Absoluten Werte dann aufsummiert...?

                              Sehr ich das richtig, dass die Werte alle 5 Minuten (Delay) übertragen werden? Die Zeit-Werte sind wirklich seltsam...

                              Soweit ich das sehe, ist der Absolut-Wert der "Zählerstand" und der Delta-Wert der Unterschied zur letzten Übertragung?

                              1 Antwort Letzte Antwort
                              0
                              • SBorgS SBorg

                                Habe ich noch vergessen:
                                @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                                und kann ich da auch noch ne LED "zur Bestätigung" bei Impuls einbauen.

                                Ja, ein 330 Ohm Vorwiderstand an einen freien GPIO und dann die LED gegen GND da dran, dann kannst du die auch bspw. blinken lassen bei einem Impuls.
                                Zuerst: vergiss mal FHEM, brauchst du nicht. Du kannst zwei Wege gehen.

                                1. Weg: mit dem PI. Da benötigst du außer dem Sensor, der LED und zwei Widerständen nichts weiter
                                2. Weg: mittels ESP (egal ob Wemos, NodeMCU etc.). Auch hier Sensor, LED und zwei Widerstände

                                Für beides natürlich eine geeignete 5V Spannungsversorgung (Wemos & Co. können mit 5V betrieben werden).
                                Mit beiden Wegen hast du nun aber das Problem, dass du zwar die Impulse vom Zähler bekommst und die LED theoretisch schalten kannst, aber du brauchst noch Software für die Verbindung zum ioB.
                                Für Weg #1 musst du nun programmieren/dir was passendes suchen. ZB. pigpio (https://www.elektronik-kompendium.de/sites/raspberry-pi/2202121.htm), dann die passenden Befehle in ein Bash-Script und mittels SimpleAPI an den ioB schicken. Oder ein Python-Script, oder...
                                Weg #2 ist da etwas einfacher, denn du flashst auf den Wemos oä. ESPEasy, ESPurna, Tasmota... drauf und musst nur noch die Einstellungen vornehmen wie bspw. im FHEM-Beispel von oben (bei ESPEasy) nur das dann hier der MQTT vom ioB eingetragen wird. Schon hast du die Zählimpulse im Broker und kannst sie auswerten. Noch eine "rule" definiert, wenn GPIOxx low (=Zählimpuls) dann GPIOyy high für 500ms, schon blinkt auch die LED bei einem Zählimpuls.

                                @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                                Bei einem NodeMCu hätte ich den Vorteil, dass ich das Micro-USB Kabel da direkt anschliessen kann?

                                Jein, zumindest anders als du es möchtest (du denkst wahrscheinlich als Verbindung zum PI?). Über den µ-USB kannst du Wemos & Co. nur mit Spannung versorgen, programmieren und per Terminal auf dem Rechner Daten auslesen. Man kann es auch so programmieren, dass man die Daten dann bspw. am PI abgreift, aber das ist schon nicht mehr so einfach. Da die Teile aber WLAN haben, kann ich die Daten auch direkt zum ioB funken.

                                Und nix "sorry", jeder hat mal angefangen und musste Fragen stellen :)

                                oberfraggerO Offline
                                oberfraggerO Offline
                                oberfragger
                                schrieb am zuletzt editiert von
                                #16

                                @SBorg Vielen Dank für Deine Unterstützung.

                                Habe nun ermittelt, wofür ich die beiden Widerstände benötige. Einen 10KOhm-Widerstand ans VCC zusammen mit dem entsprechenden GPIO udn den anderen 1KOh-Widerstand zsuammen mit einer LED.

                                Naja- das mitd em blinken beim Puls habe ich mit ESpEasy noch nicht rausbekommen. Mal weitersuchen.

                                SBorgS 1 Antwort Letzte Antwort
                                0
                                • oberfraggerO oberfragger

                                  @SBorg Vielen Dank für Deine Unterstützung.

                                  Habe nun ermittelt, wofür ich die beiden Widerstände benötige. Einen 10KOhm-Widerstand ans VCC zusammen mit dem entsprechenden GPIO udn den anderen 1KOh-Widerstand zsuammen mit einer LED.

                                  Naja- das mitd em blinken beim Puls habe ich mit ESpEasy noch nicht rausbekommen. Mal weitersuchen.

                                  SBorgS Offline
                                  SBorgS Offline
                                  SBorg
                                  Forum Testing Most Active
                                  schrieb am zuletzt editiert von
                                  #17

                                  @oberfragger Da ich aktuell kein ESPEasy nutze kann ich da auch nicht richtig hilfreich sein, aber schau dir mal die "rules" an.
                                  Die Syntax ist in etwa Trigger --> tue etwas
                                  Hier wird GPIO 14 überwacht und GPIO 2 (z.B. angeschlossene LED) auf High/Low geschaltet:

                                  on System#Boot do
                                   Monitor GPIO,14
                                  endon
                                  
                                   on GPIO#14=1 do
                                    GPIO,2,1
                                   endon
                                  
                                   on GPIO#14=0 do
                                    GPIO,2,0
                                   endon
                                  

                                  LG SBorg ( SBorg auf GitHub)
                                  Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                  oberfraggerO 2 Antworten Letzte Antwort
                                  0
                                  • SBorgS SBorg

                                    @oberfragger Da ich aktuell kein ESPEasy nutze kann ich da auch nicht richtig hilfreich sein, aber schau dir mal die "rules" an.
                                    Die Syntax ist in etwa Trigger --> tue etwas
                                    Hier wird GPIO 14 überwacht und GPIO 2 (z.B. angeschlossene LED) auf High/Low geschaltet:

                                    on System#Boot do
                                     Monitor GPIO,14
                                    endon
                                    
                                     on GPIO#14=1 do
                                      GPIO,2,1
                                     endon
                                    
                                     on GPIO#14=0 do
                                      GPIO,2,0
                                     endon
                                    
                                    oberfraggerO Offline
                                    oberfraggerO Offline
                                    oberfragger
                                    schrieb am zuletzt editiert von
                                    #18

                                    @SBorg Also Du hast "irgendeinen Arduino-Kram" direkt drauf?
                                    Dann via Funk/ MQTT an den IO-Broker?

                                    SBorgS 1 Antwort Letzte Antwort
                                    0
                                    • oberfraggerO oberfragger

                                      @SBorg Also Du hast "irgendeinen Arduino-Kram" direkt drauf?
                                      Dann via Funk/ MQTT an den IO-Broker?

                                      SBorgS Offline
                                      SBorgS Offline
                                      SBorg
                                      Forum Testing Most Active
                                      schrieb am zuletzt editiert von
                                      #19

                                      @oberfragger Jepp, entweder Tasmota (sonoff), direkt shelly oder eigener Sketch und dann alles per MQTT an den ioB.

                                      LG SBorg ( SBorg auf GitHub)
                                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                      oberfraggerO 1 Antwort Letzte Antwort
                                      1
                                      • SBorgS SBorg

                                        @oberfragger Jepp, entweder Tasmota (sonoff), direkt shelly oder eigener Sketch und dann alles per MQTT an den ioB.

                                        oberfraggerO Offline
                                        oberfraggerO Offline
                                        oberfragger
                                        schrieb am zuletzt editiert von
                                        #20

                                        @SBorg Aha. Mit Tasmota. Werde den zweiten NodeMCU mal umflashen, da ich eh Tasmota auf den Sonoffs drauf habe. Habe aber gerade gesehen- in EspEasy gibts eine Rules Section... Gleiche Syntax! Sollte dann vermutlich gleich sein. Da teste ich mal. So langsam wird das was.

                                        Nutzt hier jemand die Spiffs zum Zwischenspeichern des Zählerstandes...?

                                        SBorgS 1 Antwort Letzte Antwort
                                        0
                                        • oberfraggerO oberfragger

                                          @SBorg Aha. Mit Tasmota. Werde den zweiten NodeMCU mal umflashen, da ich eh Tasmota auf den Sonoffs drauf habe. Habe aber gerade gesehen- in EspEasy gibts eine Rules Section... Gleiche Syntax! Sollte dann vermutlich gleich sein. Da teste ich mal. So langsam wird das was.

                                          Nutzt hier jemand die Spiffs zum Zwischenspeichern des Zählerstandes...?

                                          SBorgS Offline
                                          SBorgS Offline
                                          SBorg
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von SBorg
                                          #21

                                          @oberfragger sagte in Gaszähler mit ESPEasy und Honeywell IN-Z65:

                                          Nutzt hier jemand die Spiffs zum Zwischenspeichern des Zählerstandes...?

                                          Würde ich nicht unbedingt empfehlen. Spiffs ist nur ein Teil des normalen Flashspeichers und der hat nur eine sehr begrenzte Lebenszeit was Schreibzyklen betrifft. Da du jeden Impuls sowieso an den ioB schickst, würde ich den Zählerstand auch dort erfassen/speichern. Du wirst ja wohl kaum eine (VIS-)Anzeige haben/möchten ala 14526 Impulse, sondern eher Gesamt 4345,533 m³, Verbrauch heute, gestern, Woche, Monat, Jahr...

                                          LG SBorg ( SBorg auf GitHub)
                                          Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                                          1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          344

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe