Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Zendure Solarflow

NEWS

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

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

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

Test Adapter Zendure Solarflow

Scheduled Pinned Locked Moved Tester
2.0k Posts 97 Posters 885.1k Views 92 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • nograxN nograx

    @lesiflo sagte in Test Adapter Zendure Solarflow:

    @nograx: Wenn der Flash auch mit setDeviceAutomationInOutLimit weiterhin genauso beschrieben wird wie mit setInputLimit/setOutputLimit wo ist da der Vorteil? Mit setDeviceAutomationInOutLimit hat sich einer der beiden Hyper 2 x aufgehängt. Auf was soll smartMode gesetzt werden? Ich habe die ganze Diskussion hier in letzter Zeit nicht weiter verfolgt und frage daher nochmal nach.

    Wie gesagt mein Hyper läuft damit seit mindestens 2 Monaten ohne Probleme. Aussetzer habe ich keine. Bist du in der Cloud unterwegs oder lokal?

    SmartMode gibt es beim Hyper offensichtlich nicht.

    Es gibt weder auf GitHub noch hier viele Meldungen zu dem Thema, das ist also kein generelles Problem. Ein kurzer Blick in die GitHub Issues bei der HA Integration zeigt da auch keine generellen Probleme dazu.

    Der Adapter ist ja Open Source, wenn es also Handlungsbedarf gibt etwas anzupassen oder zu verbessern kann man gerne daran mitarbeiten.

    L Offline
    L Offline
    lesiflo
    Most Active
    wrote on last edited by
    #1802

    @nograx Bin in der Cloud und hab's jetzt wieder auf setDeviceAutomationInOutLimit umgestellt. Mal schauen was wird.

    nograxN 1 Reply Last reply
    0
    • L lesiflo

      @nograx Bin in der Cloud und hab's jetzt wieder auf setDeviceAutomationInOutLimit umgestellt. Mal schauen was wird.

      nograxN Offline
      nograxN Offline
      nograx
      Developer
      wrote on last edited by
      #1803

      @lesiflo sagte in Test Adapter Zendure Solarflow:

      @nograx Bin in der Cloud und hab's jetzt wieder auf setDeviceAutomationInOutLimit umgestellt. Mal schauen was wird.

      Das ist eventl. dann der Unterschied. Mein Hyper läuft lokal.

      M Bernd1967B 2 Replies Last reply
      0
      • nograxN nograx

        @lesiflo sagte in Test Adapter Zendure Solarflow:

        @nograx Bin in der Cloud und hab's jetzt wieder auf setDeviceAutomationInOutLimit umgestellt. Mal schauen was wird.

        Das ist eventl. dann der Unterschied. Mein Hyper läuft lokal.

        M Online
        M Online
        Murphy 0
        wrote on last edited by
        #1804

        @nograx
        Mein Hyper läuft auch lokal, keine Probleme mit dem Adapter.
        Ich benutze setDeviceAutomationInOutLimit.
        Mqtt Abbrüche zum Mosquitto auch keine mehr seit ich die täglichen Schreibvorgänge auf ca. 90 bis 150 begrenzt habe.

        1 Reply Last reply
        0
        • L lesiflo

          @rene55 Moin, bei mir läuft 2.0.1 und ich schalte auch über setInputLimit/setOutputLimit. Klappt ohne Probleme. Du musst auch weiterhin den acMode setzen.

          @nograx: Wenn der Flash auch mit setDeviceAutomationInOutLimit weiterhin genauso beschrieben wird wie mit setInputLimit/setOutputLimit wo ist da der Vorteil? Mit setDeviceAutomationInOutLimit hat sich einer der beiden Hyper 2 x aufgehängt. Auf was soll smartMode gesetzt werden? Ich habe die ganze Diskussion hier in letzter Zeit nicht weiter verfolgt und frage daher nochmal nach.

          Rene55R Offline
          Rene55R Offline
          Rene55
          wrote on last edited by
          #1805

          @lesiflo der acMode steht bei mir (permanent) auf "AC output mode". Auf was auch sonst (HUB1200)? Das mit dem 'nicht reagieren' auf 'setOutputLimit' werde ich dieser Tage nochmal testen. Vielleicht war das nur ein "Hänger" zum MQTT und somit ne einmalige Sache und kein Bug:

          Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
          ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
          Wetterstation: Froggit WH3000SE V1.6.6

          maxclaudiM 1 Reply Last reply
          0
          • Rene55R Rene55

            @lesiflo der acMode steht bei mir (permanent) auf "AC output mode". Auf was auch sonst (HUB1200)? Das mit dem 'nicht reagieren' auf 'setOutputLimit' werde ich dieser Tage nochmal testen. Vielleicht war das nur ein "Hänger" zum MQTT und somit ne einmalige Sache und kein Bug:

            maxclaudiM Offline
            maxclaudiM Offline
            maxclaudi
            wrote on last edited by
            #1806

            @rene55
            autoModel:0 muss auch sein.

            Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

            Rene55R 1 Reply Last reply
            0
            • nograxN nograx

              @lesiflo sagte in Test Adapter Zendure Solarflow:

              @nograx Bin in der Cloud und hab's jetzt wieder auf setDeviceAutomationInOutLimit umgestellt. Mal schauen was wird.

              Das ist eventl. dann der Unterschied. Mein Hyper läuft lokal.

              Bernd1967B Offline
              Bernd1967B Offline
              Bernd1967
              wrote on last edited by Bernd1967
              #1807

              @nograx
              Ich hab zwar seit einer Woche Ruhe mit dem "Hängen" bleiben meiner lokal angebundenen Hyper, aber das ist wohl nur Zufall.
              Kannst Du mir sagen wofür die folgenden Parameter sind beim Laden der Speicher mit "setDeviceAutomationInOutLimit" ?

               autoModelValue: {
                            upTime: 0,
                            pullTime: 1800,
              

              Die Kollegen von HA haben das am 22.7. bereits wieder raus genommen beim Hyper.

              nograxN 1 Reply Last reply
              0
              • L Offline
                L Offline
                lesiflo
                Most Active
                wrote on last edited by
                #1808

                Moin,
                heute Nacht ist wieder einer der beiden Hyper ausgestiegen, diesmal aber der andere. Von ca 23:00 bis 02:00 meinte er seinen Dienst einstellen zu müssen. Er hat sich aber selbst wieder gefangen, ein Hardware Reset war nicht nötig. Ich werde aber erstmal auf "setDeviceAutomationInOutLimit" bleiben und weiter beobachten. Scheint wohl doch an der Cloud zu liegen.

                Ausschnitt der Entladekurve:
                60e148f0-6f16-4ae9-b4b8-17d0c406e5a6-image.png

                1 Reply Last reply
                0
                • Bernd1967B Bernd1967

                  @nograx
                  Ich hab zwar seit einer Woche Ruhe mit dem "Hängen" bleiben meiner lokal angebundenen Hyper, aber das ist wohl nur Zufall.
                  Kannst Du mir sagen wofür die folgenden Parameter sind beim Laden der Speicher mit "setDeviceAutomationInOutLimit" ?

                   autoModelValue: {
                                upTime: 0,
                                pullTime: 1800,
                  

                  Die Kollegen von HA haben das am 22.7. bereits wieder raus genommen beim Hyper.

                  nograxN Offline
                  nograxN Offline
                  nograx
                  Developer
                  wrote on last edited by
                  #1809

                  @bernd1967 sagte in Test Adapter Zendure Solarflow:

                  @nograx
                  Ich hab zwar seit einer Woche Ruhe mit dem "Hängen" bleiben meiner lokal angebundenen Hyper, aber das ist wohl nur Zufall.
                  Kannst Du mir sagen wofür die folgenden Parameter sind beim Laden der Speicher mit "setDeviceAutomationInOutLimit" ?

                   autoModelValue: {
                                upTime: 0,
                                pullTime: 1800,
                  

                  Die Kollegen von HA haben das am 22.7. bereits wieder raus genommen beim Hyper.

                  Danke für den Hinweis. Tatsächlich habe ich hier vor einigen Tagen noch mal die Methoden der HA Integration übernommen, lokal war das mit pullTime und upTime schon rausgeflogen. Werde da gleich mal ne Beta raus basteln.

                  1 Reply Last reply
                  0
                  • maxclaudiM maxclaudi

                    @rene55
                    autoModel:0 muss auch sein.

                    Rene55R Offline
                    Rene55R Offline
                    Rene55
                    wrote on last edited by
                    #1810

                    @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                    Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                    ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                    Wetterstation: Froggit WH3000SE V1.6.6

                    nograxN maxclaudiM 2 Replies Last reply
                    0
                    • Rene55R Rene55

                      @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                      nograxN Offline
                      nograxN Offline
                      nograx
                      Developer
                      wrote on last edited by
                      #1811

                      @rene55 sagte in Test Adapter Zendure Solarflow:

                      @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                      Das macht die Funktion setDeviceAutomationInOutLimit, das ist normal.

                      maxclaudiM 1 Reply Last reply
                      0
                      • Rene55R Rene55

                        @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                        maxclaudiM Offline
                        maxclaudiM Offline
                        maxclaudi
                        wrote on last edited by maxclaudi
                        #1812

                        @rene55
                        oder ausführlicher erklärt:

                        setDeviceAutomationInOutLimit schaltet automatisch in diesen Mode, da die Wertübergabe nur darin funktioniert.
                        Nach dem ersten Aufruf bleibt das Gerät im SmartMatching-Mode.

                        Falls die Firmware keine Commit-Prüfung implementiert, könnte jeder Aufruf zwei Flash-Writes auslösen:
                        einmal für den eigentlichen Wert und einmal für den Mode.
                        In der Praxis ist dies jedoch sehr unwahrscheinlich, da Zendure üblicherweise eine Änderungsprüfung nutzt und damit unnötige Commits vermeidet.

                        Wenn man einen Wert im SmartMatching-Mode gesetzt hat und danach wieder eine Funktion außerhalb dieses Modes nutzen möchte, muss der Mode explizit manuell zurückgesetzt werden (z. B. auf Mode:0 oder einen anderen Automatikmodus).

                        Modewechsel => Flash.


                        @Bernd1967

                        Kannst Du mir sagen wofür die folgenden Parameter sind beim Laden der Speicher mit "setDeviceAutomationInOutLimit" ?

                        Die Parameter upTime und pullTime im Original SmartMatching-Mode legen die Zeitgültigkeit des übergebenen Richtwerts fest:
                        upTime = Startoffset in Sekunden (0 == sofort)
                        pullTime = Dauer in Sekunden (1800 == 30min)

                        Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                        1 Reply Last reply
                        0
                        • nograxN nograx

                          @rene55 sagte in Test Adapter Zendure Solarflow:

                          @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                          Das macht die Funktion setDeviceAutomationInOutLimit, das ist normal.

                          maxclaudiM Offline
                          maxclaudiM Offline
                          maxclaudi
                          wrote on last edited by maxclaudi
                          #1813

                          @nograx sagte in Test Adapter Zendure Solarflow:

                          @rene55 sagte in Test Adapter Zendure Solarflow:

                          @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                          Das macht die Funktion setDeviceAutomationInOutLimit, das ist normal.

                          solar-flow-adapter:
                          Am Ende wird immer ein deviceAutomation-Payload gebaut.
                          In allen Pfaden, wo setDeviceAutomationInOutLimit wirklich ein _arguments befüllt, wird hart autoModel: 8 gesetzt.
                          Im gesamten Code gibt es keine Stelle, wo der aktuelle autoModel-Status vom Gerät abgefragt oder berücksichtigt wird, bevor der Payload gesendet wird.

                          Beispiel (Hyper, Output):

                          _arguments = [
                            {
                              autoModelProgram: 2,
                              autoModelValue: { ... },
                              msgType: 1,
                              autoModel: 8,   // <--- fest!
                            },
                          ];
                          
                          

                          Bei jedem Aufruf von setDeviceAutomationInOutLimit wird autoModel:8 stumpf in die Nachricht gepackt und gesendet.

                          Ob das tatsächlich in zwei Flash-Schreibvorgängen endet (Limit + Mode), hängt von der Firmware-Implementierung ab. Wahrscheinlich verhindert Zendure unnötige Commits, sodass nur dann geschrieben wird, wenn sich was ändert.

                          Quelle solarflow-adapter: Auszug mqttService.ts

                          export const setDeviceAutomationInOutLimit = async (
                            adapter: ZendureSolarflow,
                            productKey: string,
                            deviceKey: string,
                            limit: number // can be negative, negative will trigger charging mode
                          ): Promise<void> => {
                            if (adapter.mqttClient && productKey && deviceKey) {
                              adapter.log.debug(
                                `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
                              );
                          
                              if (limit) {
                                limit = Math.round(limit);
                              } else {
                                limit = 0;
                              }
                          
                              if (adapter.config.useLowVoltageBlock) {
                                const lowVoltageBlockState = await adapter.getStateAsync(
                                  productKey + "." + deviceKey + ".control.lowVoltageBlock"
                                );
                                if (
                                  lowVoltageBlockState &&
                                  lowVoltageBlockState.val &&
                                  lowVoltageBlockState.val == true &&
                                  limit > 0
                                ) {
                                  limit = 0;
                                }
                          
                                const fullChargeNeeded = await adapter.getStateAsync(
                                  productKey + "." + deviceKey + ".control.fullChargeNeeded"
                                );
                          
                                if (
                                  fullChargeNeeded &&
                                  fullChargeNeeded.val &&
                                  fullChargeNeeded.val == true &&
                                  limit > 0
                                ) {
                                  limit = 0;
                                }
                              }
                          
                              if (limit < 0) {
                                // Get input limit, make number positive and the new value negative
                                limit = -getMinAndMaxInputLimitForProductKey(productKey, -limit);
                              } else {
                                limit = getMinAndMaxOutputLimitForProductKey(productKey, limit);
                              }
                          
                              const topic = `iot/${productKey}/${deviceKey}/function/invoke`;
                          
                              adapter.msgCounter += 1;
                          
                              const timestamp = new Date();
                              timestamp.setMilliseconds(0);
                          
                              // HUB1200 & HUB 2000
                              let _arguments: IDeviceAutomationPayload[] = [];
                          
                              const productName = getProductNameFromProductKey(productKey);
                          
                              if (
                                productName.toLowerCase().includes("2400 ac") ||
                                productName.toLowerCase().includes("solarflow 800")
                              ) {
                                adapter.log.debug(
                                  `[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as device '${productName}' detected!`
                                );
                                // HEMS Variante
                                const hemsEP = {
                                  arguments: {
                                    outputPower: limit > 0 ? limit : 0,
                                    chargeState: limit > 0 ? 0 : 1,
                                    chargePower: limit > 0 ? 0 : -limit,
                                    mode: 9,
                                  },
                                  function: "hemsEP",
                                  messageId: adapter.msgCounter,
                                  deviceKey: deviceKey,
                                  timestamp: timestamp.getTime() / 1000,
                                };
                          
                                adapter.mqttClient?.publish(topic, JSON.stringify(hemsEP));
                                return;
                              } else if (productName.toLowerCase().includes("hyper")) {
                                if (limit < 0) {
                                  adapter.log.debug(
                                    `[setDeviceAutomationInOutLimit] Using CHARGE variant of HYPER device automation, as device '${productName}' detected and limit is negative!`
                                  );
                                  // Input / Charge
                                  _arguments = [
                                    {
                                      autoModelProgram: 1,
                                      autoModelValue: {
                                        upTime: 0,
                                        chargingType: 1,
                                        pullTime: 1800,
                                        price: 2,
                                        chargingPower: -limit,
                                        prices: [
                                          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                          1, 1, 1,
                                        ],
                                        outPower: 0,
                                        freq: 0,
                                      },
                                      msgType: 1,
                                      autoModel: 8,
                                    },
                                  ];
                                } else {
                                  adapter.log.debug(
                                    `[setDeviceAutomationInOutLimit] Using FEED IN variant of HYPER device automation, as device '${productName}' detected and limit is positive!`
                                  );
                                  // Output
                                  _arguments = [
                                    {
                                      autoModelProgram: 2,
                                      autoModelValue: {
                                        chargingType: 0,
                                        chargingPower: 0,
                                        freq: 0,
                                        outPower: limit,
                                      },
                                      msgType: 1,
                                      autoModel: 8,
                                    },
                                  ];
                                }
                              } else {
                                if (limit < 0) {
                                  adapter.log.warn(
                                    `[setDeviceAutomationInOutLimit] Using CHARGE variant of Hub device automation is currently not working! You have to manualy switch acMode and inputLimit!`
                                  );
                                  /* // Input / Charge
                                  _arguments = [
                                    {
                                      autoModelProgram: 2,
                                      autoModelValue: {
                                        upTime: 0,
                                        chargingType: 1,
                                        pullTime: 1800,
                                        price: 2,
                                        chargingPower: -limit,
                                        prices: [
                                          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                          1, 1, 1,
                                        ],
                                        outPower: 0,
                                        freq: 0,
                                      },
                                      msgType: 1,
                                      autoModel: 8,
                                    },
                                  ]; */
                                } else {
                                  // Output
                                  adapter.log.debug(
                                    `[setDeviceAutomationInOutLimit] Using FEED IN variant of Hub device automation, as device '${productName}' detected and limit is positive!`
                                  );
                                  _arguments = [
                                    {
                                      autoModelProgram: 2,
                                      autoModelValue: limit,
                                      msgType: 1,
                                      autoModel: 8,
                                    },
                                  ];
                                }
                              }
                          
                              const deviceAutomation = {
                                arguments: _arguments,
                                function: "deviceAutomation",
                                messageId: adapter.msgCounter,
                                deviceKey: deviceKey,
                                timestamp: timestamp.getTime() / 1000,
                              };
                              adapter.mqttClient?.publish(topic, JSON.stringify(deviceAutomation));
                            }
                          };
                          

                          man könnte auch den code erweitern, dass zuerst der aktuelle autoModel-State aus properties.autoModel gelesen und nur gesetzt wird, wenn er ≠ 8 ist?

                          Dann würde man sicherstellen, dass das Gerät nicht unnötig mit Mode:8 überschrieben wird.

                          z. B. zentrale Logik, die egal ob Hub, Hyper oder HEMS immer zuerst prüft, ob das Gerät schon im richtigen Mode ist. Nur wenn der autoModel ≠ 8 ist, wird autoModel: 8 in den Payload gepackt. Damit würden unnötige Doppel-Writes gespart.

                          Beispiel/Vorlage: vereinheitlichte Version von setDeviceAutomationInOutLimit:

                          export const setDeviceAutomationInOutLimit = async (
                            adapter: ZendureSolarflow,
                            productKey: string,
                            deviceKey: string,
                            limit: number
                          ): Promise<void> => {
                            if (!adapter.mqttClient || !productKey || !deviceKey) return;
                          
                            adapter.log.debug(
                              `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
                            );
                          
                            // normalize limit
                            limit = limit ? Math.round(limit) : 0;
                          
                            // LowVoltageBlock / FullChargeNeeded prüfen
                            if (adapter.config.useLowVoltageBlock) {
                              const lowVoltageBlockState = await adapter.getStateAsync(
                                `${productKey}.${deviceKey}.control.lowVoltageBlock`
                              );
                              if (lowVoltageBlockState?.val === true && limit > 0) limit = 0;
                          
                              const fullChargeNeeded = await adapter.getStateAsync(
                                `${productKey}.${deviceKey}.control.fullChargeNeeded`
                              );
                              if (fullChargeNeeded?.val === true && limit > 0) limit = 0;
                            }
                          
                            // Grenzen für Input/Output anwenden
                            if (limit < 0) {
                              limit = -getMinAndMaxInputLimitForProductKey(productKey, -limit);
                            } else {
                              limit = getMinAndMaxOutputLimitForProductKey(productKey, limit);
                            }
                          
                            const topic = `iot/${productKey}/${deviceKey}/function/invoke`;
                            adapter.msgCounter += 1;
                            const timestamp = Math.floor(Date.now() / 1000);
                          
                            // --- geändert/neu: aktuellen Mode abfragen ---
                            const currentModeState = await adapter.getStateAsync(
                              `${productKey}.${deviceKey}.properties.autoModel`
                            );
                            const currentMode = currentModeState?.val;
                            const targetMode = 8;
                            const includeMode = currentMode !== targetMode;
                          
                            const productName = getProductNameFromProductKey(productKey).toLowerCase();
                          
                            let payload: any;
                          
                            if (productName.includes("2400 ac") || productName.includes("solarflow 800")) {
                              // HEMS Variante, von HEMS habe ich keine Erfahrung/Ahnung! 
                              payload = {
                                arguments: {
                                  outputPower: limit > 0 ? limit : 0,
                                  chargeState: limit > 0 ? 0 : 1,
                                  chargePower: limit > 0 ? 0 : -limit,
                                  mode: 9,
                                },
                                function: "hemsEP",
                                messageId: adapter.msgCounter,
                                deviceKey,
                                timestamp,
                              };
                            } else if (productName.includes("hyper")) {
                              // Hyper Variante
                              if (limit < 0) {
                                payload = {
                                  arguments: [
                                    {
                                      autoModelProgram: 1,
                                      autoModelValue: {
                                        upTime: 0,
                                        chargingType: 1,
                                        pullTime: 1800,
                                        price: 2,
                                        chargingPower: -limit,
                                        prices: new Array(24).fill(1),
                                        outPower: 0,
                                        freq: 0,
                                      },
                                      msgType: 1,
                                      ...(includeMode ? { autoModel: targetMode } : {}),
                                    },
                                  ],
                                  function: "deviceAutomation",
                                  messageId: adapter.msgCounter,
                                  deviceKey,
                                  timestamp,
                                };
                              } else {
                                payload = {
                                  arguments: [
                                    {
                                      autoModelProgram: 2,
                                      autoModelValue: {
                                        chargingType: 0,
                                        chargingPower: 0,
                                        freq: 0,
                                        outPower: limit,
                                      },
                                      msgType: 1,
                                      ...(includeMode ? { autoModel: targetMode } : {}),
                                    },
                                  ],
                                  function: "deviceAutomation",
                                  messageId: adapter.msgCounter,
                                  deviceKey,
                                  timestamp,
                                };
                              }
                            } else {
                              // Hub Variante
                              if (limit < 0) {
                                adapter.log.warn(
                                  `[setDeviceAutomationInOutLimit] CHARGE variant for Hub not supported – use acMode + inputLimit manually!`
                                );
                                return;
                              } else {
                                payload = {
                                  arguments: [
                                    {
                                      autoModelProgram: 2,
                                      autoModelValue: limit,
                                      msgType: 1,
                                      ...(includeMode ? { autoModel: targetMode } : {}),
                                    },
                                  ],
                                  function: "deviceAutomation",
                                  messageId: adapter.msgCounter,
                                  deviceKey,
                                  timestamp,
                                };
                              }
                            }
                          
                            adapter.mqttClient?.publish(topic, JSON.stringify(payload));
                          };
                          

                          HINWEIS: das war nur eine Idee / Vorlage. Nicht auf Fehler überprüft und ob es funktioniert, weiß ich auch nicht.


                          @nograx sagte in Test Adapter Zendure Solarflow:

                          Die setDeviceAutomationLimit Methode wurde ja auf deinen Hinweis hin implementiert, so wie die Integration von HA es macht (wo sollen hier die Unterschiede sein?).

                          Mein Hinweis war als Link auf eine der Quellen gedacht.
                          Was man daraus macht, ist eine andere Sache.
                          Auf einen Unterschied habe ich bereits gleich bei Punkt 1 meines Posts hingewiesen.
                          Du schaltest hart. HA macht das vom packState abhängig. Bei HA ist packState:0 nicht nur stumpf packState:0. Es werden auch andere parameter berücksichtigt, was dazu führt dass selbst wenn packState nicht 0 sein könnte, es als packSate:0 gewertet wird, wenn.... usw.

                          edit:
                          So viel ich mich erinnere, wird dann in Abhängigkeit davon vor dem sofortigen Wechsel zwischen Entladen und Laden (oder Laden auf Entladen) erst in Mode:0 gewechselt und nicht einfach direkt umgeschaltet.
                          Quasi wie ein 3 Stufenschalter Laden->0 -> Entladen.
                          Entladen -> 0 -> Laden.
                          Beim solar-flow-adapter findet das nicht statt.
                          Laden-> Entladen / Entladen-> Laden.
                          Korrigiert mich, wenn ich das nicht richtig verstanden habe.
                          Beschäftige mich nicht mehr weiter damit.
                          edit Ende

                          Ich weiß gar nicht warum ich so bin und das nicht lassen kann.
                          Das Thema ist doch für mich abgeschlossen?
                          Richtig, das muss jetzt ein Ende haben, nachdem ich zu viel Zeit damit verbracht habe.
                          Vielleicht waren ja ein paar Ideen/Erkenntnise/Hinweise/Beobachtungen usw. für den einen oder anderen hilfreich.

                          Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                          nograxN 1 Reply Last reply
                          0
                          • maxclaudiM maxclaudi

                            @nograx sagte in Test Adapter Zendure Solarflow:

                            @rene55 sagte in Test Adapter Zendure Solarflow:

                            @maxclaudi oha! Bei mir steht autoModel auf "Smart Matching Mode". Eigentlich schon immer, weiß nicht seit wann?!

                            Das macht die Funktion setDeviceAutomationInOutLimit, das ist normal.

                            solar-flow-adapter:
                            Am Ende wird immer ein deviceAutomation-Payload gebaut.
                            In allen Pfaden, wo setDeviceAutomationInOutLimit wirklich ein _arguments befüllt, wird hart autoModel: 8 gesetzt.
                            Im gesamten Code gibt es keine Stelle, wo der aktuelle autoModel-Status vom Gerät abgefragt oder berücksichtigt wird, bevor der Payload gesendet wird.

                            Beispiel (Hyper, Output):

                            _arguments = [
                              {
                                autoModelProgram: 2,
                                autoModelValue: { ... },
                                msgType: 1,
                                autoModel: 8,   // <--- fest!
                              },
                            ];
                            
                            

                            Bei jedem Aufruf von setDeviceAutomationInOutLimit wird autoModel:8 stumpf in die Nachricht gepackt und gesendet.

                            Ob das tatsächlich in zwei Flash-Schreibvorgängen endet (Limit + Mode), hängt von der Firmware-Implementierung ab. Wahrscheinlich verhindert Zendure unnötige Commits, sodass nur dann geschrieben wird, wenn sich was ändert.

                            Quelle solarflow-adapter: Auszug mqttService.ts

                            export const setDeviceAutomationInOutLimit = async (
                              adapter: ZendureSolarflow,
                              productKey: string,
                              deviceKey: string,
                              limit: number // can be negative, negative will trigger charging mode
                            ): Promise<void> => {
                              if (adapter.mqttClient && productKey && deviceKey) {
                                adapter.log.debug(
                                  `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
                                );
                            
                                if (limit) {
                                  limit = Math.round(limit);
                                } else {
                                  limit = 0;
                                }
                            
                                if (adapter.config.useLowVoltageBlock) {
                                  const lowVoltageBlockState = await adapter.getStateAsync(
                                    productKey + "." + deviceKey + ".control.lowVoltageBlock"
                                  );
                                  if (
                                    lowVoltageBlockState &&
                                    lowVoltageBlockState.val &&
                                    lowVoltageBlockState.val == true &&
                                    limit > 0
                                  ) {
                                    limit = 0;
                                  }
                            
                                  const fullChargeNeeded = await adapter.getStateAsync(
                                    productKey + "." + deviceKey + ".control.fullChargeNeeded"
                                  );
                            
                                  if (
                                    fullChargeNeeded &&
                                    fullChargeNeeded.val &&
                                    fullChargeNeeded.val == true &&
                                    limit > 0
                                  ) {
                                    limit = 0;
                                  }
                                }
                            
                                if (limit < 0) {
                                  // Get input limit, make number positive and the new value negative
                                  limit = -getMinAndMaxInputLimitForProductKey(productKey, -limit);
                                } else {
                                  limit = getMinAndMaxOutputLimitForProductKey(productKey, limit);
                                }
                            
                                const topic = `iot/${productKey}/${deviceKey}/function/invoke`;
                            
                                adapter.msgCounter += 1;
                            
                                const timestamp = new Date();
                                timestamp.setMilliseconds(0);
                            
                                // HUB1200 & HUB 2000
                                let _arguments: IDeviceAutomationPayload[] = [];
                            
                                const productName = getProductNameFromProductKey(productKey);
                            
                                if (
                                  productName.toLowerCase().includes("2400 ac") ||
                                  productName.toLowerCase().includes("solarflow 800")
                                ) {
                                  adapter.log.debug(
                                    `[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as device '${productName}' detected!`
                                  );
                                  // HEMS Variante
                                  const hemsEP = {
                                    arguments: {
                                      outputPower: limit > 0 ? limit : 0,
                                      chargeState: limit > 0 ? 0 : 1,
                                      chargePower: limit > 0 ? 0 : -limit,
                                      mode: 9,
                                    },
                                    function: "hemsEP",
                                    messageId: adapter.msgCounter,
                                    deviceKey: deviceKey,
                                    timestamp: timestamp.getTime() / 1000,
                                  };
                            
                                  adapter.mqttClient?.publish(topic, JSON.stringify(hemsEP));
                                  return;
                                } else if (productName.toLowerCase().includes("hyper")) {
                                  if (limit < 0) {
                                    adapter.log.debug(
                                      `[setDeviceAutomationInOutLimit] Using CHARGE variant of HYPER device automation, as device '${productName}' detected and limit is negative!`
                                    );
                                    // Input / Charge
                                    _arguments = [
                                      {
                                        autoModelProgram: 1,
                                        autoModelValue: {
                                          upTime: 0,
                                          chargingType: 1,
                                          pullTime: 1800,
                                          price: 2,
                                          chargingPower: -limit,
                                          prices: [
                                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                            1, 1, 1,
                                          ],
                                          outPower: 0,
                                          freq: 0,
                                        },
                                        msgType: 1,
                                        autoModel: 8,
                                      },
                                    ];
                                  } else {
                                    adapter.log.debug(
                                      `[setDeviceAutomationInOutLimit] Using FEED IN variant of HYPER device automation, as device '${productName}' detected and limit is positive!`
                                    );
                                    // Output
                                    _arguments = [
                                      {
                                        autoModelProgram: 2,
                                        autoModelValue: {
                                          chargingType: 0,
                                          chargingPower: 0,
                                          freq: 0,
                                          outPower: limit,
                                        },
                                        msgType: 1,
                                        autoModel: 8,
                                      },
                                    ];
                                  }
                                } else {
                                  if (limit < 0) {
                                    adapter.log.warn(
                                      `[setDeviceAutomationInOutLimit] Using CHARGE variant of Hub device automation is currently not working! You have to manualy switch acMode and inputLimit!`
                                    );
                                    /* // Input / Charge
                                    _arguments = [
                                      {
                                        autoModelProgram: 2,
                                        autoModelValue: {
                                          upTime: 0,
                                          chargingType: 1,
                                          pullTime: 1800,
                                          price: 2,
                                          chargingPower: -limit,
                                          prices: [
                                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                            1, 1, 1,
                                          ],
                                          outPower: 0,
                                          freq: 0,
                                        },
                                        msgType: 1,
                                        autoModel: 8,
                                      },
                                    ]; */
                                  } else {
                                    // Output
                                    adapter.log.debug(
                                      `[setDeviceAutomationInOutLimit] Using FEED IN variant of Hub device automation, as device '${productName}' detected and limit is positive!`
                                    );
                                    _arguments = [
                                      {
                                        autoModelProgram: 2,
                                        autoModelValue: limit,
                                        msgType: 1,
                                        autoModel: 8,
                                      },
                                    ];
                                  }
                                }
                            
                                const deviceAutomation = {
                                  arguments: _arguments,
                                  function: "deviceAutomation",
                                  messageId: adapter.msgCounter,
                                  deviceKey: deviceKey,
                                  timestamp: timestamp.getTime() / 1000,
                                };
                                adapter.mqttClient?.publish(topic, JSON.stringify(deviceAutomation));
                              }
                            };
                            

                            man könnte auch den code erweitern, dass zuerst der aktuelle autoModel-State aus properties.autoModel gelesen und nur gesetzt wird, wenn er ≠ 8 ist?

                            Dann würde man sicherstellen, dass das Gerät nicht unnötig mit Mode:8 überschrieben wird.

                            z. B. zentrale Logik, die egal ob Hub, Hyper oder HEMS immer zuerst prüft, ob das Gerät schon im richtigen Mode ist. Nur wenn der autoModel ≠ 8 ist, wird autoModel: 8 in den Payload gepackt. Damit würden unnötige Doppel-Writes gespart.

                            Beispiel/Vorlage: vereinheitlichte Version von setDeviceAutomationInOutLimit:

                            export const setDeviceAutomationInOutLimit = async (
                              adapter: ZendureSolarflow,
                              productKey: string,
                              deviceKey: string,
                              limit: number
                            ): Promise<void> => {
                              if (!adapter.mqttClient || !productKey || !deviceKey) return;
                            
                              adapter.log.debug(
                                `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
                              );
                            
                              // normalize limit
                              limit = limit ? Math.round(limit) : 0;
                            
                              // LowVoltageBlock / FullChargeNeeded prüfen
                              if (adapter.config.useLowVoltageBlock) {
                                const lowVoltageBlockState = await adapter.getStateAsync(
                                  `${productKey}.${deviceKey}.control.lowVoltageBlock`
                                );
                                if (lowVoltageBlockState?.val === true && limit > 0) limit = 0;
                            
                                const fullChargeNeeded = await adapter.getStateAsync(
                                  `${productKey}.${deviceKey}.control.fullChargeNeeded`
                                );
                                if (fullChargeNeeded?.val === true && limit > 0) limit = 0;
                              }
                            
                              // Grenzen für Input/Output anwenden
                              if (limit < 0) {
                                limit = -getMinAndMaxInputLimitForProductKey(productKey, -limit);
                              } else {
                                limit = getMinAndMaxOutputLimitForProductKey(productKey, limit);
                              }
                            
                              const topic = `iot/${productKey}/${deviceKey}/function/invoke`;
                              adapter.msgCounter += 1;
                              const timestamp = Math.floor(Date.now() / 1000);
                            
                              // --- geändert/neu: aktuellen Mode abfragen ---
                              const currentModeState = await adapter.getStateAsync(
                                `${productKey}.${deviceKey}.properties.autoModel`
                              );
                              const currentMode = currentModeState?.val;
                              const targetMode = 8;
                              const includeMode = currentMode !== targetMode;
                            
                              const productName = getProductNameFromProductKey(productKey).toLowerCase();
                            
                              let payload: any;
                            
                              if (productName.includes("2400 ac") || productName.includes("solarflow 800")) {
                                // HEMS Variante, von HEMS habe ich keine Erfahrung/Ahnung! 
                                payload = {
                                  arguments: {
                                    outputPower: limit > 0 ? limit : 0,
                                    chargeState: limit > 0 ? 0 : 1,
                                    chargePower: limit > 0 ? 0 : -limit,
                                    mode: 9,
                                  },
                                  function: "hemsEP",
                                  messageId: adapter.msgCounter,
                                  deviceKey,
                                  timestamp,
                                };
                              } else if (productName.includes("hyper")) {
                                // Hyper Variante
                                if (limit < 0) {
                                  payload = {
                                    arguments: [
                                      {
                                        autoModelProgram: 1,
                                        autoModelValue: {
                                          upTime: 0,
                                          chargingType: 1,
                                          pullTime: 1800,
                                          price: 2,
                                          chargingPower: -limit,
                                          prices: new Array(24).fill(1),
                                          outPower: 0,
                                          freq: 0,
                                        },
                                        msgType: 1,
                                        ...(includeMode ? { autoModel: targetMode } : {}),
                                      },
                                    ],
                                    function: "deviceAutomation",
                                    messageId: adapter.msgCounter,
                                    deviceKey,
                                    timestamp,
                                  };
                                } else {
                                  payload = {
                                    arguments: [
                                      {
                                        autoModelProgram: 2,
                                        autoModelValue: {
                                          chargingType: 0,
                                          chargingPower: 0,
                                          freq: 0,
                                          outPower: limit,
                                        },
                                        msgType: 1,
                                        ...(includeMode ? { autoModel: targetMode } : {}),
                                      },
                                    ],
                                    function: "deviceAutomation",
                                    messageId: adapter.msgCounter,
                                    deviceKey,
                                    timestamp,
                                  };
                                }
                              } else {
                                // Hub Variante
                                if (limit < 0) {
                                  adapter.log.warn(
                                    `[setDeviceAutomationInOutLimit] CHARGE variant for Hub not supported – use acMode + inputLimit manually!`
                                  );
                                  return;
                                } else {
                                  payload = {
                                    arguments: [
                                      {
                                        autoModelProgram: 2,
                                        autoModelValue: limit,
                                        msgType: 1,
                                        ...(includeMode ? { autoModel: targetMode } : {}),
                                      },
                                    ],
                                    function: "deviceAutomation",
                                    messageId: adapter.msgCounter,
                                    deviceKey,
                                    timestamp,
                                  };
                                }
                              }
                            
                              adapter.mqttClient?.publish(topic, JSON.stringify(payload));
                            };
                            

                            HINWEIS: das war nur eine Idee / Vorlage. Nicht auf Fehler überprüft und ob es funktioniert, weiß ich auch nicht.


                            @nograx sagte in Test Adapter Zendure Solarflow:

                            Die setDeviceAutomationLimit Methode wurde ja auf deinen Hinweis hin implementiert, so wie die Integration von HA es macht (wo sollen hier die Unterschiede sein?).

                            Mein Hinweis war als Link auf eine der Quellen gedacht.
                            Was man daraus macht, ist eine andere Sache.
                            Auf einen Unterschied habe ich bereits gleich bei Punkt 1 meines Posts hingewiesen.
                            Du schaltest hart. HA macht das vom packState abhängig. Bei HA ist packState:0 nicht nur stumpf packState:0. Es werden auch andere parameter berücksichtigt, was dazu führt dass selbst wenn packState nicht 0 sein könnte, es als packSate:0 gewertet wird, wenn.... usw.

                            edit:
                            So viel ich mich erinnere, wird dann in Abhängigkeit davon vor dem sofortigen Wechsel zwischen Entladen und Laden (oder Laden auf Entladen) erst in Mode:0 gewechselt und nicht einfach direkt umgeschaltet.
                            Quasi wie ein 3 Stufenschalter Laden->0 -> Entladen.
                            Entladen -> 0 -> Laden.
                            Beim solar-flow-adapter findet das nicht statt.
                            Laden-> Entladen / Entladen-> Laden.
                            Korrigiert mich, wenn ich das nicht richtig verstanden habe.
                            Beschäftige mich nicht mehr weiter damit.
                            edit Ende

                            Ich weiß gar nicht warum ich so bin und das nicht lassen kann.
                            Das Thema ist doch für mich abgeschlossen?
                            Richtig, das muss jetzt ein Ende haben, nachdem ich zu viel Zeit damit verbracht habe.
                            Vielleicht waren ja ein paar Ideen/Erkenntnise/Hinweise/Beobachtungen usw. für den einen oder anderen hilfreich.

                            nograxN Offline
                            nograxN Offline
                            nograx
                            Developer
                            wrote on last edited by
                            #1814

                            @maxclaudi

                            • autoModel: 8 wird auch bei der HA Integration immer mit geschickt. Da das Zendure abgenickt hat (die Integration offiziell ist) muss ich davon ausgehen das das so OK ist.

                            • packState: Kannst du das bitte erläutern und mir ein Beispiel zeigen? Kann zu "packState" in der HA Integration nicht viel finden.

                            • "hart" schalten. Hier bräuchte ich auch mal ein Beispiel bzw. ne Referenz in dem Code der HA Integration, das verstehe ich nämlich auch nicht.

                            maxclaudiM B 2 Replies Last reply
                            0
                            • nograxN nograx

                              @maxclaudi

                              • autoModel: 8 wird auch bei der HA Integration immer mit geschickt. Da das Zendure abgenickt hat (die Integration offiziell ist) muss ich davon ausgehen das das so OK ist.

                              • packState: Kannst du das bitte erläutern und mir ein Beispiel zeigen? Kann zu "packState" in der HA Integration nicht viel finden.

                              • "hart" schalten. Hier bräuchte ich auch mal ein Beispiel bzw. ne Referenz in dem Code der HA Integration, das verstehe ich nämlich auch nicht.

                              maxclaudiM Offline
                              maxclaudiM Offline
                              maxclaudi
                              wrote on last edited by maxclaudi
                              #1815

                              @nograx sagte in Test Adapter Zendure Solarflow:

                              @maxclaudi

                              • autoModel: 8 wird auch bei der HA Integration immer mit geschickt. Da das Zendure abgenickt hat (die Integration offiziell ist) muss ich davon ausgehen das das so OK ist.

                              wie Du möchtest.
                              Ob das speziell abgenickt wurde und bei vielen anderen Stellen: weiß ich nicht.
                              Meine Vermutung ist, dass sie nur auf Nachfrage reagieren und mal machen lassen.
                              Kostet sie nichts. Aber genug mit Spekulationen.
                              Für meinen Teil, mach ich so viel wie möglich safe.

                              • packState: Kannst du das bitte erläutern und mir ein Beispiel zeigen? Kann zu "packState" in der HA Integration nicht viel finden.

                              • "hart" schalten. Hier bräuchte ich auch mal ein Beispiel bzw. ne Referenz in dem Code der HA Integration, das verstehe ich nämlich auch nicht.

                              packSate habe ich dazu in meinem code zur Auswertung mit verwendet, weil es quasi "idle" ist und in HA das IDLE (State=0) ist.
                              Versteht man schon 😉 Im solarflow-adapter-code benutzt Du auch Idle für packState:0

                              Möchte mich jetzt nicht wieder Tage mit der HA-Intergration beschäftigen
                              Egal, war zu lang raus aus dem py-Code und musste das gerade nochmal runterladen und anschauen.


                              Basis nun: Zendure-HA-1.1.4-pre2

                              Wenn man in den Code schaut, wird es schnell nachvollziehbar 🙂


                              A)
                              Was passiert bei Wechsel von negativ -> positiv (CHARGING -> DISCHARGING)?
                              Beispiel: -100 W (Laden aus Netz) zu 200 W (Entladen ins Haus).

                              1. manager.py erkennt, dass der gewünschte Wert Vorzeichen wechselt.
                              • Aktuelle ManagerState (CHARGING) passt nicht mehr.
                              • deshalb wird der State auf IDLE gesetzt: Übergangsschritt.
                              1. deviceAutomation wird mit autoModel=0, autoModelProgram=0 aufgerufen.
                              • „Stop-Befehl“: das Gerät ist kurz im IDLE-Modus.
                              1. Danach wechselt manager.py den State auf DISCHARGING.
                              • deviceAutomation wird erneut aufgerufen mit:
                              {
                                "autoModel": 8,
                                "autoModelProgram": 2,
                                "autoModelValue": {
                                  "chargingPower": 0,
                                  "outPower": 200,
                                  "freq": 0
                                }
                              }
                              
                              

                              B)
                              sodele oder vice versa, was passiert bei Wechsel von positiv -> negativ (DISCHARGING -> CHARGING)?
                              Beispiel: 200 W (Entladen) -> -100 W (Laden aus Netz).

                              1. manager.py setzt State auf IDLE -> autoModel=0.
                              2. danach manager.py setzt State auf CHARGING -> autoModel=8, autoModelProgram=1.
                                Payload u. a.:
                              {
                                "autoModel": 8,
                                "autoModelProgram": 1,
                                "autoModelValue": {
                                  "chargingPower": 100,
                                  "outPower": 0,
                                  "chargingType": 1,
                                  "price": 2
                                }
                              }
                              
                              

                              C)
                              Bedingung für IDLE (State=0)

                              IDLE wird immer dann gesetzt, wenn:

                              • Der gewünschte neue Wert 0 ist
                                -> Payload mit autoModel=0.

                              • Oder beim Umschalten der Richtung (negativ <-> positiv).
                                Damit wird garantiert, dass das Gerät nie „hart“ von Charge zu Discharge springt.

                              Im Code (z.B. hyper2000.py) :

                              "autoModel": 8 if state == ManagerState.DISCHARGING else 0,
                              "autoModelProgram": 2 if state == ManagerState.DISCHARGING else 0,
                              
                              

                              Wenn state == IDLE, landet man also automatisch bei 0/0.


                              Fazit:

                              1. es wird immer über autoModel=0 (Idle) geschaltet, wenn von negativ <-> positiv gewechselt wird.
                              • Idle wird akzeptiert, wenn man manuell 0 setzt, oder
                              • die Steuerung in manager.py beim Richtungswechsel einen „Zwischenstopp“ macht.
                              1. Dadurch sieht der Payload-Fluss z. B. bei -100 -> 200 so aus:
                              • deviceAutomation { autoModel=8, program=1, chargingPower=100 } (alter Zustand)
                              • deviceAutomation { autoModel=0, program=0 } (IDLE)
                              • deviceAutomation { autoModel=8, program=2, outPower=200 } (neuer Zustand)

                              Hinweis:
                              urprünglich ging ich davon aus, dass packState:0 == Idle ist und habe es in meinem Code entsprechend verwendet.

                              Wie bereits erwähnt, akzeptiert HA den Status auch als "IDLE", selbst wenn packState ≠ 0, solange andere Parameter passen.
                              Die Details lassen sich im Code auch gut nachvollziehen – ich denke, damit sollte genug Material da sein, um es weiterzuverfolgen.

                              Meine Analyse beschränkt sich auf die HA-Integration und zum Vergleich mit der solar-flow-Adapter-Funktion.
                              Fehler meinerseits sind dabei nicht ausgeschlossen.

                              Persönlich mag ich den Weg nicht, zu hacky und zu viele unbekannte Faktoren.
                              Bleibe beim bisherigen: Mode: 0, smartMode: 1 und outputLimit.

                              im HA code
                              Zendure-HA-1.1.4-pre2\custom_components\zendure_ha\manager.py
                              Zendure-HA-1.1.4-pre2\custom_components\zendure_ha\devices
                              Alle Geräte wie hub2000.py oder hyper2000.py etc.

                              Hoffe, das hilft Dir – mehr habe ich dazu nicht, gern geschehen.

                              Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                              1 Reply Last reply
                              0
                              • nograxN nograx

                                @maxclaudi

                                • autoModel: 8 wird auch bei der HA Integration immer mit geschickt. Da das Zendure abgenickt hat (die Integration offiziell ist) muss ich davon ausgehen das das so OK ist.

                                • packState: Kannst du das bitte erläutern und mir ein Beispiel zeigen? Kann zu "packState" in der HA Integration nicht viel finden.

                                • "hart" schalten. Hier bräuchte ich auch mal ein Beispiel bzw. ne Referenz in dem Code der HA Integration, das verstehe ich nämlich auch nicht.

                                B Offline
                                B Offline
                                BMGS
                                wrote on last edited by BMGS
                                #1816

                                @nograx Hallo erst mal und Danke für dein Adapter,
                                Habe vom Hub2000 auf Hyper 2000 gewechselt, aber der Hyper zeigt mir nur die Packdata (akkus) an 😞
                                Fehler im iobroker: " [createSolarFlowLocalStates] Unknown product (Hyper2000_3.0). We cannot create control states! Please contact the developer!"
                                Fallback werden mir die Daten angezeigt im Verzeichnis: zendure-solarflow.0.hC1g9Utt.xxxxxxx.
                                Habe schon so ziemlich alles durch probiert, neuen Acount, neue Instanz aber bekomme keine Daten.
                                Die Handy App und Steuerung vom shelly funktionieren.
                                das Problem schon mal gehabt oder bekannt?

                                gruss Bernd

                                maxclaudiM 1 Reply Last reply
                                0
                                • B BMGS

                                  @nograx Hallo erst mal und Danke für dein Adapter,
                                  Habe vom Hub2000 auf Hyper 2000 gewechselt, aber der Hyper zeigt mir nur die Packdata (akkus) an 😞
                                  Fehler im iobroker: " [createSolarFlowLocalStates] Unknown product (Hyper2000_3.0). We cannot create control states! Please contact the developer!"
                                  Fallback werden mir die Daten angezeigt im Verzeichnis: zendure-solarflow.0.hC1g9Utt.xxxxxxx.
                                  Habe schon so ziemlich alles durch probiert, neuen Acount, neue Instanz aber bekomme keine Daten.
                                  Die Handy App und Steuerung vom shelly funktionieren.
                                  das Problem schon mal gehabt oder bekannt?

                                  gruss Bernd

                                  maxclaudiM Offline
                                  maxclaudiM Offline
                                  maxclaudi
                                  wrote on last edited by maxclaudi
                                  #1817

                                  @bmgs sagte in Test Adapter Zendure Solarflow:

                                  Fehler im iobroker: " [createSolarFlowLocalStates] Unknown product (Hyper2000_3.0). We cannot create control states! Please contact the developer!"
                                  Fallback werden mir die Daten angezeigt im Verzeichnis: zendure-solarflow.0.hC1g9Utt.xxxxxxxx

                                  Würde die letzten Ziffern entfernen und durch xxxxxxxx ersetzen. Das ist Deine deviceID.

                                  Hoppla eine neue Hyper2000_3.0 Version mit neuer productID: hC1g9Utt, wenn das stimmt muss sie erst eingepflegt werden 🙂

                                  Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                                  B 1 Reply Last reply
                                  0
                                  • maxclaudiM maxclaudi

                                    @bmgs sagte in Test Adapter Zendure Solarflow:

                                    Fehler im iobroker: " [createSolarFlowLocalStates] Unknown product (Hyper2000_3.0). We cannot create control states! Please contact the developer!"
                                    Fallback werden mir die Daten angezeigt im Verzeichnis: zendure-solarflow.0.hC1g9Utt.xxxxxxxx

                                    Würde die letzten Ziffern entfernen und durch xxxxxxxx ersetzen. Das ist Deine deviceID.

                                    Hoppla eine neue Hyper2000_3.0 Version mit neuer productID: hC1g9Utt, wenn das stimmt muss sie erst eingepflegt werden 🙂

                                    B Offline
                                    B Offline
                                    BMGS
                                    wrote on last edited by
                                    #1818

                                    @maxclaudi said in Test Adapter Zendure Solarflow:

                                    @bmgs sagte in Test Adapter Zendure Solarflow:

                                    Hoppla eine neue Hyper2000_3.0 Version mit neuer productID: hC1g9Utt, wenn das stimmt muss sie erst eingepflegt werden 🙂

                                    Danke für die Info, ist der hyper wenigstens nicht defekt, Daten in der App sind ja auch io.

                                    Gruss
                                    Bernd

                                    maxclaudiM 1 Reply Last reply
                                    0
                                    • B BMGS

                                      @maxclaudi said in Test Adapter Zendure Solarflow:

                                      @bmgs sagte in Test Adapter Zendure Solarflow:

                                      Hoppla eine neue Hyper2000_3.0 Version mit neuer productID: hC1g9Utt, wenn das stimmt muss sie erst eingepflegt werden 🙂

                                      Danke für die Info, ist der hyper wenigstens nicht defekt, Daten in der App sind ja auch io.

                                      Gruss
                                      Bernd

                                      maxclaudiM Offline
                                      maxclaudiM Offline
                                      maxclaudi
                                      wrote on last edited by maxclaudi
                                      #1819

                                      @bmgs
                                      nichts defekt, einfach abwarten auf ein neues Release 🙂

                                      Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                                      B 1 Reply Last reply
                                      0
                                      • maxclaudiM maxclaudi

                                        @bmgs
                                        nichts defekt, einfach abwarten auf ein neues Release 🙂

                                        B Offline
                                        B Offline
                                        BMGS
                                        wrote on last edited by
                                        #1820

                                        @maxclaudi said in Test Adapter Zendure Solarflow:

                                        @bmgs
                                        nichts defekt, einfach abwarten 🙂

                                        Die Packdata liegen in zendure-solarflow.0.B3Dxda.xxxxxxx übrigens,
                                        eigentlich sollte doch da der rest auch auftauchen.

                                        Gruss
                                        Bernd

                                        maxclaudiM nograxN 2 Replies Last reply
                                        0
                                        • B BMGS

                                          @maxclaudi said in Test Adapter Zendure Solarflow:

                                          @bmgs
                                          nichts defekt, einfach abwarten 🙂

                                          Die Packdata liegen in zendure-solarflow.0.B3Dxda.xxxxxxx übrigens,
                                          eigentlich sollte doch da der rest auch auftauchen.

                                          Gruss
                                          Bernd

                                          maxclaudiM Offline
                                          maxclaudiM Offline
                                          maxclaudi
                                          wrote on last edited by
                                          #1821

                                          @bmgs
                                          bin auch manchmal ungeduldig 🙂
                                          Warte bis sich @nograx meldet oder schreib ihn direkt an.

                                          Ich schreibe meistens sehr direkt – bitte nicht falsch verstehen, es ist nie böse gemeint. Das ist einfach mein Stil und niemals abwertend gemeint.

                                          M 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          643

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe