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. JavaScript
  5. Rechnen von S0 funktioniert nach Update nicht mehr richtig?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    699

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Rechnen von S0 funktioniert nach Update nicht mehr richtig?

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 529 Aufrufe
  • Ä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.
  • S Offline
    S Offline
    SegaPro
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich habe ein Update von Node v14 auf v16 gemacht. NPM ging von 6.13 auf 8.19.

    Zu meiner Verwunderung, gab es keine größeren Probleme. Allerdings habe ich jetzt Probleme mit meinem Zähler, der den aktuellen Ertrag meines Wechselrichters misst.

    Am Wechselrichter ist ein S0Bus, der eben entsprechende Impulse an einen Binäraktor sendet. Dieser sendet im Takt von 5 Sekunden den Wert seines eigenes Zählers. Er zählt also quasi nur seine eigenen Impulse.

    Ich habe ein kleines Script, welches dann daraus entsprechend die aktuelle Leistung des Wechselrichters erreichnet. Die Summe ergibt sich aus der Änderung des Zählers innerhalb der letzten 5 Sekunden.

    Dieses Konstrukt hat jetzt zwei Jahre absolut perfekt funktioniert. Nun nach den genannten Updates tut es das nicht mehr.

    Die Werte werden korrekt angezeigt - springen zwischendurch aber plötzlich nach oben.

    Beispiel: aktuelle Leistung Wechselrichter: 1000 Watt

    Script errechnet: ca 980 Watt (gibt immer eine leichte Toleranz - stört mich jedoch nicht weiter).

    Jetzt kommt die Sonne kurz etwas besser durch, Leistung geht hoch auf 1500 Watt.

    Das Script zeigt an: 98XX W

    Und springt dann nach kurzer Zeit wieder runter auf den echten Wert - bis ca. 20 Sekunden später das gleiche passiert.

    Ich bin leider nur mittelmäßig fit in JS und rechnen liegt mir überhaupt nicht.

    Kann mir vielleicht jemand einen Tipp geben?

    Anbei das Script

    on({ id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "any" }, function (obj) {
        if (getState("knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung"/*Strom Erzeugung*/).val > 0) {
            var totalSeconds = (Date.now() - obj.oldState.ts) / 1000;
            var devil = 3600 * 1000 / (400 * totalSeconds);
            setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil));
        }
    });
    
    

    Ich danke euch für eure Hilfe

    paul53P 1 Antwort Letzte Antwort
    0
    • S SegaPro

      Hallo zusammen,

      ich habe ein Update von Node v14 auf v16 gemacht. NPM ging von 6.13 auf 8.19.

      Zu meiner Verwunderung, gab es keine größeren Probleme. Allerdings habe ich jetzt Probleme mit meinem Zähler, der den aktuellen Ertrag meines Wechselrichters misst.

      Am Wechselrichter ist ein S0Bus, der eben entsprechende Impulse an einen Binäraktor sendet. Dieser sendet im Takt von 5 Sekunden den Wert seines eigenes Zählers. Er zählt also quasi nur seine eigenen Impulse.

      Ich habe ein kleines Script, welches dann daraus entsprechend die aktuelle Leistung des Wechselrichters erreichnet. Die Summe ergibt sich aus der Änderung des Zählers innerhalb der letzten 5 Sekunden.

      Dieses Konstrukt hat jetzt zwei Jahre absolut perfekt funktioniert. Nun nach den genannten Updates tut es das nicht mehr.

      Die Werte werden korrekt angezeigt - springen zwischendurch aber plötzlich nach oben.

      Beispiel: aktuelle Leistung Wechselrichter: 1000 Watt

      Script errechnet: ca 980 Watt (gibt immer eine leichte Toleranz - stört mich jedoch nicht weiter).

      Jetzt kommt die Sonne kurz etwas besser durch, Leistung geht hoch auf 1500 Watt.

      Das Script zeigt an: 98XX W

      Und springt dann nach kurzer Zeit wieder runter auf den echten Wert - bis ca. 20 Sekunden später das gleiche passiert.

      Ich bin leider nur mittelmäßig fit in JS und rechnen liegt mir überhaupt nicht.

      Kann mir vielleicht jemand einen Tipp geben?

      Anbei das Script

      on({ id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "any" }, function (obj) {
          if (getState("knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung"/*Strom Erzeugung*/).val > 0) {
              var totalSeconds = (Date.now() - obj.oldState.ts) / 1000;
              var devil = 3600 * 1000 / (400 * totalSeconds);
              setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil));
          }
      });
      
      

      Ich danke euch für eure Hilfe

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @segapro sagte Änderung des Zählers innerhalb der letzten 5 Sekunden.

      Die Impulsdifferenz wird im Skript nicht ausgewertet. Versuche es mal so:

      on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
          let devil = 9000000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc);
          setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true);
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      S 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @segapro sagte Änderung des Zählers innerhalb der letzten 5 Sekunden.

        Die Impulsdifferenz wird im Skript nicht ausgewertet. Versuche es mal so:

        on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
            let devil = 9000000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc);
            setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true);
        });
        
        S Offline
        S Offline
        SegaPro
        schrieb am zuletzt editiert von
        #3

        @paul53 sagte in Rechnen von S0 funktioniert nach Update nicht mehr richtig?:

        on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {

        Jetzt zeigt er so um die 16xxx Watt an.

        Ich habe gerade noch einmal geschaut. Ich glaube ich habe in meinem vorherigen Post eine falsche Aussage getroffen:

        Der Binäraktor sendet alle 5 Werte eine Änderung. Also es müssen 5 Signale auf den S0 gekommen sein, damit der Binäraktor den Wert sendet.

        MDT schreibt dazu:

        Sendedifferenz 0-65535
        [2]
        wird die Sendedifferenz erreicht,
        sendet der Binäreingang den
        aktuellen Wert

        Dieser Wert ist auf "5" gesetzt.

        Auf dem Zähler selbst steht: 0,5 Wh/imp

        Sorry, dass ich vorher eine falsche Aussage getroffen hab.

        paul53P 1 Antwort Letzte Antwort
        0
        • S SegaPro

          @paul53 sagte in Rechnen von S0 funktioniert nach Update nicht mehr richtig?:

          on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {

          Jetzt zeigt er so um die 16xxx Watt an.

          Ich habe gerade noch einmal geschaut. Ich glaube ich habe in meinem vorherigen Post eine falsche Aussage getroffen:

          Der Binäraktor sendet alle 5 Werte eine Änderung. Also es müssen 5 Signale auf den S0 gekommen sein, damit der Binäraktor den Wert sendet.

          MDT schreibt dazu:

          Sendedifferenz 0-65535
          [2]
          wird die Sendedifferenz erreicht,
          sendet der Binäreingang den
          aktuellen Wert

          Dieser Wert ist auf "5" gesetzt.

          Auf dem Zähler selbst steht: 0,5 Wh/imp

          Sorry, dass ich vorher eine falsche Aussage getroffen hab.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @segapro sagte: Auf dem Zähler selbst steht: 0,5 Wh/imp

          Also 2 Impulse / Wh und nicht 400 Impulse / kWh? Dann muss der Faktor korrigiert werden:

          on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
              let devil = 1800000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc);
              setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true);
          });
          

          Was bedeutet "Binäreingang"? Wird nicht die Anzahl gezählter Impulse gesendet?
          Binär bedeutet eigentlich, dass es nur die Werte 0 und 1 gibt.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          S 1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            SegaPro
            schrieb am zuletzt editiert von
            #5

            @paul53

            Es handelt sich um einen Binäraktor von MDT.

            Dieser zählt die Impulse und sendet dann seinen "Zählerstand" .

            Das ist das "knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung". Diesen Wert sendet er alle 5 Impulse.

            Das mache ich deswegen, damit der KNX-Bus nicht so zugeballert wird, wenn der Wechselrichter auf maximaler Leistung fährt (5 KW).

            Also bislang war es zumindest so:

            Der Aktor zählt nach jedem Impuls aufwärts. Aktuell steht er bei 6560
            Den nächsten Wert würde er dann bei 6565 senden.

            Ich verstehe nicht, wieso das jetzt so lange funktioniert hat und nun nach dem Update plötzlich nicht mehr.

            Hat jemand eine Idee? Würde ungern ein Rollback auf die alte Version machen. Irgendwas muss sich geändert haben - ich komme nur einfach nicht dahinter.

            Liebe Grüße

            1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @segapro sagte: Auf dem Zähler selbst steht: 0,5 Wh/imp

              Also 2 Impulse / Wh und nicht 400 Impulse / kWh? Dann muss der Faktor korrigiert werden:

              on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
                  let devil = 1800000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc);
                  setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true);
              });
              

              Was bedeutet "Binäreingang"? Wird nicht die Anzahl gezählter Impulse gesendet?
              Binär bedeutet eigentlich, dass es nur die Werte 0 und 1 gibt.

              S Offline
              S Offline
              SegaPro
              schrieb am zuletzt editiert von
              #6

              @paul53 sagte in Rechnen von S0 funktioniert nach Update nicht mehr richtig?:

              on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {

              Das funktioniert schon wesentlich besser (also bis jetzt).

              Vielen vielen Dank dafür.

              Er "hängt" allerdings etwas und zeigt immer 20 - 50 Watt weniger an, als tatsächlich erzeugt wird. Kann man das vielleicht noch etwas optimieren?

              Viele Grüße

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


              Support us

              ioBroker
              Community Adapters
              Donate

              736

              Online

              32.6k

              Benutzer

              82.0k

              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