Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Gaszähler auswerten - Problem

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Gaszähler auswerten - Problem

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      DasMoritz last edited by

      Hallo zusammen,

      ich werte meinen Gaszähler mit einem WEMOS D1 und einem Reed-Kontakt aus.
      Vorgegangen bin ich dabei ziemlich exakt nach dieser Anleitung die eigentlich für mich bisher recht gut ist / war da verständlich:

      https://github.com/msussek/arduino/tree/master/pulsecounter

      Auf dem WEMOS D1 läuft das im o.g. Link befindliche genannte Arduino-Script (https://github.com/msussek/arduino/blob/master/pulsecounter/src/wemos/PulseCounter.ino), jedoch habe ich in der Zeile 180 den Wert auf 120 Sekunden angepasst, denn:

      Meine Gastherme habe ich auf maximal 3kW Heizleistung eingestellt, der Impulsgeber im Zählwerk kommt daher bei minimaler Leistung von 3kW nur alle ca. 120 Sekunden am Reed Kontakt vorbei (1 Imp = 0,01m³). Wenn ich den Timer weiter runter drehe, dann sinkt die Leistung zwischendurch immer auf 0kW und es wird entsprechend die Anzahl der Brennerstarts (fälschlicherweise) hochgezählt: Das ist jedoch nicht korrekt, da der Zähler ja durchgehend läuft und der Brenner nicht an und ausgeht.

      Wenn ich den Timer bei 120 Sekunden (oder höher) setze, dann übermittelt er jedoch zu hohe Leistungen, da er in einem Datenpaket ja 2 Impulse registriert, damit steigt dann die Brennerleistung von exakt 3044W auf 6088W.

      Ich bin nun absolut nicht der Programmierer und habe gerade irgendwie auch Probleme das gedanklich zu lösen.
      Meine (total simplen) Ansätze waren von der Logik her wie folgt: Wenn Brennerleistung = 6088 dann setze Brennerleistung auf 3044 - das ist jedoch nicht sauber.

      Hat jemand eine gute Idee wie ich das sauber lösen kann?
      Ich werfe das bestehende Script gerne auch weg und baue das neu auf.

      Hier mal ein paar Screenshots von meinem Problem:

      5001b45a-4a42-4f9a-8699-2ef57bb9de38-image.png Es wurde konstant mit 3kW geheizt außer in den Peaks um 18:00 und 20:00. Die kleinen Spitzen sind alle ein "Vielfaches" von 3044, entweder 6088 oder 9132. Ziel ist hier eine flache Linie.

      Script / Code von Marco Sussek gemäß obenstehendem Github im ioBroker / Blockly:

      var deltaZeit, value, oldValue, deltaWert, verbrauchInKubikmeter, verbrauchInKwh, gasVolumenStrom, leistung;
      
      
      on({id: 'mqtt.0.SmartHome.Sensor.Haustechnikraum.Impulszaehler.Zaehler_0.Impulse', change: "any"}, async function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        // Zeitdifferenz seit letzter Änderung in ms
        deltaZeit = (new Date().getTime()) - getState("javascript.0.Gaszaehler.Verbrauch_Volumen").lc;
        if (value < oldValue) {
          // Sonderfälle ESP Reset oder Überlauf
          if (value >= 0) {
            // ESP Reset
            deltaWert = value;
          } else {
            // Impulswertüberlauf
            deltaWert = 1;
          }
        } else {
          // Anzahl Impulse seit letzter Änderung
          deltaWert = value - oldValue;
        }
        if (deltaWert > 0) {
          // Wenn Zähler läuft
          if (!getState("javascript.0.Gaszaehler.BrennerAktiv").val) {
            setState("javascript.0.Gaszaehler.BrennerAktiv"/*BrennerAktiv*/, true, true);
            setState("javascript.0.Gaszaehler.Brennerstarts"/*Brennerstarts*/, (getState("javascript.0.Gaszaehler.Brennerstarts").val + 1), true);
          }
          // Verbrauch in m³
          verbrauchInKubikmeter = Math.round((getState("javascript.0.Gaszaehler.Verbrauch_Volumen").val + deltaWert * 0.0106)*100)/100;
          setState("javascript.0.Gaszaehler.Verbrauch_Volumen"/*Verbrauch Volumen*/, verbrauchInKubikmeter, true);
          // Verbrauch in kwh
          verbrauchInKwh = Math.round((verbrauchInKubikmeter * getState("javascript.0.Gaszaehler.Brennwert").val * getState("javascript.0.Gaszaehler.Zustandszahl").val)*100)/100;
          setState("javascript.0.Gaszaehler.Verbrauch_Energie"/*Verbrauch Energie*/, verbrauchInKwh, true);
          // gasVolumenStrom in m³/s
          gasVolumenStrom = (deltaWert * 0.0106) / (deltaZeit / 1000);
          // leistung in W
          leistung = Math.round(gasVolumenStrom * getState("javascript.0.Gaszaehler.Brennwert").val * getState("javascript.0.Gaszaehler.Zustandszahl").val * 3600000);
          if (leistung == 6088) {
            leistung = 3044;
          }
          setState("javascript.0.Gaszaehler.Leistung"/*Leistung*/, leistung, true);
          // Laufzeit in h
          setState("javascript.0.Gaszaehler.Brennerlaufzeit_Stunden"/*Brennerlaufzeit_Stunden*/, Math.round((getState("javascript.0.Gaszaehler.Brennerlaufzeit").val / 3600)*100)/100, true);
          // Starts Laufzeit
          setState("javascript.0.Gaszaehler.Laufzeit_je_Start"/*Laufzeit_je_Start*/, Math.round((getState("javascript.0.Gaszaehler.Brennerlaufzeit").val / getState("javascript.0.Gaszaehler.Brennerstarts").val)*100)/100, true);
        } else {
          // Wenn Zähler nicht läuft
          if (getState("javascript.0.Gaszaehler.BrennerAktiv").val) {
            deltaZeit = (new Date().getTime()) - getState("javascript.0.Gaszaehler.BrennerAktiv").lc;
            setState("javascript.0.Gaszaehler.BrennerAktiv"/*BrennerAktiv*/, false, true);
            setState("javascript.0.Gaszaehler.Leistung"/*Leistung*/, 0, true);
            setState("javascript.0.Gaszaehler.Brennerlaufzeit"/*Brennerlaufzeit*/, (Math.round(getState("javascript.0.Gaszaehler.Brennerlaufzeit").val + deltaZeit / 1000)), true);
          }
        }
      });
      

      Code für den Wemos D1

      #include <ESP8266WiFi.h>
      #include <ESP8266WebServer.h>
      #include <ESP8266HTTPUpdateServer.h>
      #include <Ticker.h>
      #include <WiFiClient.h>
      #include <PubSubClient.h>
      extern "C" {
      #include "gpio.h"
      #include "user_interface.h"
      }
       
      #define INT_PIN1 5     // Zuordnung der GPIOs
      #define INT_PIN2 4
      #define INT_PIN3 2
      #define INT_PIN4 13
      #define INT_PIN5 12
      #define INT_PIN6 14
       
      unsigned long impulse[6], alteZeit[6], entprellZeit[6];
       
      ESP8266WebServer server(80);// Serverport  hier einstellen
      ESP8266HTTPUpdateServer httpUpdater;
      Ticker Timer;
      WiFiClient net;
      PubSubClient client(net);
      
      // Zugangsdaten zum WLAN:
      const char* ssid = "meineWLAN-SSID";
      const char* password = "meinWLANPasswort";
      
      // Zugangsdaten zum MQTT-Broker:
      const char* mqtt_server = "HostnameMQTT-Broker";
      const int   mqtt_port = 1883;
      const char* mqtt_user = "meinMQTTUserName";
      const char* mqtt_password = "meinMQTTPasswort";
      
       
      void ICACHE_RAM_ATTR interruptRoutine1() {
        handleInterrupt(0);
      }
      void ICACHE_RAM_ATTR interruptRoutine2() {
        handleInterrupt(1);
      }
      void ICACHE_RAM_ATTR interruptRoutine3() {
        handleInterrupt(2);
      }
      void ICACHE_RAM_ATTR interruptRoutine4() {
        handleInterrupt(3);
      }
      void ICACHE_RAM_ATTR interruptRoutine5() {
        handleInterrupt(4);
      }
      void ICACHE_RAM_ATTR interruptRoutine6() {
        handleInterrupt(5);
      }
      
      void handleInterrupt(int i){
        unsigned long timeInMillis = millis();
        if((timeInMillis - alteZeit[i]) > entprellZeit[i] || timeInMillis < alteZeit[i]) { 
          impulse[i]++;
          Serial.println("Impulse Zähler " + String(i) + ": " + String(impulse[i]));
          alteZeit[i] = timeInMillis;
         }
      }
       
      void handleHttpRequest(){
        String response = "";
        for (int i = 0; i < 6; i++){
          response += String(impulse[i]) + ",";
        }
        server.sendHeader("Cache-Control", "no-cache");
        server.send(200, "text/plain", response);
      }
       
      void sendMqttMessage(){ 
        Serial.println("Sende MQTT Nachrichten");
        for (int i = 0; i < 6; i++) {
          char buffer[10];
          sprintf(buffer, "%lu", impulse[i]);
          String topic = "/SmartHome/Sensor/Haustechnikraum/Impulszaehler/Zaehler_" + String(i) + "/Impulse";
          client.publish(const_cast<char*>(topic.c_str()), buffer);
        }
        for (int i = 0; i < 6; i++) {
          char buffer[10];
          sprintf(buffer, "%lu", entprellZeit[i]);
          String topic = "/SmartHome/Sensor/Haustechnikraum/Impulszaehler/Zaehler_" + String(i) + "/Entprellzeit";
          client.publish(const_cast<char*>(topic.c_str()), buffer);
        }
      }
      
      void reconnect() {
        // Loop until we're reconnected
        while (!client.connected()) {
          Serial.print("Verbindungsaufbau zum MQTT-Broker...");
          // Create a random client ID
          String clientId = "ESP8266Client-";
          clientId += String(random(0xffff), HEX);
          // Attempt to connect
          if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
            Serial.println("connected");
            client.subscribe("/SmartHome/Sensor/Haustechnikraum/Impulszaehler/*/Entprellzeit");
          } else {
            Serial.print("fehlgeschlagen, rc=");
            Serial.print(client.state());
            Serial.println(" erneut versuchen in 5 Sekunden");
            // Wait 5 seconds before retrying
            delay(5000);
          }
        }
      }
      
      void callback(char* topic, byte* payload, unsigned int length) {
        String sTopic = String(topic);
      
        for (int i = 0; i < 6; i++) {
          char buffer[10];
          String topic = "/SmartHome/Sensor/Haustechnikraum/Impulszaehler/Zaehler_" + String(i) + "/Entprellzeit";
          if (sTopic == topic) {
             // Workaround to get int from payload
            payload[length] = '\0';
            Serial.println("Setze Entprellzeit für Zähler " + String(i) + " auf " + String((char*)payload));
            entprellZeit[i] = String((char*)payload).toInt();
          }
        }
      }
       
      void setup(){
        pinMode(INT_PIN1, INPUT_PULLUP);
        pinMode(INT_PIN2, INPUT_PULLUP);
        pinMode(INT_PIN3, INPUT_PULLUP);
        pinMode(INT_PIN4, INPUT_PULLUP);
        pinMode(INT_PIN5, INPUT_PULLUP);
        pinMode(INT_PIN6, INPUT_PULLUP);
       
        Serial.begin(115200);
        Serial.println("");
        Serial.println("Start");
        Serial.println("");
        Serial.println("Warte auf Verbindung");
       
        WiFi.mode(WIFI_STA);                             // station  modus verbinde mit dem Router
        WiFi.begin(ssid, password); // WLAN Login daten
        WiFi.hostname("ESP-Zaeler");
      
        // Warte auf verbindung
        int timout = 0;
        while (WiFi.status() != WL_CONNECTED)
        {
          delay(500);
          Serial.print("O");
          timout++;
          if  (timout > 20) // Wenn Anmeldung nicht möglich
          {
            Serial.println("");
            Serial.println("Wlan verbindung fehlt");
            break;
          }
        }
       
        if (WiFi.status() == WL_CONNECTED)
        {
          Serial.println("");
          Serial.println("Mit Wlan verbunden");
          Serial.println("IP Adresse: ");
          Serial.println(WiFi.localIP());
        }
      
        for (int i = 0; i < 6; i++){
          alteZeit[i]=0;
          entprellZeit[i]=1000;
        }
      
        client.setServer(mqtt_server, mqtt_port);
       
        server.on("/", handleHttpRequest);     //  Bechandlung der Ereignissen anschlissen
        httpUpdater.setup(&server);         //  Updater
        server.begin();                     // Starte den Server
        Serial.println("HTTP Server gestartet");
       
        Timer.attach(120, sendMqttMessage);    // Starte den 60s Timer DIESEN WERT HABE ICH AUF 120 SEKUNDEN ANGEPASST!
       
        // ---------------------- Starte Interrupts ---------------------------------------------
        attachInterrupt(INT_PIN1, interruptRoutine1, FALLING);
        attachInterrupt(INT_PIN2, interruptRoutine2, FALLING);
        attachInterrupt(INT_PIN3, interruptRoutine3, FALLING);
        attachInterrupt(INT_PIN4, interruptRoutine4, FALLING);
        attachInterrupt(INT_PIN5, interruptRoutine5, FALLING);
        attachInterrupt(INT_PIN6, interruptRoutine6, FALLING);
      
        reconnect();
      
        client.setCallback(callback);
      }
       
      void loop() {
        if (!client.connected()) {
          reconnect();
        }
        client.loop();
        server.handleClient();
      }
      

      Ich würde mich freuen, wenn mir jemand helfen kann 🙂

      Danke,
      Moritz

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @DasMoritz last edited by Asgothian

        @dasmoritz

        Ich denke du machst einen Denkfehler. Du versuchst direkt aus den ankommenden Pulsen eine Heizleistung zu generieren.

        Du musst dich was die Kombination WEMOS Pulszähler / ioBroker angeht für eine von 3 Optionen entscheiden:

        • Pulszählerintervall so klein, das die vom Pulszähler übermittelte Zahl es erlaubt jeden Puls zu erkennen.
        • Pulszählerintervall so gross das im Betrieb die Werte immer so übertragen werden das mehr als n Pulse zusammengefasst übertragen werden. Die Frage wie gross n ist bestimmt den möglichen Fehler, da durch Überlappung von unterschiedlichen Intervallen es immer wieder dazu kommen kann das auch bei minimalen Betrieb n+1 Pulse übermittelt werden - Wenn n also 1 ist hast du manchmal auch 2 Pulse.
        • Pulszähler auf dem WEMOS deaktivieren und jedes mal wenn ein Signal vom Sensor kommt direkt ein MQTT Telegramm senden das ein Puls erkannt wurde.

        Ich Persönlich würde das Intervall klein stellen, und die "Brenner An" Erkennung auf ioBroker Seite dadurch lösen das der Brenner auf an gesetzt wird wenn ein Impuls erkannt wird und der Brenner auf aus gesetzt wird wenn über "Mindestzeit * 1.5" Sekunden kein Impuls erkannt wurde.

        Bliebe noch die Darstellung der Heizleistung. Da würde ich so vorgehen:

        • Heizleistung der letzten 10 Minuten in einem internen Datenpunkt kontinuierlich berechnen: Heizleistung aus den Pulsen berechnen, dabei eine Zeitbasis von 600 Sekunden nutzen. Skripttechnisch würde ich mit einer Liste von Wertepaaren (Pulszahl, Zeit) arbeiten um einen gleitenden Mittelwert über die letzten 600 Sekunden erzeugen zu können. (Immer wenn ein Wert ankommt: Liste durchgehen, alle Werte rauswerfen die älter als 600 sekunden sind, dann den neuen Wert hinzufügen, Pulse aufaddieren, durch 120 teilen und mit 3kW malnehmen um die mittlere Leistung in zu ermitteln.

        • Brenner aus => Heizleistung 0

        • Brenner an => Heizleistung = Max (3kW, Heizleistung der letzten 10 Minuten)

        A.

        D 1 Reply Last reply Reply Quote 0
        • D
          DasMoritz @Asgothian last edited by

          @asgothian

          Danke dir erstmal!

          Zum ersten Teil:
          Ok, dann würde ich deinem Vorschlag folgen und den Pulsintervall möglichst klein stellen. Dieser muss am Ende doch so klein sein, dass auch bei maximaler Umdrehung des Zählwerkes / maximaler Leistung jeder Puls übermittelt wird, korrekt?

          Beispiel: Wenn er mit 22kW Warmwasser aufbereitet, dann gibt es alle 2 Sekunden einen Impuls. Der Pulsintervall muss also kleiner als 2 Sek. gewählt sein, korrekt?

          Die Mindestzeit ist muss ja irgendwo ab 120 Sekunden (1 Imp alle 120 Sekunden bei 3kW als Minimalleistung) + X liegen. Wenn über (sagen wir) 180 Sekunden kein Impuls kommt, dann ist der Brenner aus, korrekt?

          Wie ich das sinnvoll in Blockly abbilden kann zaubert mir gerade noch ein Fragezeichen ins Gesicht.

          Zur Berechnung der Heizleistung muss ich dann noch mal abtauchen, Schritt für Schritt.

          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @DasMoritz last edited by

            @dasmoritz sagte in Gaszähler auswerten - Problem:

            @asgothian

            Danke dir erstmal!

            Zum ersten Teil:
            Ok, dann würde ich deinem Vorschlag folgen und den Pulsintervall möglichst klein stellen. Dieser muss am Ende doch so klein sein, dass auch bei maximaler Umdrehung des Zählwerkes / maximaler Leistung jeder Puls übermittelt wird, korrekt?

            Beispiel: Wenn er mit 22kW Warmwasser aufbereitet, dann gibt es alle 2 Sekunden einen Impuls. Der Pulsintervall muss also kleiner als 2 Sek. gewählt sein, korrekt?

            Nach der strengen Theorie - ja. Allerdings ist ein Intervall von unter 2 Sekunden doch exzessiv und wahrscheinlich unnötig. Ich würde mit einem Intervall von 50 Sekunden starten. Dabei ist damit zu rechnen das bei minimaler Leistung zwischen 2 echten Impulsen immer 2 Werte ohne neue Impulse kommen. Erst wenn dadurch die Genauigkeit der angezeigten Leistung nicht ausreicht würde ich das auf bis auf 10 Sekunden senken, nicht kleiner.

            Die Mindestzeit ist muss ja irgendwo ab 120 Sekunden (1 Imp alle 120 Sekunden bei 3kW als Minimalleistung) + X liegen. Wenn über (sagen wir) 180 Sekunden kein Impuls kommt, dann ist der Brenner aus, korrekt?

            Ja.

            Wie ich das sinnvoll in Blockly abbilden kann zaubert mir gerade noch ein Fragezeichen ins Gesicht.

            Das ist einfach. Du setzt einen Trigger auf den State mit den Pulsen, aktiv nur wenn geändert. Darin machst du:

            • clear Timeout
            • set Timeout(180 sekunden, setze Brenner auf aus)
            • setze Brenner auf an
            • die Listen-Magie für die Leistungsberechnung wie oben beschrieben.

            Zur Berechnung der Heizleistung muss ich dann noch mal abtauchen, Schritt für Schritt.

            A.

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Asgothian last edited by

              @asgothian sagte in Gaszähler auswerten - Problem:

              Ich würde mit einem Intervall von 50 Sekunden starten. Dabei ist damit zu rechnen das bei minimaler Leistung zwischen 2 echten Impulsen immer 2 Werte ohne neue Impulse kommen.

              aber nach Murphy wird das zu "Probleme" führen
              Impulsabstand und Intervall werden nie ein einheitliches gemeinsames Vielfaches haben so dass es vorkommen wird, dass mal 2 oder 3 Impulse in dem Intervall sind, was 50% Unterschied ausmacht (böses Beispiel - ich weiß!)

              ich habe das gleiche Problem beim all-in-device Zähler der etwa im 5 Minuten Abstand den Zählerstand ausliest.

              Wenn nicht der Zeitabstand zwischen den Impulsen exakt gemessen werden kann (ich habe den Code nicht gelesen, wäre eh zwecklos 😉 ) und daraus etwas berechnet wird kann es immer zu solchen "Phänomenen" kommen.

              Von stall.biz gibt es einen Pulsecounter, vielleicht wäre das hilfreich

              Asgothian 1 Reply Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @Homoran last edited by

                @homoran sagte in Gaszähler auswerten - Problem:

                aber nach Murphy wird das zu "Probleme" führen
                Impulsabstand und Intervall werden nie ein einheitliches gemeinsames Vielfaches haben so dass es vorkommen wird, dass mal 2 oder 3 Impulse in dem Intervall sind, was 50% Unterschied ausmacht (böses Beispiel - ich weiß!)

                Das ist Absicht. Die darauf folgende Auswertung muss mit diesem Effekt umgehen können, da die Pulsfrequenz (wenn ich die Zahlen von @DasMoritz korrekt interpretiere) zwischen 120 s / Puls und 2 s/Puls variieren kann. Egal welches Intervall wir also einstellen - wir werden immer irgendwann das "1 Puls / 2 Pulse" Problem bekommen - weswegen ich zur Anzeige der Leistung einen Mittelwert über 600 Sekunden vorschlage.

                Letztendlich geht es bei der Frequenz der Übertragung der Pulszahlen um 3 Dinge:

                • Wie schnell erkenn ich das der Brenner an ist
                • Ab wann habe ich sowieso so schnelle Pulse das ich mit dem "mal 1 und mal 2 Pulse" keine Probleme bekomme.
                • Ab wann sind die Pulse so schnell das ich nicht wirklich jeden Puls einzeln gemeldet bekommen will.

                A.

                D 1 Reply Last reply Reply Quote 0
                • D
                  DasMoritz @Asgothian last edited by

                  @asgothian

                  Moin,

                  ich habe den Wert auf dem Wemos D1 nun einmal auf 50 Sekunden gesetzt, ansonsten nichts weiteres verändert.
                  Optische Darstellung in Grafana ist nun wie folgt:

                  dd4cbbc1-c5c6-41c0-93dc-6a79dbb6dba9-image.png

                  Ergebnis ist optisch damit erstmal das gleiche.

                  Soll ich den Intervall von 50 Sek. nun weiter reduzieren oder aber das in ioBroker lösen?

                  Asgothian 1 Reply Last reply Reply Quote 0
                  • Asgothian
                    Asgothian Developer @DasMoritz last edited by

                    @dasmoritz
                    Du solltest den rest jetzt im ioBroker lösen. Das das Diagramm so aussieht entspricht der Erwartung.

                    A.

                    D 1 Reply Last reply Reply Quote 0
                    • D
                      DasMoritz @Asgothian last edited by

                      @asgothian

                      Moin,

                      hier mal ein Wurf:
                      beeb7fee-d9eb-40cc-a29e-9dc3bd9fd2b3-image.png

                      Ist das so korrekt?

                      Irgendwie passt das rein optisch / prozessual nicht zu meiner gedanklichen Logik:
                      Wenn das Objekt "Impulse" geändert wurde, dann warte 180 Sekunden und schaue ob sich noch eine weitere Änderung ergibt. Wenn das der Fall ist, dann setze "Brenner aktiv" auf wahr. Wenn dies nicht der Fall ist, dann setzte "Brenner aktiv" auf falsch.

                      Da passt doch in meinen Skript etwas nicht, oder?

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @DasMoritz last edited by Homoran

                        @dasmoritz da ist aber noch keine Glättung drin.

                        außerdem stoppst du den Timeout nicht.
                        wenn der Trigger innerhalb des Timeouts nochmal anspringt, läuft der selbe Timeout doppelt und mehrfach

                        D 1 Reply Last reply Reply Quote 0
                        • D
                          DasMoritz @Homoran last edited by

                          @homoran

                          Danke dir, stimmt.

                          Daraus ergeben sich natürlich zwei Fragen: Wie stoppe ich den Timeout und wie glätte ich das sauber?

                          Sorry, aber ich bin mit Blockly recht "neu".

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @DasMoritz last edited by Homoran

                            @dasmoritz sagte in Gaszähler auswerten - Problem:

                            Wie stoppe ich den Timeout

                            mit stop timeout vor dem erneuten Start

                            @dasmoritz sagte in Gaszähler auswerten - Problem:

                            wie glätte ich das sauber?

                            zum Beispiel über eine Liste, in die du den aktuellen Wert einträgst, dann sobald die Länge der Liste deine gewünschte Anzahl Messungen/Zeit überschritten hat, den jeweils letzten Eintrag wieder entfernst.
                            Anschließend den Mittelwert bilden und verwenden.

                            EDIT:
                            hier mal auf die Schnelle ein Beispiel:
                            gleitender_Mittelwert.png

                            Zusammenfassung:

                            • Liste erzeugen
                            • Wert einfügen
                            • Länge überprüfen
                            • bei bedarf Element entfernen
                            • Mittelwert (hier noch gerechnet, gibt es aber auch als Baustein) aus der Liste nehmen
                            • diesen in Variable übernehemn und
                            • damit weiterrechnen
                            D 1 Reply Last reply Reply Quote 0
                            • D
                              DasMoritz @Homoran last edited by

                              @homoran und @Asgothian

                              Uff, etwas heftig.

                              Frage: Wo muss ich den stop timeout in meinem Beispiel einbauen?
                              94b4cbe3-785f-441c-bfc6-0fd82790447a-image.png
                              Es macht doch irgendwie keinen Sinn, den "stop timeout" vor den Beginn des Timeouts zu setzen, oder?

                              Ich glaube wenn ich nicht Schritt für Schritt vorgehe, dann bin ich Lost.

                              Homoran Asgothian 2 Replies Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @DasMoritz last edited by

                                @dasmoritz sagte in Gaszähler auswerten - Problem:

                                Es macht doch irgendwie keinen Sinn, den "stop timeout" vor den Beginn des Timeouts zu setzen, oder?

                                Oder!
                                Danach wird ja der Timeout erneut gestartet

                                Aber ich denke, dass dein Ansatz mit dem Timeout komplett falsch ist

                                1 Reply Last reply Reply Quote 0
                                • Asgothian
                                  Asgothian Developer @DasMoritz last edited by

                                  @dasmoritz sagte in Gaszähler auswerten - Problem:

                                  @homoran und @Asgothian

                                  Uff, etwas heftig.

                                  Frage: Wo muss ich den stop timeout in meinem Beispiel einbauen?
                                  94b4cbe3-785f-441c-bfc6-0fd82790447a-image.png
                                  Es macht doch irgendwie keinen Sinn, den "stop timeout" vor den Beginn des Timeouts zu setzen, oder?

                                  Ich glaube wenn ich nicht Schritt für Schritt vorgehe, dann bin ich Lost.

                                  Doch, das ist genau so korrekt. Es geht ja bei dem "stop timeout" gerade darum dafür zu sorgen das ein schon laufender timeout gestoppt wird bevor du einen weiteren anlegst.

                                  Nun zum Thema Liste und Glätten: Das Hauptproblem welches du hast ist das deine Werteänderungen nicht in gleichen Intervallen kommen. Deswegen musst du etwas Arbeit hinein stecken:

                                  Zunächst einmal brauchst du 2 Variablen für deine Listen
                                  Screen Shot 2021-11-10 at 16.14.12 .png

                                  Dann füllst du diese mit den entsprechenden Werten - das muss in den Trigger, hinter die BrennerAktiv Geschichte.

                                  Screen Shot 2021-11-10 at 16.28.06 .png

                                  Wichtig dabei ist das die Bausteine Wert, Vorheriger Wert, Zeitstempel und vorheriger Zeitstempel keine Variablen sind sondern alle der gleiche Baustein - der der im folgenden Screenshot mit "Objekt ID" Vorbelegt
                                  Screen Shot 2021-11-10 at 16.16.57 .png

                                  Als nächstes kommt das Berechnen des Durchschnitts:
                                  Screen Shot 2021-11-10 at 16.30.43 .png

                                  Damit hast du dann einen Datenpunkt der dir Anzeigt wieviele Impulse du pro Sekunde innerhalb der jeweils letzten 600 sekunden bekommen hast.

                                  Als letztes willst du noch die Werte aus der Liste werfen die zu alt sind. Das geht am einfachsten so:

                                  Screen Shot 2021-11-10 at 16.31.42 .png

                                  Um sicher zu stellen das du 0 bekommst wenn das System meint der Brenner ist aus kommt noch ein löschen des Wertes nach 180 Sekunden mit dazu - das kommt mit in den Timeout um "BrennerAn" auf "falsch" zu setzen.

                                  Screen Shot 2021-11-10 at 16.37.56 .png
                                  Das letzte was dann noch übrig ist ist die Umrechnung von Pulsen/sekunde auf kW Leistung. Das solltest du selber können.

                                  Zur Vereinfachung kommt im Spoiler der Code für das Blockly

                                  Das ganze lässt sich noch an 2 Stellen optimieren, wird dann aber schwerer Verständlich - deswegen erst einmal so.


                                  Als Bild:
                                  Screen Shot 2021-11-10 at 16.39.29 .png

                                  Als Code zum importieren:

                                  <xml xmlns="https://developers.google.com/blockly/xml">
                                   <variables>
                                     <variable id="RhN#7[%dxf!T9SyC,8f3">Zählerliste</variable>
                                     <variable id="t}H~~rJos;nF=%#;6,y?">Zeitliste</variable>
                                     <variable type="timeout" id="timeout">timeout</variable>
                                     <variable id="(XPa}+#)*hcalB2Jiiea">Gesamtzeit</variable>
                                     <variable id="VZmhr$.-vWDVi=g]W4=m">Gesamtpulse</variable>
                                     <variable id="g[rc0pcGrHJx8$DMd0zi">Zaehler</variable>
                                     <variable id="?zhMXvMNtu^4.$S)*t4*">Liste</variable>
                                   </variables>
                                   <block type="variables_set" id="o$c0G,Xw[2.VJnP$,i=X" x="162" y="263">
                                     <field name="VAR" id="RhN#7[%dxf!T9SyC,8f3">Zählerliste</field>
                                     <value name="VALUE">
                                       <block type="lists_create_with" id=":X!,MIr@BuD|2kpubZpk">
                                         <mutation items="0"></mutation>
                                       </block>
                                     </value>
                                     <next>
                                       <block type="variables_set" id="(omR.F^JH=us=%y-V=:H">
                                         <field name="VAR" id="t}H~~rJos;nF=%#;6,y?">Zeitliste</field>
                                         <value name="VALUE">
                                           <block type="lists_create_with" id="428X.M]XQIr;IC=~+27K">
                                             <mutation items="0"></mutation>
                                           </block>
                                         </value>
                                         <next>
                                           <block type="on_ext" id="6V;*_?M|cq.6,Ag6wUCF">
                                             <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                                             <field name="CONDITION">ne</field>
                                             <field name="ACK_CONDITION"></field>
                                             <value name="OID0">
                                               <shadow type="field_oid" id="=R`9)vb^~(eh#A#-duNe">
                                                 <field name="oid">default</field>
                                               </shadow>
                                             </value>
                                             <statement name="STATEMENT">
                                               <block type="timeouts_cleartimeout" id="48tG%|-H]4pNZ2vmv_:a">
                                                 <field name="NAME">timeout</field>
                                                 <next>
                                                   <block type="timeouts_settimeout" id="aIcB=0HGSc^p_~6Jn1[Q">
                                                     <field name="NAME">timeout</field>
                                                     <field name="DELAY">180</field>
                                                     <field name="UNIT">sec</field>
                                                     <statement name="STATEMENT">
                                                       <block type="comment" id="*O-8U1c.SF=#jh@)rpD7">
                                                         <field name="COMMENT">BrennerAktiv</field>
                                                         <next>
                                                           <block type="update" id="G0~t2THSdln;.Ayj$#$;">
                                                             <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                             <field name="OID">Object ID</field>
                                                             <field name="WITH_DELAY">FALSE</field>
                                                             <value name="VALUE">
                                                               <block type="logic_boolean" id="#^TX%s=p[czdWiH7/i5J">
                                                                 <field name="BOOL">TRUE</field>
                                                               </block>
                                                             </value>
                                                             <next>
                                                               <block type="comment" id="*m|odd!JGqzZ)$n$b~/B">
                                                                 <field name="COMMENT">Pulse pro Sekunde</field>
                                                                 <next>
                                                                   <block type="update" id="d!s1Pqw.]l=Cr8JxH%.(">
                                                                     <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                                     <field name="OID">Object ID</field>
                                                                     <field name="WITH_DELAY">FALSE</field>
                                                                     <value name="VALUE">
                                                                       <block type="math_number" id="O6LvZ|jag|G=Ugnp3AbN">
                                                                         <field name="NUM">0</field>
                                                                       </block>
                                                                     </value>
                                                                   </block>
                                                                 </next>
                                                               </block>
                                                             </next>
                                                           </block>
                                                         </next>
                                                       </block>
                                                     </statement>
                                                     <next>
                                                       <block type="update" id="1!5rP_AJ:,bs6vS6N0h0">
                                                         <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                         <field name="OID">Object ID</field>
                                                         <field name="WITH_DELAY">FALSE</field>
                                                         <value name="VALUE">
                                                           <block type="logic_boolean" id="4/La{y$MgZWkQnvrPRdb">
                                                             <field name="BOOL">TRUE</field>
                                                           </block>
                                                         </value>
                                                         <next>
                                                           <block type="lists_setIndex" id="Yof;8e|DUIbMO^nPFX[}">
                                                             <mutation at="false"></mutation>
                                                             <field name="MODE">SET</field>
                                                             <field name="WHERE">FIRST</field>
                                                             <value name="LIST">
                                                               <block type="variables_get" id="B-h_:8J09Rscq;Y8v(8u">
                                                                 <field name="VAR" id="RhN#7[%dxf!T9SyC,8f3">Zählerliste</field>
                                                               </block>
                                                             </value>
                                                             <value name="TO">
                                                               <block type="math_arithmetic" id="MNw%cw$dCto4y*/cdf#q">
                                                                 <field name="OP">MINUS</field>
                                                                 <value name="A">
                                                                   <shadow type="math_number" id="|zzBd+Kpg:noEbXoz?9t">
                                                                     <field name="NUM">1</field>
                                                                   </shadow>
                                                                   <block type="on_source" id="Q$qaDf#W=,=]H8CMrgdQ">
                                                                     <field name="ATTR">state.val</field>
                                                                   </block>
                                                                 </value>
                                                                 <value name="B">
                                                                   <shadow type="math_number" id="5XST5xCSm{,9h,$csq`A">
                                                                     <field name="NUM">1</field>
                                                                   </shadow>
                                                                   <block type="on_source" id="Lc*z,zJ-2[3A]lCPK~,y">
                                                                     <field name="ATTR">oldState.val</field>
                                                                   </block>
                                                                 </value>
                                                               </block>
                                                             </value>
                                                             <next>
                                                               <block type="lists_setIndex" id="!bxFO-@%_pJw::@q-w4(">
                                                                 <mutation at="false"></mutation>
                                                                 <field name="MODE">SET</field>
                                                                 <field name="WHERE">FIRST</field>
                                                                 <value name="LIST">
                                                                   <block type="variables_get" id="fVBdKB7BpIHT?#JDS/V?">
                                                                     <field name="VAR" id="t}H~~rJos;nF=%#;6,y?">Zeitliste</field>
                                                                   </block>
                                                                 </value>
                                                                 <value name="TO">
                                                                   <block type="math_arithmetic" id="fi6(A7[VzQ,3D[!Qbvnf">
                                                                     <field name="OP">DIVIDE</field>
                                                                     <value name="A">
                                                                       <shadow type="math_number" id="2I:ao#=s9ULH28n.LHX;">
                                                                         <field name="NUM">1</field>
                                                                       </shadow>
                                                                       <block type="math_arithmetic" id="Ga6@iuJzPo*0Wf~YDCwX">
                                                                         <field name="OP">MINUS</field>
                                                                         <value name="A">
                                                                           <shadow type="math_number">
                                                                             <field name="NUM">1</field>
                                                                           </shadow>
                                                                           <block type="on_source" id="-NqAr3p{?dgl=YRc!VS1">
                                                                             <field name="ATTR">state.ts</field>
                                                                           </block>
                                                                         </value>
                                                                         <value name="B">
                                                                           <shadow type="math_number">
                                                                             <field name="NUM">1</field>
                                                                           </shadow>
                                                                           <block type="on_source" id="J?SnM79mWd)[2g07phB7">
                                                                             <field name="ATTR">oldState.ts</field>
                                                                           </block>
                                                                         </value>
                                                                       </block>
                                                                     </value>
                                                                     <value name="B">
                                                                       <shadow type="math_number" id="d|S:Rg{{#*Pf,,erdEr)">
                                                                         <field name="NUM">1000</field>
                                                                       </shadow>
                                                                     </value>
                                                                   </block>
                                                                 </value>
                                                                 <next>
                                                                   <block type="variables_set" id="^.o]$p/hp0DR9If[0^gv">
                                                                     <field name="VAR" id="(XPa}+#)*hcalB2Jiiea">Gesamtzeit</field>
                                                                     <value name="VALUE">
                                                                       <block type="math_number" id="Mc|}R#90r$4B8c@?O!fC">
                                                                         <field name="NUM">0</field>
                                                                       </block>
                                                                     </value>
                                                                     <next>
                                                                       <block type="variables_set" id="M@N1]Z6x06Fk]G~W#8w4">
                                                                         <field name="VAR" id="VZmhr$.-vWDVi=g]W4=m">Gesamtpulse</field>
                                                                         <value name="VALUE">
                                                                           <block type="math_number" id="UJ5?lb5/meY=wCfkRnhK">
                                                                             <field name="NUM">0</field>
                                                                           </block>
                                                                         </value>
                                                                         <next>
                                                                           <block type="variables_set" id="]q|xUimCw~Q*Ts?}UUCL">
                                                                             <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                             <value name="VALUE">
                                                                               <block type="math_number" id="Y6$c3NvN~nL:|ihDd)jn">
                                                                                 <field name="NUM">1</field>
                                                                               </block>
                                                                             </value>
                                                                             <next>
                                                                               <block type="controls_whileUntil" id="pmwYUvMBoZ7j{B7e^,VU">
                                                                                 <field name="MODE">WHILE</field>
                                                                                 <value name="BOOL">
                                                                                   <block type="logic_compare" id="[@lSlkL@1]f?8i[o#*vQ">
                                                                                     <field name="OP">LT</field>
                                                                                     <value name="A">
                                                                                       <block type="variables_get" id="#C83KjmoAd+0^-6lI?UJ">
                                                                                         <field name="VAR" id="(XPa}+#)*hcalB2Jiiea">Gesamtzeit</field>
                                                                                       </block>
                                                                                     </value>
                                                                                     <value name="B">
                                                                                       <block type="math_number" id="an9ZPugwtwd}`K+#Ue56">
                                                                                         <field name="NUM">600</field>
                                                                                       </block>
                                                                                     </value>
                                                                                   </block>
                                                                                 </value>
                                                                                 <statement name="DO">
                                                                                   <block type="math_change" id="^u|l2!NoWkp{IvM]ZRAQ">
                                                                                     <field name="VAR" id="VZmhr$.-vWDVi=g]W4=m">Gesamtpulse</field>
                                                                                     <value name="DELTA">
                                                                                       <shadow type="math_number" id="+uUrww(`w,aloWM#4Bs5">
                                                                                         <field name="NUM">1</field>
                                                                                       </shadow>
                                                                                       <block type="lists_getIndex" id="-=rwCzq,h#UNt5.b1]zy">
                                                                                         <mutation statement="false" at="true"></mutation>
                                                                                         <field name="MODE">GET</field>
                                                                                         <field name="WHERE">FROM_START</field>
                                                                                         <value name="VALUE">
                                                                                           <block type="variables_get" id="qOZ5r;:sOww~Op+a*Y8k">
                                                                                             <field name="VAR" id="?zhMXvMNtu^4.$S)*t4*">Liste</field>
                                                                                           </block>
                                                                                         </value>
                                                                                         <value name="AT">
                                                                                           <block type="variables_get" id="wUhaw.56)w,T3JFAA!@/">
                                                                                             <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                                           </block>
                                                                                         </value>
                                                                                       </block>
                                                                                     </value>
                                                                                     <next>
                                                                                       <block type="math_change" id="qC.sl5/C@}hCIub(f!-o">
                                                                                         <field name="VAR" id="(XPa}+#)*hcalB2Jiiea">Gesamtzeit</field>
                                                                                         <value name="DELTA">
                                                                                           <shadow type="math_number">
                                                                                             <field name="NUM">1</field>
                                                                                           </shadow>
                                                                                           <block type="lists_getIndex" id="7.CsGI*h.FJMH`h=J*t6">
                                                                                             <mutation statement="false" at="true"></mutation>
                                                                                             <field name="MODE">GET</field>
                                                                                             <field name="WHERE">FROM_START</field>
                                                                                             <value name="VALUE">
                                                                                               <block type="variables_get" id="m,J;.`Oq:2u(tE4.aC47">
                                                                                                 <field name="VAR" id="t}H~~rJos;nF=%#;6,y?">Zeitliste</field>
                                                                                               </block>
                                                                                             </value>
                                                                                             <value name="AT">
                                                                                               <block type="variables_get" id="K[vkQh4!h6QVd:h!;b-d">
                                                                                                 <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                                               </block>
                                                                                             </value>
                                                                                           </block>
                                                                                         </value>
                                                                                         <next>
                                                                                           <block type="math_change" id="=hPCKnS/(%,JWj_h_Wil">
                                                                                             <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                                             <value name="DELTA">
                                                                                               <shadow type="math_number" id="hxs;h-M/Q0oUC-k%QMxy">
                                                                                                 <field name="NUM">1</field>
                                                                                               </shadow>
                                                                                             </value>
                                                                                           </block>
                                                                                         </next>
                                                                                       </block>
                                                                                     </next>
                                                                                   </block>
                                                                                 </statement>
                                                                                 <next>
                                                                                   <block type="comment" id="{sYOj[l+06*od@b}B(.R">
                                                                                     <field name="COMMENT">durchschnittliche Anzahl von Pulsen pro Sekunde</field>
                                                                                     <next>
                                                                                       <block type="comment" id="6t:iZiG/H@/7UVdu).P*">
                                                                                         <field name="COMMENT">min. 1/120</field>
                                                                                         <next>
                                                                                           <block type="update" id="?cel2;EUSxc4u1KVw@D6">
                                                                                             <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                                                             <field name="OID">Object ID</field>
                                                                                             <field name="WITH_DELAY">FALSE</field>
                                                                                             <value name="VALUE">
                                                                                               <block type="math_constrain" id="0^#Ee?=)R*ju:f)N`5)3">
                                                                                                 <value name="VALUE">
                                                                                                   <shadow type="math_number" id="WTrC~{}};LM,_]fs9h*1">
                                                                                                     <field name="NUM">50</field>
                                                                                                   </shadow>
                                                                                                   <block type="math_arithmetic" id="7NW}kfpXRv8*K8?Q/V!x">
                                                                                                     <field name="OP">DIVIDE</field>
                                                                                                     <value name="A">
                                                                                                       <shadow type="math_number" id="[3*u(,s[#%Lmu]|ktW)s">
                                                                                                         <field name="NUM">1</field>
                                                                                                       </shadow>
                                                                                                       <block type="variables_get" id="@}|Tn+V)kS{j3]Z?:-bH">
                                                                                                         <field name="VAR" id="VZmhr$.-vWDVi=g]W4=m">Gesamtpulse</field>
                                                                                                       </block>
                                                                                                     </value>
                                                                                                     <value name="B">
                                                                                                       <shadow type="math_number" id=".m0Rii:V|pIJiTGXiDm.">
                                                                                                         <field name="NUM">1</field>
                                                                                                       </shadow>
                                                                                                       <block type="variables_get" id="ctL1[-*qI|MBXi)e#kZ+">
                                                                                                         <field name="VAR" id="(XPa}+#)*hcalB2Jiiea">Gesamtzeit</field>
                                                                                                       </block>
                                                                                                     </value>
                                                                                                   </block>
                                                                                                 </value>
                                                                                                 <value name="LOW">
                                                                                                   <shadow type="math_number" id="3-RCKX%g!1%A0ydgL@2e">
                                                                                                     <field name="NUM">1</field>
                                                                                                   </shadow>
                                                                                                   <block type="math_arithmetic" id="UA5(A+;[WMMY53U3^@W@">
                                                                                                     <field name="OP">DIVIDE</field>
                                                                                                     <value name="A">
                                                                                                       <shadow type="math_number" id="4*H~Tn3bo*H{x1_@q)BK">
                                                                                                         <field name="NUM">1</field>
                                                                                                       </shadow>
                                                                                                     </value>
                                                                                                     <value name="B">
                                                                                                       <shadow type="math_number" id="}Vl[AnMDEmxw!eeSGB*I">
                                                                                                         <field name="NUM">120</field>
                                                                                                       </shadow>
                                                                                                     </value>
                                                                                                   </block>
                                                                                                 </value>
                                                                                                 <value name="HIGH">
                                                                                                   <shadow type="math_number" id="9fUoZ^0WSxhJ2)ny7DWz">
                                                                                                     <field name="NUM">1</field>
                                                                                                   </shadow>
                                                                                                 </value>
                                                                                               </block>
                                                                                             </value>
                                                                                             <next>
                                                                                               <block type="variables_set" id="UDure5(0qqLl[6O;tCf/">
                                                                                                 <field name="VAR" id="t}H~~rJos;nF=%#;6,y?">Zeitliste</field>
                                                                                                 <value name="VALUE">
                                                                                                   <block type="lists_getSublist" id="49J`4!HtewjAo]$SpF^a">
                                                                                                     <mutation at1="false" at2="true"></mutation>
                                                                                                     <field name="WHERE1">FIRST</field>
                                                                                                     <field name="WHERE2">FROM_START</field>
                                                                                                     <value name="LIST">
                                                                                                       <block type="variables_get" id="b7y.E+c_p*sv=NsnIfk,">
                                                                                                         <field name="VAR" id="t}H~~rJos;nF=%#;6,y?">Zeitliste</field>
                                                                                                       </block>
                                                                                                     </value>
                                                                                                     <value name="AT2">
                                                                                                       <block type="variables_get" id="b3#laXAD~(s%VBNw^+5L">
                                                                                                         <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                                                       </block>
                                                                                                     </value>
                                                                                                   </block>
                                                                                                 </value>
                                                                                                 <next>
                                                                                                   <block type="variables_set" id="J,wx/e_65z7f]q_U7)Hq">
                                                                                                     <field name="VAR" id="RhN#7[%dxf!T9SyC,8f3">Zählerliste</field>
                                                                                                     <value name="VALUE">
                                                                                                       <block type="lists_getSublist" id="2v8i@dHv|U{lODH=h.g3">
                                                                                                         <mutation at1="false" at2="true"></mutation>
                                                                                                         <field name="WHERE1">FIRST</field>
                                                                                                         <field name="WHERE2">FROM_START</field>
                                                                                                         <value name="LIST">
                                                                                                           <block type="variables_get" id="+/:8OFJ|h$K22W]5LM@k">
                                                                                                             <field name="VAR" id="RhN#7[%dxf!T9SyC,8f3">Zählerliste</field>
                                                                                                           </block>
                                                                                                         </value>
                                                                                                         <value name="AT2">
                                                                                                           <block type="variables_get" id="miKsvgj;scv.eeSADwCf">
                                                                                                             <field name="VAR" id="g[rc0pcGrHJx8$DMd0zi">Zaehler</field>
                                                                                                           </block>
                                                                                                         </value>
                                                                                                       </block>
                                                                                                     </value>
                                                                                                   </block>
                                                                                                 </next>
                                                                                               </block>
                                                                                             </next>
                                                                                           </block>
                                                                                         </next>
                                                                                       </block>
                                                                                     </next>
                                                                                   </block>
                                                                                 </next>
                                                                               </block>
                                                                             </next>
                                                                           </block>
                                                                         </next>
                                                                       </block>
                                                                     </next>
                                                                   </block>
                                                                 </next>
                                                               </block>
                                                             </next>
                                                           </block>
                                                         </next>
                                                       </block>
                                                     </next>
                                                   </block>
                                                 </next>
                                               </block>
                                             </statement>
                                           </block>
                                         </next>
                                       </block>
                                     </next>
                                   </block>
                                  </xml>
                                  

                                  D 1 Reply Last reply Reply Quote 1
                                  • D
                                    DasMoritz @Asgothian last edited by

                                    @asgothian

                                    Wow, Danke, tausend Dank!
                                    Es läuft noch nicht, aber das ist mal eine Hilfe!

                                    Du schreibst:
                                    "Wichtig dabei ist das die Bausteine Wert, Vorheriger Wert, Zeitstempel und vorheriger Zeitstempel keine Variablen sind sondern alle der gleiche Baustein - der der im folgenden Screenshot mit "Objekt ID" Vorbelegt"

                                    Ich referenziere mit der Objekt-ID auf einen Wert im ioBroker, der erhöht wird wenn ein neuer Impuls kommt, dass sieht so aus:

                                    99c9cb5a-1585-495a-b627-00ccd98e6ee6-image.png

                                    Verstehe ich es nun richtig, dass die genannten Variablen Wert, Vorheriger Wert, Zeitstempel und vorheriger Zeitstempel Bezug zur Objekt-ID (von oben) haben müssen?

                                    Dann müsste ich im ioBroker ja sagen können "Nehme dir den Wert von ObjektID..." bzw. "Nehme dir den vorherigen Wert von ObjektID..." usw.

                                    Oder verstehe ich da gerade was falsch?

                                    Ich kann mich nur noch einmal bedanken!

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @DasMoritz last edited by

                                      @dasmoritz sagte in Gaszähler auswerten - Problem:

                                      Verstehe ich es nun richtig, dass die genannten Variablen Wert, Vorheriger Wert, Zeitstempel und vorheriger Zeitstempel Bezug zur Objekt-ID (von oben) haben müssen?

                                      nicht müssen - sondern haben

                                      @dasmoritz sagte in Gaszähler auswerten - Problem:

                                      Dann müsste ich im ioBroker ja sagen können "Nehme dir den Wert von ObjektID..." bzw. "Nehme dir den vorherigen Wert von ObjektID..." usw.

                                      genau das tut dieser Baustein in allen seinen Ausprägungen

                                      D 1 Reply Last reply Reply Quote 0
                                      • D
                                        DasMoritz @Homoran last edited by

                                        @homoran

                                        Okay, dann beende ich mal mein bestehendes Script und starte das obenstehende.

                                        Das die ObjektID auf die Impulse referenziert die der Wemos D1 in den ioBroker schreibt ist korrekt?

                                        Homoran Asgothian 2 Replies Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @DasMoritz last edited by

                                          @dasmoritz sagte in Gaszähler auswerten - Problem:

                                          Das die ObjektID auf die Impulse referenziert die der Wemos D1 in den ioBroker schreibt ist korrekt?

                                          das verstehe ich jetzt nicht.
                                          die ObjektID ??? schreibt

                                          1 Reply Last reply Reply Quote 0
                                          • Asgothian
                                            Asgothian Developer @DasMoritz last edited by Asgothian

                                            @dasmoritz sagte in Gaszähler auswerten - Problem:

                                            Das die ObjektID auf die Impulse referenziert die der Wemos D1 in den ioBroker schreibt ist korrekt?

                                            Ja.

                                            Das ist die Objekt id für den Trigger.

                                            Nein - du musst 2 unterschiedliche Objekt-ID's auswählen.

                                            Eine für den Trigger, und eine wo die Werte aus der Umrechnung hinein sollen.

                                            A.

                                            sorry - hatte deinen Post missverstanden

                                            D 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            767
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            41
                                            2652
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo