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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.6k Beiträge 127 Kommentatoren 742.4k Aufrufe 127 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.
  • E ETGermany

    @waly_de Interessantes Thema, habe das gerade gefunden, Tibber Pulse hängt am Zähler und Web-Server ist freigeschaltet. Dein Skript in meinen ioBroker eingetragen, allerdings gibt es bei mir ein Problem mit der Funktion BigInt():
    Cannot find name 'BigInt'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2020' or later.(2583)
    Keine Ahnung wo ich die Option für den Compiler anpassen muss - gibt es da eine Lösung oder Hilfestellung?

    W Offline
    W Offline
    Waly_de
    schrieb am zuletzt editiert von
    #842

    @etgermany sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

    allerdings gibt es bei mir ein Problem mit der Funktion BigInt():
    Cannot find name 'BigInt'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2020' or later.(2583)
    Keine Ahnung wo ich die Option für den Compiler anpassen muss - gibt es da eine Lösung oder Hilfestellung?

    Ich nehme an, du bekommst diese Meldung nur im Editor und nicht beim Ausführen des Scripts, richtig?
    Das hatte ich auch, es geht scheinbar um die javascript Versionen. Man kann das abstellen indem man "es2020" in den in den Instanz-Einstellungen des Javascriptadapters unter "Die Syntaxhilfe für diese npm-Module aktivieren:" einträgt.
    Ich habe dort 3 Einträge: JSON,string und es2020.

    Bildschirmfoto 2023-12-16 um 11.54.51.jpg

    S A P 3 Antworten Letzte Antwort
    0
    • W Waly_de

      @etgermany sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

      allerdings gibt es bei mir ein Problem mit der Funktion BigInt():
      Cannot find name 'BigInt'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2020' or later.(2583)
      Keine Ahnung wo ich die Option für den Compiler anpassen muss - gibt es da eine Lösung oder Hilfestellung?

      Ich nehme an, du bekommst diese Meldung nur im Editor und nicht beim Ausführen des Scripts, richtig?
      Das hatte ich auch, es geht scheinbar um die javascript Versionen. Man kann das abstellen indem man "es2020" in den in den Instanz-Einstellungen des Javascriptadapters unter "Die Syntaxhilfe für diese npm-Module aktivieren:" einträgt.
      Ich habe dort 3 Einträge: JSON,string und es2020.

      Bildschirmfoto 2023-12-16 um 11.54.51.jpg

      S Offline
      S Offline
      sirdir
      schrieb am zuletzt editiert von
      #843

      @waly_de Ich glaube man muss auch bei der Ladeleistung noch nen Offset vorsehen. gerade der inv.inputWatts zeigt vielleicht die DC Leistung an. Der Wert ist tiefer als was man als SlowChgWatts setzt, laut meinem Shelly ist die bezogene Leistung aber höher. (in meinem Fall ca. 20W differenz)

      1 Antwort Letzte Antwort
      0
      • F foxthefox

        @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

        @foxthefox Schau mal ob hier die Helligkeit drin ist:
        Ja cmdId=130 hatten wir als Helligkeit definiert.

        Das könnte Helligkeit cmdID=130 sein, hier mit Zahlenwert 512, könnte 50% entsprechen

        0a3d0a030880041020183520012801380340024882015003580170bfef88a206800113880101ba0103696f73ca0110485735325a4448345346363636353838
        

        hier Zahlenwert 1023, also ggf. 100% Helligkeit

        0a3d0a0308ff071020183520012801380340024882015003580170829089a206800113880101ba0103696f73ca0110485735325a4448345346363636353838
        

        damit sollte das auch als Kommando gehen brightness cmdId=130, dateLen=3, Helligkeit als Zahlenwert normiert auf 1024 (100%)

        Max Power / Überlastschutz hier ?:

        so isses, cmdId=137:
        hier ist 1750W als Übergabewert drin:

        0a3d0a0308d60d1020183520012801380340024889015003580170bb99a6a206800113880101ba0103696f73ca0110485735325a4448345346363636353838
        [Wasserkocher] cmdId:137 cmdFunc:2
        

        und dieses Kommando mit cmdId=137 hat den Übergabewert von 2500W, das passt zusammen!

        0a3d0a0308c4131020183520012801380340024889015003580170f9b8a6a206800113880101ba0103696f73ca0110485735325a4448345346363636353838
        
        0a2e0a0368c41310351820200128014002480150035801800103880103ca0110485735325a4448345346363636353838
        
        script.js.1_16_1_Ecoflow_Dynamische_Leistung: Decodierte Nachricht:{"data":{"plug_heartbeat_pack":{"maxWatts":2500}}}
        

        damit sollte das auch als Kommando gehen maxWatts, cmdId=137, dateLen=3, Watt = Zahlenwert

        A Offline
        A Offline
        aherby
        schrieb am zuletzt editiert von
        #844

        @foxthefox, @Waly_de
        So da meine Delta 2 Max nun mal etwas geladen ist und auch heute ein weiteres Update durch Ecoflow bekommen hat,
        dachte ich log mal was über die Lap-Funktionen.

        Laden über Solar, einmalig, heute 17.12.23 ab 10:00 Uhr:

        script.js.Ecoflow_Dynamische_Leistung_V1_2: Unbekannter Delta2Max Set Befehl: {"params":{"min":20,"taskIndex":0,"taskPrior":0,"sec":6,"timeMode":3,"timeScale":[0,0,0,0,0,0,0,240,255,255,255,255,255,255,255,255,255,255],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":9,"isCfg":1},"from":"iOS","lang":"de-de","id":"232761002","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
        

        ein verändern jeweils um eine komplette Stunde (10, 11, 12, 13, 14, 15, 16:00 Uhr) ewirkt:

        "timeScale":[0,0,0,0,0,0,0,240,255,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,252,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,0  ,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,0  ,192,255,255,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,240,255,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,  0,252,255,255,255,255,255,255],"day":17,"type":1,
        "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,0  ,  0,255,255,255,255,255,255],"day":17,"type":1,
        

        täglich 10:00 Uhr bis 15:00 Uhr

        script.js.Ecoflow_Dynamische_Leistung_V1_2: Unbekannter Delta2Max Set Befehl: {"params":{"min":0,"taskIndex":0,"taskPrior":0,"sec":0,"timeMode":0,"timeScale":[0,0,0,0,0,0,0,240,255,255,255,3,0,0,0,0,0,0],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":0,"isCfg":1},"from":"iOS","lang":"de-de","id":"617597303","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
        

        täglich von 15:00 Uhr bis 20:00 Uhr

        script.js.Ecoflow_Dynamische_Leistung_V1_2: JSON-Nachricht empfangen:/app/1669741428735926273/R351ZEB4HF4Exxxx/thing/property/set:{"params":{"min":0,"taskIndex":0,"taskPrior":0,"sec":0,"timeMode":0,"timeScale":[0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":0,"isCfg":1},"from":"iOS","lang":"de-de","id":"873716234","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
        

        Könnt ihr hiermit was anfangen?

        F 1 Antwort Letzte Antwort
        0
        • A aherby

          @foxthefox, @Waly_de
          So da meine Delta 2 Max nun mal etwas geladen ist und auch heute ein weiteres Update durch Ecoflow bekommen hat,
          dachte ich log mal was über die Lap-Funktionen.

          Laden über Solar, einmalig, heute 17.12.23 ab 10:00 Uhr:

          script.js.Ecoflow_Dynamische_Leistung_V1_2: Unbekannter Delta2Max Set Befehl: {"params":{"min":20,"taskIndex":0,"taskPrior":0,"sec":6,"timeMode":3,"timeScale":[0,0,0,0,0,0,0,240,255,255,255,255,255,255,255,255,255,255],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":9,"isCfg":1},"from":"iOS","lang":"de-de","id":"232761002","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
          

          ein verändern jeweils um eine komplette Stunde (10, 11, 12, 13, 14, 15, 16:00 Uhr) ewirkt:

          "timeScale":[0,0,0,0,0,0,0,240,255,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,252,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,0  ,255,255,255,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,0  ,192,255,255,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,240,255,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,  0,252,255,255,255,255,255,255],"day":17,"type":1,
          "timeScale":[0,0,0,0,0,0,0,  0,0  ,0  ,0  ,  0,255,255,255,255,255,255],"day":17,"type":1,
          

          täglich 10:00 Uhr bis 15:00 Uhr

          script.js.Ecoflow_Dynamische_Leistung_V1_2: Unbekannter Delta2Max Set Befehl: {"params":{"min":0,"taskIndex":0,"taskPrior":0,"sec":0,"timeMode":0,"timeScale":[0,0,0,0,0,0,0,240,255,255,255,3,0,0,0,0,0,0],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":0,"isCfg":1},"from":"iOS","lang":"de-de","id":"617597303","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
          

          täglich von 15:00 Uhr bis 20:00 Uhr

          script.js.Ecoflow_Dynamische_Leistung_V1_2: JSON-Nachricht empfangen:/app/1669741428735926273/R351ZEB4HF4Exxxx/thing/property/set:{"params":{"min":0,"taskIndex":0,"taskPrior":0,"sec":0,"timeMode":0,"timeScale":[0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0],"day":17,"type":1,"timeParam":1036177,"year":2023,"week":1,"isEnable":1,"month":12,"hour":0,"isCfg":1},"from":"iOS","lang":"de-de","id":"873716234","moduleSn":"R351ZEB4HF4Exxxx","moduleType":1,"operateType":"taskCfg","version":"1.0"}
          

          Könnt ihr hiermit was anfangen?

          F Abwesend
          F Abwesend
          foxthefox
          Developer
          schrieb am zuletzt editiert von foxthefox
          #845

          @aherby
          grundsätzlich kann man damit was anfangen, timeScale ist noch etwas interpretationsbedürftig, aber sonst sprechen die Namen schon fast zu einem.

          Allerdings würde ich solche Aufgaben nicht über script oder Adapter setzen wollen.
          Bzw. diese überhaupt setzen, wenn man Automatisierung über iob macht.
          Aus meiner Sicht gehört die Logik zentral an eine Stelle und kein konkurierendes Eigenleben zusätzlich (dezentral im Gerät).
          Theoretisch alles machbar, aber einfacher wird es dadurch nicht.

          EDIT:
          wobei ich glaube, daß die eigentliche Aufgabe im Powerstream zu setzen ist und dann folgt die Powerstation diesem. Kann aber auch sein, daß die Einstellung auch von der Powerstation initiert werden kann.

          Adapterüberblick: Profil Github;

          Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

          Ein Aufruf: video

          A 1 Antwort Letzte Antwort
          0
          • F foxthefox

            @aherby
            grundsätzlich kann man damit was anfangen, timeScale ist noch etwas interpretationsbedürftig, aber sonst sprechen die Namen schon fast zu einem.

            Allerdings würde ich solche Aufgaben nicht über script oder Adapter setzen wollen.
            Bzw. diese überhaupt setzen, wenn man Automatisierung über iob macht.
            Aus meiner Sicht gehört die Logik zentral an eine Stelle und kein konkurierendes Eigenleben zusätzlich (dezentral im Gerät).
            Theoretisch alles machbar, aber einfacher wird es dadurch nicht.

            EDIT:
            wobei ich glaube, daß die eigentliche Aufgabe im Powerstream zu setzen ist und dann folgt die Powerstation diesem. Kann aber auch sein, daß die Einstellung auch von der Powerstation initiert werden kann.

            A Offline
            A Offline
            aherby
            schrieb am zuletzt editiert von aherby
            #846

            @foxthefox Moin es ist eine von vier Automatisierung von der Delta 2 Max.
            Laden über Solarengergie, Laden über Wechselstrom, Entladen über AC-Port und Entladen über 12V-Dc Port.

            Einstellungen täglich, einmalig, wöchentlich.

            Natürlich ist es über die App oder so einfacher aber vielleicht für Überschussladen mit entsprechender Ladeleistung
            ein Mehrwert. Oder als Rückmeldung ob eins der "Punkte" aktiv ist und daher die Delta 2 Max dies und das nicht macht.

            1 Antwort Letzte Antwort
            0
            • A aherby

              @foxthefox Genau richtig es waren erstmal 0%, 50% und 100% Helligkeit. Habe glaube nicht alle als Code eingefügt.

              Und ja 2500 W sind der Max-Wert und 1750 W war so grob als ein Werte oberhalb der Mitte gedacht.

              Kannst du mir in irgendeinerweise beibringen so Sachen / Dinge zu lesen?

              F Abwesend
              F Abwesend
              foxthefox
              Developer
              schrieb am zuletzt editiert von foxthefox
              #847

              @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

              @foxthefox Genau richtig es waren erstmal 0%, 50% und 100% Helligkeit. Habe glaube nicht alle als Code eingefügt.

              Und ja 2500 W sind der Max-Wert und 1750 W war so grob als ein Werte oberhalb der Mitte gedacht.

              Kannst du mir in irgendeinerweise beibringen so Sachen / Dinge zu lesen?

              Kein Problem.
              zum anschauen der HEX-Pakete, gibt man diese auf der Webseite ein
              https://protobuf-decoder.netlify.app
              Danach wird ohne protobuf-Definition zu kennen etwas ausgegeben.
              Beispiel: Bildschirmfoto 2023-12-17 um 17.05.12.png
              FieldNumber
              1 -> die Daten der gemachten Einstellung
              8 -> welches Gerät 20=Powerstream, 2=Plug
              9 -> cmdId, hier die 137 für die Überlastgrenze
              10 -> Datenlänge von FieldNumber 1

              Damit kommt man solchen einfachen Kommandos schon gut auf die Spur.
              Komplexere wie die Aufgaben, haben dann in 1 noch ihre eigene Struktur (bzw. wenn es um Daten vom Gerät kommend handelt)

              Wenn das eine 0% Helligkeit war, dann ist dies wieder auch ein interessanter Fall. Bei binären wurde auch schon eine "0" gar nicht als data übergeben, sondern nur der Rest. Hier scheint es ähnlich zu sein, daß 0% auch nicht übergeben wird.

              Adapterüberblick: Profil Github;

              Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

              Ein Aufruf: video

              A 1 Antwort Letzte Antwort
              0
              • F foxthefox

                @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                @foxthefox Genau richtig es waren erstmal 0%, 50% und 100% Helligkeit. Habe glaube nicht alle als Code eingefügt.

                Und ja 2500 W sind der Max-Wert und 1750 W war so grob als ein Werte oberhalb der Mitte gedacht.

                Kannst du mir in irgendeinerweise beibringen so Sachen / Dinge zu lesen?

                Kein Problem.
                zum anschauen der HEX-Pakete, gibt man diese auf der Webseite ein
                https://protobuf-decoder.netlify.app
                Danach wird ohne protobuf-Definition zu kennen etwas ausgegeben.
                Beispiel: Bildschirmfoto 2023-12-17 um 17.05.12.png
                FieldNumber
                1 -> die Daten der gemachten Einstellung
                8 -> welches Gerät 20=Powerstream, 2=Plug
                9 -> cmdId, hier die 137 für die Überlastgrenze
                10 -> Datenlänge von FieldNumber 1

                Damit kommt man solchen einfachen Kommandos schon gut auf die Spur.
                Komplexere wie die Aufgaben, haben dann in 1 noch ihre eigene Struktur (bzw. wenn es um Daten vom Gerät kommend handelt)

                Wenn das eine 0% Helligkeit war, dann ist dies wieder auch ein interessanter Fall. Bei binären wurde auch schon eine "0" gar nicht als data übergeben, sondern nur der Rest. Hier scheint es ähnlich zu sein, daß 0% auch nicht übergeben wird.

                A Offline
                A Offline
                aherby
                schrieb am zuletzt editiert von aherby
                #848

                @foxthefox
                0% Helligkeit könnte dies hier sein:

                script.js.Ecoflow_Dynamische_Leistung_V1_2: Binäre Nachricht empfangen:/app/166974142873592xxxx/HW52ZDH4SF66xxxx/thing/property/set:0a36102018352001280138034002488201580170f4f9d1c407800113880101ba0103696f73ca0110485735325a4448345346363636353835
                
                F 1 Antwort Letzte Antwort
                1
                • A aherby

                  @foxthefox
                  0% Helligkeit könnte dies hier sein:

                  script.js.Ecoflow_Dynamische_Leistung_V1_2: Binäre Nachricht empfangen:/app/166974142873592xxxx/HW52ZDH4SF66xxxx/thing/property/set:0a36102018352001280138034002488201580170f4f9d1c407800113880101ba0103696f73ca0110485735325a4448345346363636353835
                  
                  F Abwesend
                  F Abwesend
                  foxthefox
                  Developer
                  schrieb am zuletzt editiert von
                  #849

                  @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                  0a36102018352001280138034002488201580170f4f9d1c407800113880101ba0103696f73ca0110485735325a4448345346363636353835

                  Ja, so wie ich schrieb.
                  cmdId=130 und keine Daten dabei, 0=> nix an Daten mit FieldNumber=1
                  Muss dann nur beachtet werden, daß 100% in 1024 umzurechnen ist.

                  Adapterüberblick: Profil Github;

                  Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

                  Ein Aufruf: video

                  A 1 Antwort Letzte Antwort
                  0
                  • F foxthefox

                    @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                    0a36102018352001280138034002488201580170f4f9d1c407800113880101ba0103696f73ca0110485735325a4448345346363636353835

                    Ja, so wie ich schrieb.
                    cmdId=130 und keine Daten dabei, 0=> nix an Daten mit FieldNumber=1
                    Muss dann nur beachtet werden, daß 100% in 1024 umzurechnen ist.

                    A Offline
                    A Offline
                    aherby
                    schrieb am zuletzt editiert von
                    #850

                    @foxthefox hoffe es hat geholfen

                    F 1 Antwort Letzte Antwort
                    0
                    • A aherby

                      @foxthefox hoffe es hat geholfen

                      F Abwesend
                      F Abwesend
                      foxthefox
                      Developer
                      schrieb am zuletzt editiert von
                      #851

                      @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                      @foxthefox hoffe es hat geholfen

                      auf jeden Fall

                      Adapterüberblick: Profil Github;

                      Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

                      Ein Aufruf: video

                      A 1 Antwort Letzte Antwort
                      0
                      • F foxthefox

                        @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                        @foxthefox hoffe es hat geholfen

                        auf jeden Fall

                        A Offline
                        A Offline
                        aherby
                        schrieb am zuletzt editiert von
                        #852

                        @foxthefox noch weiter Daten benötigt?
                        Sobald mal mehr Sonne da ist würde ich dass mit den Smartplugs und mit oder ohne Berücksichtigung ins Hausnetz weiter loggen.

                        F 1 Antwort Letzte Antwort
                        0
                        • A aherby

                          @foxthefox noch weiter Daten benötigt?
                          Sobald mal mehr Sonne da ist würde ich dass mit den Smartplugs und mit oder ohne Berücksichtigung ins Hausnetz weiter loggen.

                          F Abwesend
                          F Abwesend
                          foxthefox
                          Developer
                          schrieb am zuletzt editiert von
                          #853

                          @aherby sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                          @foxthefox noch weiter Daten benötigt?
                          Sobald mal mehr Sonne da ist würde ich dass mit den Smartplugs und mit oder ohne Berücksichtigung ins Hausnetz weiter loggen.

                          Ja gerne, ich bräuchte auch mal ein HEX String von den normalen update Daten die zyklisch kommen, da müsste eigentlich dieses Bit für "Berücksichtigung im Powerstream"neu drin sein.

                          Adapterüberblick: Profil Github;

                          Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

                          Ein Aufruf: video

                          W 1 Antwort Letzte Antwort
                          0
                          • F foxthefox

                            @dadue-max @Waly_de

                            Ich bin mir nicht sicher ob es WLAN instabilität ist, oder ob es nicht doch etwas mit dem Protokoll zu tun hat.
                            Ich bau grad ein paar node-red Knoten auf um Power Stream und Power Station einzulesen.
                            Was mir dabei auffällt, ist das sich bei mir wohl nichts von WLAN trennt, sondern das Senden einfach aufhört. Das merkt man recht gut bei der Powerstation, da die viel mehr am plaudern ist.
                            Obwohl ich auch regelmäßig mal ein "latestQuatas" anfrage, kommt manchmal nach einer gewissen Zeit nichts an. Gehe ich dann mit der App auf das Gerät, gehts wieder los, WLAN ist demzufolge noch an.
                            Ich vermute eher, daß hier bei Telegrammen, die ein ACK=1 haben, auch ein ACK zu senden ist.
                            Ich hatte mal probehalber den .../set der powerstation im debug, da kommt eine Unmenge an gleichartigen Telegrammen rein, scheinen die ACK zu sein.

                            Gruß
                            Klaus

                            DaDue-maxD Offline
                            DaDue-maxD Offline
                            DaDue-max
                            schrieb am zuletzt editiert von
                            #854

                            @foxthefox Hallo, wir hatten mal im August über das Thema WLAN Verlust bei den Powerstreams gesprochen.
                            Einige FW - Releases später ist aus meiner Sicht dieses Problem immernoch vorhanden. Powerstream und Delta2Max haben guten WLAN Zugang (D2M ist ohne Probleme die ganze Zeit am WLAN). Die Powerstream fängt morgens gut an, jedoch nach einigen Stunden verabschiedet sich die Steuerung und nimmt nichts mehr. In der App ist dann nur noch Bluetooth aktiv. Die PS nimmt zwar im UI Einstellungsveränderungen an, jedoch setzt sie nach einiger Zeit wieder zurück.
                            Manchmal hilft Bluetooth an ausschalten am Handy, immer hilft alle Stecker abziehen, manchmal hilft Powerstream neu zu verbinden, gelingt aber auch nicht immer. Jetzt könnte man meinen, dass ist ein reines Ecoflow Problem, jedoch ist eine erfolgreiche Massnahme, das JavaScript "ecoflow-conn...." neu zu starten. Danach funktioniert die Regelung wieder und in der App von Ecoflow ist die Powerstream wieder über WLAN connected. (Ich verwende derzeit 1.1.6.2/iobroker ist in Summe auf neuestem Stand). Habt Ihr neue Einschätzungen zu dem Thema?
                            Klar, bin mit Ecoflow auch in Kontakt, da hält man sich bedeckt. Daher mal die Frage nach einem Meinungsbild hier in der Community. Bei Ecoflow wollte man davon nichts wissen, bis das letzte Update dann exakt unter dem Titel "Verbesserter Algo...for Batterieladezustand" das Problem behebt. :-)

                            F S 3 Antworten Letzte Antwort
                            0
                            • DaDue-maxD DaDue-max

                              @foxthefox Hallo, wir hatten mal im August über das Thema WLAN Verlust bei den Powerstreams gesprochen.
                              Einige FW - Releases später ist aus meiner Sicht dieses Problem immernoch vorhanden. Powerstream und Delta2Max haben guten WLAN Zugang (D2M ist ohne Probleme die ganze Zeit am WLAN). Die Powerstream fängt morgens gut an, jedoch nach einigen Stunden verabschiedet sich die Steuerung und nimmt nichts mehr. In der App ist dann nur noch Bluetooth aktiv. Die PS nimmt zwar im UI Einstellungsveränderungen an, jedoch setzt sie nach einiger Zeit wieder zurück.
                              Manchmal hilft Bluetooth an ausschalten am Handy, immer hilft alle Stecker abziehen, manchmal hilft Powerstream neu zu verbinden, gelingt aber auch nicht immer. Jetzt könnte man meinen, dass ist ein reines Ecoflow Problem, jedoch ist eine erfolgreiche Massnahme, das JavaScript "ecoflow-conn...." neu zu starten. Danach funktioniert die Regelung wieder und in der App von Ecoflow ist die Powerstream wieder über WLAN connected. (Ich verwende derzeit 1.1.6.2/iobroker ist in Summe auf neuestem Stand). Habt Ihr neue Einschätzungen zu dem Thema?
                              Klar, bin mit Ecoflow auch in Kontakt, da hält man sich bedeckt. Daher mal die Frage nach einem Meinungsbild hier in der Community. Bei Ecoflow wollte man davon nichts wissen, bis das letzte Update dann exakt unter dem Titel "Verbesserter Algo...for Batterieladezustand" das Problem behebt. :-)

                              F Abwesend
                              F Abwesend
                              foxthefox
                              Developer
                              schrieb am zuletzt editiert von
                              #855

                              @dadue-max
                              Also ich kann das bei mir so nicht beobachten. Aus meiner Sicht läuft es super stabil. Ich hab einmal node-red was PowerStream und powerstation zuverlässig abholt und meinen Adapter der auch die gleichen Dinge holt. In beiden Implementierungen hab ich einen Zähler drin. Getrennt für beide Geräte und der läuft munter hoch. Ich hab jetzt keine Auswertung ob mal weniger Telegramme kommen, aber gefühlt gibt’s da keine Aussetzer oder Verlangsamung. PowerStream schickt nur Daten die sich auch aus ihrer Sicht geändert haben und es wert sind auf die Reise zu gehen. Die Station schickt immer alles von einem der Teilgeräte (bms, mppt,…) und das quasi im Sekundentakt.

                              Das einzige was auffällig bei mir ist:

                              • es kommen früh morgens völlig falsche Werte für die Frequenz zb 70Hz
                              • und falsche Spannung 320V
                              • und extrem hoher Werte für heartbeat, so oft schickt der stream nie etwas

                              Kann sein das das ein bug in der Version 1.0.0.73 ist. Die Version bekam ich von EF direkt, da ich aus dem Fehler 1 (3 Fehler Stromnetz - warten bis es sich erholt) nicht mehr raus kam.

                              Adapterüberblick: Profil Github;

                              Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

                              Ein Aufruf: video

                              1 Antwort Letzte Antwort
                              1
                              • DaDue-maxD DaDue-max

                                @foxthefox Hallo, wir hatten mal im August über das Thema WLAN Verlust bei den Powerstreams gesprochen.
                                Einige FW - Releases später ist aus meiner Sicht dieses Problem immernoch vorhanden. Powerstream und Delta2Max haben guten WLAN Zugang (D2M ist ohne Probleme die ganze Zeit am WLAN). Die Powerstream fängt morgens gut an, jedoch nach einigen Stunden verabschiedet sich die Steuerung und nimmt nichts mehr. In der App ist dann nur noch Bluetooth aktiv. Die PS nimmt zwar im UI Einstellungsveränderungen an, jedoch setzt sie nach einiger Zeit wieder zurück.
                                Manchmal hilft Bluetooth an ausschalten am Handy, immer hilft alle Stecker abziehen, manchmal hilft Powerstream neu zu verbinden, gelingt aber auch nicht immer. Jetzt könnte man meinen, dass ist ein reines Ecoflow Problem, jedoch ist eine erfolgreiche Massnahme, das JavaScript "ecoflow-conn...." neu zu starten. Danach funktioniert die Regelung wieder und in der App von Ecoflow ist die Powerstream wieder über WLAN connected. (Ich verwende derzeit 1.1.6.2/iobroker ist in Summe auf neuestem Stand). Habt Ihr neue Einschätzungen zu dem Thema?
                                Klar, bin mit Ecoflow auch in Kontakt, da hält man sich bedeckt. Daher mal die Frage nach einem Meinungsbild hier in der Community. Bei Ecoflow wollte man davon nichts wissen, bis das letzte Update dann exakt unter dem Titel "Verbesserter Algo...for Batterieladezustand" das Problem behebt. :-)

                                S Offline
                                S Offline
                                sirdir
                                schrieb am zuletzt editiert von
                                #856

                                @dadue-max Meine Powerstream hat auch Schrott WIFI. Manchmal denk ich, wenn viel Strom fliesst (oder hohe Temperatur? Hängt ja auch zusammen) bricht WIFI weg. Merk es aber auch nicht immer, da es, wenn viel Strom rein fliesst meist nichts zu kontrollieren gibt (Einspeisung ist dann 0 weil andere Solaranlagen genug liefern).

                                1 Antwort Letzte Antwort
                                0
                                • DaDue-maxD DaDue-max

                                  @foxthefox Hallo, wir hatten mal im August über das Thema WLAN Verlust bei den Powerstreams gesprochen.
                                  Einige FW - Releases später ist aus meiner Sicht dieses Problem immernoch vorhanden. Powerstream und Delta2Max haben guten WLAN Zugang (D2M ist ohne Probleme die ganze Zeit am WLAN). Die Powerstream fängt morgens gut an, jedoch nach einigen Stunden verabschiedet sich die Steuerung und nimmt nichts mehr. In der App ist dann nur noch Bluetooth aktiv. Die PS nimmt zwar im UI Einstellungsveränderungen an, jedoch setzt sie nach einiger Zeit wieder zurück.
                                  Manchmal hilft Bluetooth an ausschalten am Handy, immer hilft alle Stecker abziehen, manchmal hilft Powerstream neu zu verbinden, gelingt aber auch nicht immer. Jetzt könnte man meinen, dass ist ein reines Ecoflow Problem, jedoch ist eine erfolgreiche Massnahme, das JavaScript "ecoflow-conn...." neu zu starten. Danach funktioniert die Regelung wieder und in der App von Ecoflow ist die Powerstream wieder über WLAN connected. (Ich verwende derzeit 1.1.6.2/iobroker ist in Summe auf neuestem Stand). Habt Ihr neue Einschätzungen zu dem Thema?
                                  Klar, bin mit Ecoflow auch in Kontakt, da hält man sich bedeckt. Daher mal die Frage nach einem Meinungsbild hier in der Community. Bei Ecoflow wollte man davon nichts wissen, bis das letzte Update dann exakt unter dem Titel "Verbesserter Algo...for Batterieladezustand" das Problem behebt. :-)

                                  F Abwesend
                                  F Abwesend
                                  foxthefox
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #857

                                  @dadue-max

                                  Ich vergaß auf die Wärme einzugehen. Mein System hat nicht zu viel Last und wenn es mal hoch ist, dann sind das 400w max 1/4 vs 3/4 a den Eingängen. Könnte also sein das es nicht so heiß läuft.

                                  Adapterüberblick: Profil Github;

                                  Wenn der Adapter gefällt und nützlich ist, bitte ins Repo gehen und Star setzen. Danke

                                  Ein Aufruf: video

                                  DaDue-maxD 1 Antwort Letzte Antwort
                                  0
                                  • F foxthefox

                                    @dadue-max

                                    Ich vergaß auf die Wärme einzugehen. Mein System hat nicht zu viel Last und wenn es mal hoch ist, dann sind das 400w max 1/4 vs 3/4 a den Eingängen. Könnte also sein das es nicht so heiß läuft.

                                    DaDue-maxD Offline
                                    DaDue-maxD Offline
                                    DaDue-max
                                    schrieb am zuletzt editiert von
                                    #858

                                    @foxthefox richtig, Hohe Temperatur ist ein Thema am Powermax. Wifi Disconnect bei über 42-43 Grad war üblich. Ich habe dann einen alten CPU Kühler montiert, der ab 40 grad anspringt und ich drossel dann auch irgendwann die Leistung. Das hat viel geholfen.

                                    1 Antwort Letzte Antwort
                                    0
                                    • W Waly_de

                                      An die Tibber Nutzer:

                                      ich habe ein Script geschrieben, das die Zählerdaten des Pulse lokal, also ohne den Umweg über die Cloud auslesen und in IoBroker Zustände schreiben kann.

                                      Ich weiß, das es mit der Cloud schon mal Probleme gibt, oder die Werte sehr verzögert ankommen.
                                      Das Script kann bisher nur Zähler auslesen, die die SML-Sprache sprechen. Probier es mal aus, wenn Daten ankommen, aber nicht ausgewertet werden können, meldet Euch bitte mit der genauen Bezeichnung Eures Zählers und einem HexDump der Daten, die der Pulse liefert.
                                      Die stehen dann im Zustand: 0_userdata.0.TibberPulse.SMLDataHEX

                                      Im Script muss eigentlich nur das Web-Passwort der Pulse-Bridge eingetragen werden.
                                      Vielleicht muss auch der Host angepasst werden.
                                      Ihr müsst nur die Weboberfläche der Bridge dauerhaft aktivieren.
                                      Wie das geht hat marq24 für seine HomeAssistant Anbindung hier super beschrieben:

                                      https://github.com/marq24/ha-tibber-pulse-local

                                      Wenn alles klappt, werden die Zählerdaten alle 2 Sekunden in IOBroker-States geschrieben und Ihr könnt im Script diese Konfiguration angeben:

                                      SmartmeterID: "0_userdata.0.TibberPulse.SML.Power"
                                      

                                      Hier das Script: (update 21.11.23 18:39)

                                      var TibberConfig = {
                                          password: "XXXX-XXXX",
                                          statesPrefix: "0_userdata.0.TibberPulse",
                                          interval: 2000,
                                          host: "tibber-host",
                                      }
                                      const debug = false
                                      const http = require('http');
                                      async function getPulseData(password) {
                                          const auth = Buffer.from(`admin:${password}`).toString('base64');
                                          const options = {
                                              hostname: TibberConfig.host,
                                              path: '/metrics.json?node_id=1',
                                              method: 'GET',
                                              headers: {
                                                  'Authorization': `Basic ${auth}`,
                                                  'Host': 'tibber-host',
                                                  'lang': 'de-de',
                                                  'content-type': 'application/json',
                                                  'user-agent': 'okhttp/3.14.9'
                                              }
                                          };
                                      
                                          function httpRequest(options) {
                                              return new Promise((resolve, reject) => {
                                                  const req = http.request(options, res => {
                                                      let data = '';
                                                      res.on('data', chunk => {
                                                          data += chunk;
                                                      });
                                                      res.on('end', () => {
                                                          resolve(data);
                                                      });
                                                  });
                                      
                                                  req.on('error', error => {
                                                      reject(error);
                                                  });
                                      
                                                  req.end();
                                              });
                                          }
                                      
                                          try {
                                              let response = await (httpRequest(options));
                                              return response.replace("$type", "type"); // Gibt das Antwortobjekt zurück
                                          } catch (error) {
                                              console.error("Ein Fehler bei der Ermittlung der Zugangsdaten ist aufgetreten. Bitte prüfe die Zugangsdaten.");
                                              throw error;
                                          }
                                      }
                                      function getDataAsHexString(password) {
                                          return new Promise((resolve, reject) => {
                                              const auth = Buffer.from(`admin:${password}`).toString('base64');
                                              const options = {
                                                  hostname: TibberConfig.host,
                                                  path: '/data.json?node_id=1',
                                                  headers: {
                                                      'Authorization': `Basic ${auth}`
                                                  }
                                              };
                                              http.get(options, res => {
                                                  const chunks = [];
                                                  res.on('data', chunk => {
                                                      chunks.push(chunk);
                                                  });
                                                  res.on('end', () => {
                                                      const buffer = Buffer.concat(chunks);
                                                      const hexString = buffer.toString('hex');
                                                      resolve(hexString);
                                                  });
                                              }).on('error', error => {
                                                  reject(error);
                                              });
                                          });
                                      }
                                      function isState2(strStatePath, strict = true) {
                                          let mSelector;
                                          if (strict) {
                                              mSelector = $(strStatePath);
                                          } else {
                                              mSelector = $(strStatePath + "*");
                                          }
                                          if (mSelector.length > 0) {
                                              return true;
                                          } else {
                                              return false;
                                          }
                                      }
                                      
                                      function isValidUnixTimestampAndConvert(n) {
                                          // Typüberprüfung
                                          if (typeof n !== 'number') {
                                              return false;
                                          }
                                          // Bereichsüberprüfung (optional)
                                          const unixEpoch = 0; // UNIX-Epoch: 1. Januar 1970
                                          const currentTime = Math.floor(Date.now() / 1000);
                                          if (n < unixEpoch || n > currentTime) {
                                              return false;
                                          }
                                          // Granularität (optional)
                                          if (Math.floor(n) !== n) {
                                              return false;
                                          }
                                          // Konvertiere zu deutschem Zeitformat
                                          const date = new Date(n * 1000);
                                          const germanTimeFormat = date.toLocaleString('de-DE');
                                          return germanTimeFormat;
                                      }
                                      
                                      function generateAndSyncSub(id, JElements, sub = false, preset = "") {
                                          //log("Aufruf:" + JElements)
                                          if (!JElements || typeof JElements !== 'object') {
                                              log('Ungültige JElements übergeben!: ' + JElements); //
                                              return;
                                          }
                                          for (var JElement in JElements) {
                                              var AktVal;
                                              if (typeof JElements[JElement] === "object") {
                                                  if (id === "") {
                                                      generateAndSyncSub(JElement, JElements[JElement], true, preset);
                                                  } else {
                                                      generateAndSyncSub(id + "." + JElement, JElements[JElement], true, preset);
                                                  }
                                      
                                                  //generateAndSyncSub(id + "." + JElement, JElements[JElement], true, preset);
                                              } else {
                                                  try {
                                                      if (isState2(preset + "." + id + "." + JElement)) AktVal = getState(preset + "." + id + "." + JElement).val; else AktVal = null
                                                  } catch (e) {
                                                      log("Fehler: " + e); //
                                                  }
                                                  // Überprüfung für den Elementnamen "timestamp"
                                                  if (JElement === "timestamp") {
                                                      const TimeValue = isValidUnixTimestampAndConvert(JElements[JElement])
                                                      if (TimeValue) JElements[JElement] = TimeValue;
                                                  }
                                                  if (AktVal == null) {
                                                      createState(preset + "." + id + "." + JElement, JElements[JElement], false);
                                                      AktVal = JElements[JElement];
                                                  }
                                                  if (AktVal != JElements[JElement]) {
                                                      if (isState2(preset + "." + id + "." + JElement)) {
                                                          setState(preset + "." + id + "." + JElement, JElements[JElement], true);
                                                      }
                                                  }
                                              }
                                          }
                                      }
                                      
                                      const obisCodesWithNames = [
                                          { code: "0100100700ff", name: "Power" },
                                          { code: "0100010800ff", name: "Import_total" },
                                          { code: "0100020800ff", name: "Export_total" },
                                          { code: "0100010800ff_in_k", name: "Import_total_(kWh)" },
                                          { code: "0100020800ff_in_k", name: "Export_total_(kWh)" },
                                          { code: "0100240700ff", name: "Power_L1" },
                                          { code: "0100380700ff", name: "Power_L2" },
                                          { code: "01004c0700ff", name: "Power_L3" },
                                          { code: "0100200700ff", name: "Potential_L1" },
                                          { code: "0100340700ff", name: "Potential_L2" },
                                          { code: "0100480700ff", name: "Potential_L3" },
                                          { code: "01001f0700ff", name: "Current_L1" },
                                          { code: "0100330700ff", name: "Current_L2" },
                                          { code: "0100470700ff", name: "Current_L3" },
                                          { code: "01000e0700ff", name: "Net_frequency" },
                                          { code: "0100510701ff", name: "Potential_Phase_deviation_L1/L2" },
                                          { code: "0100510702ff", name: "Potential_Phase_deviation_L1/L3" },
                                          { code: "0100510704ff", name: "Current/Potential_L1_Phase_deviation" },
                                          { code: "010051070fff", name: "Current/Potential_L2_Phase_deviation" },
                                          { code: "010051071aff", name: "Current/Potential_L3_Phase_deviation" }
                                      ];
                                      function findObisCodeName(code, obisCodesWithNames) {
                                          const found = obisCodesWithNames.find(item => item.code === code);
                                          return found ? found.name : "Unbekannt";
                                      }
                                      
                                      /**
                                       * Static lookup table
                                       */
                                      const dlmsUnits = [
                                          { code: 0x1, unit: "a", quantity: "time", unitName: "year", siDefinition: "52*7*24*60*60 s" },
                                          { code: 0x2, unit: "mo", quantity: "time", unitName: "month", siDefinition: "31*24*60*60 s" },
                                          { code: 0x3, unit: "wk", quantity: "time", unitName: "week", siDefinition: "7*24*60*60 s" },
                                          { code: 0x4, unit: "d", quantity: "time", unitName: "day", siDefinition: "24*60*60 s" },
                                          { code: 0x5, unit: "h", quantity: "time", unitName: "hour", siDefinition: "60*60 s" },
                                          { code: 0x6, unit: "min.", quantity: "time", unitName: "min", siDefinition: "60 s" },
                                          { code: 0x7, unit: "s", quantity: "time", unitName: "second", siDefinition: "s" },
                                          { code: 0x8, unit: "°", quantity: "phase angle", unitName: "degree", siDefinition: "rad*180/π" },
                                          { code: 0x9, unit: "°C", quantity: "temperature", unitName: "degree celsius", siDefinition: "K-273.15" },
                                          { code: 0xA, unit: "currency", quantity: "local currency", unitName: "", siDefinition: "" },
                                          { code: 0xB, unit: "m", quantity: "length", unitName: "metre", siDefinition: "m" },
                                          { code: 0xC, unit: "m/s", quantity: "speed", unitName: "metre per second", siDefinition: "m/s" },
                                          { code: 0xD, unit: "m³", quantity: "volume", unitName: "cubic metre", siDefinition: "m³" },
                                          { code: 0xE, unit: "m³", quantity: "corrected volume", unitName: "cubic metre", siDefinition: "m³" },
                                          { code: 0xF, unit: "m³/h", quantity: "volume flux", unitName: "cubic metre per hour", siDefinition: "m³/(60*60s)" },
                                          { code: 0x10, unit: "m³/h", quantity: "corrected volume flux", unitName: "cubic metre per hour", siDefinition: "m³/(60*60s)" },
                                          { code: 0x11, unit: "m³/d", quantity: "volume flux", unitName: "cubic metre per day", siDefinition: "m³/(24*60*60s)" },
                                          { code: 0x12, unit: "m³/d", quantity: "corrected volume flux", unitName: "cubic metre per day", siDefinition: "m³/(24*60*60s)" },
                                          { code: 0x13, unit: "l", quantity: "volume", unitName: "litre", siDefinition: "10-3 m³" },
                                          { code: 0x14, unit: "kg", quantity: "mass", unitName: "kilogram", siDefinition: "" },
                                          { code: 0x15, unit: "N", quantity: "force", unitName: "newton", siDefinition: "" },
                                          { code: 0x16, unit: "Nm", quantity: "energy", unitName: "newtonmeter", siDefinition: "J = Nm = Ws" },
                                          { code: 0x17, unit: "Pa", quantity: "pressure", unitName: "pascal", siDefinition: "N/m²" },
                                          { code: 0x18, unit: "bar", quantity: "pressure", unitName: "bar", siDefinition: "10⁵ N/m²" },
                                          { code: 0x19, unit: "J", quantity: "energy", unitName: "joule", siDefinition: "J = Nm = Ws" },
                                          { code: 0x1A, unit: "J/h", quantity: "thermal power", unitName: "joule per hour", siDefinition: "J/(60*60s)" },
                                          { code: 0x1B, unit: "W", quantity: "active power", unitName: "watt", siDefinition: "W = J/s" },
                                          { code: 0x1C, unit: "VA", quantity: "apparent power", unitName: "volt-ampere", siDefinition: "" },
                                          { code: 0x1D, unit: "var", quantity: "reactive power", unitName: "var", siDefinition: "" },
                                          { code: 0x1E, unit: "Wh", quantity: "active energy", unitName: "watt-hour", siDefinition: "W*(60*60s)" },
                                          { code: 0x1F, unit: "VAh", quantity: "apparent energy", unitName: "volt-ampere-hour", siDefinition: "VA*(60*60s)" },
                                          { code: 0x20, unit: "varh", quantity: "reactive energy", unitName: "var-hour", siDefinition: "var*(60*60s)" },
                                          { code: 0x21, unit: "A", quantity: "current", unitName: "ampere", siDefinition: "A" },
                                          { code: 0x22, unit: "C", quantity: "electrical charge", unitName: "coulomb", siDefinition: "C = As" },
                                          { code: 0x23, unit: "V", quantity: "voltage", unitName: "volt", siDefinition: "V" },
                                          { code: 0x24, unit: "V/m", quantity: "electric field strength", unitName: "volt per metre", siDefinition: "" },
                                          { code: 0x25, unit: "F", quantity: "capacitance", unitName: "farad", siDefinition: "C/V = As/V" },
                                          { code: 0x26, unit: "Ω", quantity: "resistance", unitName: "ohm", siDefinition: "Ω = V/A" },
                                          { code: 0x27, unit: "Ωm²/m", quantity: "resistivity", unitName: "Ωm", siDefinition: "" },
                                          { code: 0x28, unit: "Wb", quantity: "magnetic flux", unitName: "weber", siDefinition: "Wb = Vs" },
                                          { code: 0x29, unit: "T", quantity: "magnetic flux density", unitName: "tesla", siDefinition: "Wb/m2" },
                                          { code: 0x2A, unit: "A/m", quantity: "magnetic field strength", unitName: "ampere per metre", siDefinition: "A/m" },
                                          { code: 0x2B, unit: "H", quantity: "inductance", unitName: "henry", siDefinition: "H = Wb/A" },
                                          { code: 0x2C, unit: "Hz", quantity: "frequency", unitName: "hertz", siDefinition: "1/s" },
                                          { code: 0x2D, unit: "1/(Wh)", quantity: "R_W", unitName: "Active energy meter constant or pulse value", siDefinition: "" },
                                          { code: 0x2E, unit: "1/(varh)", quantity: "R_B", unitName: "reactive energy meter constant or pulse value", siDefinition: "" },
                                          { code: 0x2F, unit: "1/(VAh)", quantity: "R_S", unitName: "apparent energy meter constant or pulse value", siDefinition: "" },
                                          { code: 0x30, unit: "V²h", quantity: "volt-squared hour", unitName: "volt-squaredhours", siDefinition: "V²(60*60s)" },
                                          { code: 0x31, unit: "A²h", quantity: "ampere-squared hour", unitName: "ampere-squaredhours", siDefinition: "A²(60*60s)" },
                                          { code: 0x32, unit: "kg/s", quantity: "mass flux", unitName: "kilogram per second", siDefinition: "kg/s" },
                                          { code: 0x33, unit: "S, mho", quantity: "conductance siemens", unitName: "siemens", siDefinition: "1/Ω" },
                                          { code: 0x34, unit: "K", quantity: "temperature", unitName: "kelvin", siDefinition: "" },
                                          { code: 0x35, unit: "1/(V²h)", quantity: "", unitName: "Volt-squared hour meter constant or pulse value", siDefinition: "" },
                                          { code: 0x36, unit: "1/(A²h)", quantity: "", unitName: "Ampere-squared hour meter constant or pulse value", siDefinition: "" },
                                          { code: 0x37, unit: "1/m³", quantity: "R_V", unitName: "meter constant or pulse value (volume)", siDefinition: "" },
                                          { code: 0x38, unit: "%", quantity: "percentage", unitName: "%", siDefinition: "" },
                                          { code: 0x39, unit: "Ah", quantity: "ampere-hours", unitName: "ampere-hour", siDefinition: "" },
                                          { code: 0x3C, unit: "Wh/m³", quantity: "energy per volume", unitName: "", siDefinition: "3,6*103 J/m³" },
                                          { code: 0x3D, unit: "J/m³", quantity: "calorific value, wobbe", unitName: "", siDefinition: "" },
                                          { code: 0x3E, unit: "Mol %", quantity: "molar fraction of", unitName: "mole percent", siDefinition: "Basic gas composition unit" },
                                          { code: 0x3F, unit: "Wh/m³", quantity: "energy per volume", unitName: "", siDefinition: "3,6*103 J/m³" },
                                          { code: 0x40, unit: "(reserved)", quantity: "", unitName: "", siDefinition: "" },
                                          { code: 0x41, unit: "(other)", quantity: "", unitName: "", siDefinition: "" },
                                          { code: 0x42, unit: "(unitless)", quantity: "no unit, unitless, count", unitName: "", siDefinition: "" },
                                          { code: 0x0, unit: "", quantity: "", unitName: "", siDefinition: "stop condition for iterator" }
                                      ];
                                      
                                      function findDlmsUnitByCode(decimalCode, dlmsUnits) {
                                          const found = dlmsUnits.find(item => item.code === decimalCode);
                                          return found ? found.unit : "";
                                      }
                                      
                                      function parseSignedHex(hexStr) {
                                          let num = BigInt("0x" + hexStr);
                                          let bitLength = hexStr.length * 4;
                                          if (bitLength <= 32) {
                                              // Behandlung als 32-Bit-Zahl
                                              if (num > 0x7FFFFFFF) {
                                                  num = num - 0x100000000n;
                                              }
                                          } else {
                                              // Behandlung als 64-Bit-Zahl
                                              if (num > 0x7FFFFFFFFFFFFFFFn) {
                                                  num = num - 0x10000000000000000n;
                                              }
                                          }
                                          return Number(num.toString());
                                      }
                                      
                                      function extractAndParseSMLMessages(transfer) {
                                          const messages = transfer.matchAll(/7707(0100[0-9a-fA-F].{5}?ff).{6,14}?([0-9a-fA-F]{2})52([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{4,16})01(?=7)/g);
                                          for (const match of messages) {
                                              let result = {}
                                              if (debug) console.log('Gesamte Übereinstimmung:' + match[0]);
                                              //console.log('Gruppe 1:'+ match[1]); // Der Teil, der dem ersten Klammerausdruck entspricht
                                              //console.log('Gruppe 2:'+ match[2]); // Der Teil, der dem zweiten Klammerausdruck entspricht
                                              //console.log('Gruppe 3:'+ match[3]); // Der Teil, der dem dritten Klammerausdruck entspricht
                                              //console.log('Gruppe 4:'+ match[4]); // Der Teil, der dem dritten Klammerausdruck entspricht
                                              //console.log('Gruppe 5:'+ match[5]); // Der Teil, der dem vierten Klammerausdruck entspricht
                                              
                                              result.name = findObisCodeName(match[1], obisCodesWithNames)
                                              result.value = parseSignedHex(match[5])
                                              const decimalCode = parseInt(match[2], 16);
                                              result.unit = findDlmsUnitByCode(decimalCode, dlmsUnits)
                                              
                                              if (match[3].toLowerCase() == "ff") {
                                                  result.value = result.value / 10
                                              } else if (match[3].toLowerCase() == "fe") {
                                                  result.value = result.value / 100
                                              }
                                              const valId = TibberConfig.statesPrefix + ".SML." + result.name
                                              if (isState2(valId)) {
                                                  setStateAsync(valId, result.value, true)
                                              } else {
                                                  let common = {
                                                      name: result.name,
                                                      type: 'mixed',
                                                      role: 'state',
                                                      unit: result.unit,
                                                      read: true,
                                                      write: true,
                                                  };
                                                  let native = {}
                                                  createState(valId, result.value, false, common, native);
                                              }
                                              if (debug) log(JSON.stringify(result))
                                          }
                                      }
                                      function swapEndianness(hexStr) {
                                          const result = [];
                                          for (let i = 0; i < hexStr.length; i += 2) {
                                              result.unshift(hexStr.substring(i, i + 2));
                                          }
                                          return result.join('');
                                      }
                                      if (typeof TestData == 'undefined') {
                                          getPulseData(TibberConfig.password).then(response => {
                                              if (debug) console.log("Bridge Data: " + response); // 
                                              generateAndSyncSub("Data", JSON.parse(response), false, TibberConfig.statesPrefix)
                                          }).catch(error => {
                                              console.error(error);
                                          });
                                      
                                          //jede x Sekunden
                                          var intervalID = setInterval(function () {
                                              // Daten abrufen und als HEX-String ausgeben
                                              getDataAsHexString(TibberConfig.password).then(hexString => {
                                                  extractAndParseSMLMessages(hexString);
                                                  if (debug) console.log(hexString); // Gibt die Daten als HEX-String aus
                                                  if (isState2(TibberConfig.statesPrefix + ".SMLDataHEX")) {
                                                      setState(TibberConfig.statesPrefix + ".SMLDataHEX", hexString, true)
                                                  } else {
                                                      createState(TibberConfig.statesPrefix + ".SMLDataHEX", hexString, false);
                                                  }
                                              }).catch(error => {
                                                  log('Fehler beim Abrufen der Daten:' + error);
                                              });
                                          }, TibberConfig.interval);
                                      }else{
                                          const parsedMessages = extractAndParseSMLMessages(TestData);
                                      }
                                      
                                      
                                      K Offline
                                      K Offline
                                      karo2204
                                      schrieb am zuletzt editiert von
                                      #859

                                      @waly_de ich habe alles hinbekommen, doch leider wird mir kein Feld "Power" angezeigt, nur "Power_L1", "Power_L2" und "Power_L3". Was nehm ich da jetzt?

                                      Kannst Du irgendwie noch die PriceLevel Abfrage in Dein Tibber Script einbauen, damit man das nicht über die Instanz "Tibber Link" abrufen muss. Ich bekomme da immer Fehler....Screenshot 2023-12-24 at 15.38.50.png

                                      ioBroker
                                      Tibber
                                      Ecoflow Powerstream & Delta Max 2000

                                      D K 2 Antworten Letzte Antwort
                                      0
                                      • K karo2204

                                        @waly_de ich habe alles hinbekommen, doch leider wird mir kein Feld "Power" angezeigt, nur "Power_L1", "Power_L2" und "Power_L3". Was nehm ich da jetzt?

                                        Kannst Du irgendwie noch die PriceLevel Abfrage in Dein Tibber Script einbauen, damit man das nicht über die Instanz "Tibber Link" abrufen muss. Ich bekomme da immer Fehler....Screenshot 2023-12-24 at 15.38.50.png

                                        D Offline
                                        D Offline
                                        Der Tom
                                        schrieb am zuletzt editiert von
                                        #860

                                        Hallo zusammen,

                                        frohe Weihnachten :-)

                                        Ich habe das Script seit einiger Zeit am Laufen - vielen Dank an alle, die hier an der Entwicklung beteiligt waren.

                                        Ich habe ein River 2 Pro und würde gern die Watt-Zahl mit der AC geladen wird einstellen.
                                        Da ich kein Delta 2 habe, kommt:
                                        0_userdata.0.ecoflow.app_17XXXXXXXXXXXXXXXXX_R6XXXXXXXXXXXXXX_thing_property_set.writeables.acChgCfg_D2
                                        wohl nicht in Frage (funktioniert auch nicht - bereits getestet)

                                        Meiner Meinung nach, wäre der Parameter:
                                        0_userdata.0.ecoflow.app_device_property_R6XXXXXXXXXXXXXX.data.params.mppt.cfgChgWatts
                                        korrekt oder?
                                        Leider auch ohne Erfolg - auch hier ändert sich nichts.

                                        Im Script gibt es keine Auswahl vom River 2 Pro, daher habe ich auf NA gestellt.
                                        Wie bekomme ich die AC Ladeleistung geregelt?

                                        Danke fürs helfen.

                                        Grüße
                                        Der Tom

                                        F W 2 Antworten Letzte Antwort
                                        0
                                        • K karo2204

                                          @waly_de ich habe alles hinbekommen, doch leider wird mir kein Feld "Power" angezeigt, nur "Power_L1", "Power_L2" und "Power_L3". Was nehm ich da jetzt?

                                          Kannst Du irgendwie noch die PriceLevel Abfrage in Dein Tibber Script einbauen, damit man das nicht über die Instanz "Tibber Link" abrufen muss. Ich bekomme da immer Fehler....Screenshot 2023-12-24 at 15.38.50.png

                                          K Offline
                                          K Offline
                                          karo2204
                                          schrieb am zuletzt editiert von karo2204
                                          #861

                                          @karo2204 Jetzt ist Power plötzlich in den Objekten drin gewesen... Aber funktionieren tut es trotzdem noch nicht.

                                          ioBroker
                                          Tibber
                                          Ecoflow Powerstream & Delta Max 2000

                                          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

                                          388

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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