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

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

Community Forum

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

NEWS

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

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

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

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.6k Beiträge 127 Kommentatoren 744.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.
  • R Ralf77

    @gooflo Danke für Deine Info. Würde es sehr gerne versuchen.
    Ich habe jetzt gerade mal die neue Version installiert und dachte, dass es eigentlich genau das ist, was ich suchte...

    1.2.5.f1 Fork von Florian Vogt (25.06.2024)
    Feature hinzugefügt, um die Größe der Delta-Speicher beim Ausbalancieren der Entladeleistung zu berücksichtigen, damit die Batterien gleichmäßig geleert werden.
    Parameter battCapacity bei den Einstellungen für PowerStream = Kapazität der angeschlossenen Batterie in kWh, default = 1

    Im ChangeLog steht es aber dann genau anders drin: "...der Delta-Speicher beim Ausbalancieren der Ladeleistung zur berücksichtigen, damit die Batterien gleichzeitig voll werden"

    Keine Ahnung, was jetzt richtig ist. Geht es um die gleichmäßige Entladeleistung, was ich genre möchte oder um eine gleichmäßige Ladeleistung (was mir eigentlich egal ist...soll rein, was an PC verfügbar ist)

    Hat da jemand eine Info?

    R Online
    R Online
    Ralf77
    schrieb am zuletzt editiert von
    #1498

    Ok, habe es jetzt getestet. Es geht wirklich um die ENTLADUNG!
    Es funktioniert soweit auch ganz gut. Bin damit zufrieden und die Erweiterung des Scriptes ermöglicht jetzt eine deutlich bessere gleichmäßige Entladung bei unterschiedlichen Akku-Kapazitäten in Verbindung mit mehreren Powerstreams.

    Vielen Dank an die Entwickler für die ständige Pflege des Scriptes.

    G 1 Antwort Letzte Antwort
    0
    • R Ralf77

      Ok, habe es jetzt getestet. Es geht wirklich um die ENTLADUNG!
      Es funktioniert soweit auch ganz gut. Bin damit zufrieden und die Erweiterung des Scriptes ermöglicht jetzt eine deutlich bessere gleichmäßige Entladung bei unterschiedlichen Akku-Kapazitäten in Verbindung mit mehreren Powerstreams.

      Vielen Dank an die Entwickler für die ständige Pflege des Scriptes.

      G Offline
      G Offline
      gooflo
      schrieb am zuletzt editiert von
      #1499

      @ralf77 genau, es geht um die Entladung, da hast Du dann noch einen Fehler im Changelog gefunden @Waly_de . Bitte beobachte mal, wie gut das funktioniert. Soweit ich mich erinnere bin ich im Laufe der Zeit auf Fälle gestoßen, bei denen es nicht so gut funktioniert hat. Deswegen und weil ich auch das Laden (abhängig von PV (inklusive PV an der D2M) und Ladestand) regeln wollte, habe ich es nochmal weiterentwickelt.

      R 1 Antwort Letzte Antwort
      1
      • G gooflo

        @ralf77 genau, es geht um die Entladung, da hast Du dann noch einen Fehler im Changelog gefunden @Waly_de . Bitte beobachte mal, wie gut das funktioniert. Soweit ich mich erinnere bin ich im Laufe der Zeit auf Fälle gestoßen, bei denen es nicht so gut funktioniert hat. Deswegen und weil ich auch das Laden (abhängig von PV (inklusive PV an der D2M) und Ladestand) regeln wollte, habe ich es nochmal weiterentwickelt.

        R Online
        R Online
        Ralf77
        schrieb am zuletzt editiert von
        #1500

        @gooflo vielen Dank! Sehr gute Erweiterung. Ich habe heute auch schon teilweise gesehen, dass es bei hoher Einspeisung nicht immer geklappt hat. Da kam teilweise eine „unlogische“ Einspeisung zustande. Das sind aber eh die Ausnahmesituationen, welche nur kurzzeitig vorhanden sein sollten. Bis jetzt konnte ich das Problem nicht reproduzieren.

        Könnt3 mir aber vorstellen, dass das Problem bei gleichzeitiger Ladung durch PV am Powerstream aufkam. Ich werde beobachten.

        Aktuell läuft es absolut top.

        R 1 Antwort Letzte Antwort
        0
        • R Ralf77

          @gooflo vielen Dank! Sehr gute Erweiterung. Ich habe heute auch schon teilweise gesehen, dass es bei hoher Einspeisung nicht immer geklappt hat. Da kam teilweise eine „unlogische“ Einspeisung zustande. Das sind aber eh die Ausnahmesituationen, welche nur kurzzeitig vorhanden sein sollten. Bis jetzt konnte ich das Problem nicht reproduzieren.

          Könnt3 mir aber vorstellen, dass das Problem bei gleichzeitiger Ladung durch PV am Powerstream aufkam. Ich werde beobachten.

          Aktuell läuft es absolut top.

          R Online
          R Online
          Ralf77
          schrieb am zuletzt editiert von
          #1501

          @gooflo habe jetzt immer etwas beobachtet. Es scheint aber die Aufteilung der Einspeiseleistung nicht ganz korrekt entsprechend der Akku-Kapazität berechnet zu werden.

          Hier mal ein Bild. Am obern Powerstream sind 7,2kWh Akku-Kapazität. Am unteren Powerstream ist eine Akku-Kapazität von 3.6kWh.

          Die Einspeiseleistungsollte somit am oberen PS das doppelte der unteren Einspeisung betragen. Ich sehe aber, dass am Morgen der kleine Akku immer stärker entladen wird.

          8250c803-bed7-4c45-ad1f-3734b2933193-image.jpeg

          P G 2 Antworten Letzte Antwort
          0
          • R Ralf77

            @gooflo habe jetzt immer etwas beobachtet. Es scheint aber die Aufteilung der Einspeiseleistung nicht ganz korrekt entsprechend der Akku-Kapazität berechnet zu werden.

            Hier mal ein Bild. Am obern Powerstream sind 7,2kWh Akku-Kapazität. Am unteren Powerstream ist eine Akku-Kapazität von 3.6kWh.

            Die Einspeiseleistungsollte somit am oberen PS das doppelte der unteren Einspeisung betragen. Ich sehe aber, dass am Morgen der kleine Akku immer stärker entladen wird.

            8250c803-bed7-4c45-ad1f-3734b2933193-image.jpeg

            P Offline
            P Offline
            photon-harvester
            schrieb am zuletzt editiert von
            #1502

            @ralf77 Das liegt daran, dass der obere Akku noch 81% anzeigt und er untere 80%. Das Script entlädt den Akku mit der größeren Kapazität gemäß Anzeige und nicht der tatsächlichen Akkugröße stärker.

            1 Antwort Letzte Antwort
            0
            • R Ralf77

              @gooflo habe jetzt immer etwas beobachtet. Es scheint aber die Aufteilung der Einspeiseleistung nicht ganz korrekt entsprechend der Akku-Kapazität berechnet zu werden.

              Hier mal ein Bild. Am obern Powerstream sind 7,2kWh Akku-Kapazität. Am unteren Powerstream ist eine Akku-Kapazität von 3.6kWh.

              Die Einspeiseleistungsollte somit am oberen PS das doppelte der unteren Einspeisung betragen. Ich sehe aber, dass am Morgen der kleine Akku immer stärker entladen wird.

              8250c803-bed7-4c45-ad1f-3734b2933193-image.jpeg

              G Offline
              G Offline
              gooflo
              schrieb am zuletzt editiert von
              #1503

              @ralf77 hm, stimmt, das sieht seltsam aus. Wenn kein PV reinkommt sollte es eigentlich genau nach Kapazität aufgeteilt werden. Aus dem Logfile könnte man vermutlich die Ursache finden (mlog = true setzen).

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                sirdir
                schrieb am zuletzt editiert von
                #1504

                Ich krieg plötzlich keinen Akkustand mehr angezeigt. Hat Ecoflow was gebastelt? Gibt's plänte auf die offizielle API umzusteigen?

                R 1 Antwort Letzte Antwort
                0
                • S sirdir

                  Ich krieg plötzlich keinen Akkustand mehr angezeigt. Hat Ecoflow was gebastelt? Gibt's plänte auf die offizielle API umzusteigen?

                  R Online
                  R Online
                  Ralf77
                  schrieb am zuletzt editiert von
                  #1505

                  @sirdir auch bei mir Funktion die Regelung über das Script gerade gar nicht…

                  S 1 Antwort Letzte Antwort
                  0
                  • R Ralf77

                    @sirdir auch bei mir Funktion die Regelung über das Script gerade gar nicht…

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

                    @ralf77 Stimmt, bei mir auch nicht. Hab dann den Shelly 3EM der an meinem Gästehaus hängt in der App eingefügt... Hab gedacht, damit wenigstens etwas gedeckt wird. Dann ist mir aber eingefallen, dass das nicht gehen wird, da die PS die einspeisen nicht am Gästehaus hängen, der Shelly also die Einspeisung nicht misst… Aber, weiss nicht ob's am Einbinden des Shellies lag oder einfach Zufall war, als ich danach wieder das Script startete ging es wieder.

                    R 1 Antwort Letzte Antwort
                    0
                    • S sirdir

                      @ralf77 Stimmt, bei mir auch nicht. Hab dann den Shelly 3EM der an meinem Gästehaus hängt in der App eingefügt... Hab gedacht, damit wenigstens etwas gedeckt wird. Dann ist mir aber eingefallen, dass das nicht gehen wird, da die PS die einspeisen nicht am Gästehaus hängen, der Shelly also die Einspeisung nicht misst… Aber, weiss nicht ob's am Einbinden des Shellies lag oder einfach Zufall war, als ich danach wieder das Script startete ging es wieder.

                      R Online
                      R Online
                      Ralf77
                      schrieb am zuletzt editiert von Ralf77
                      #1507

                      @sirdir die Regelung läuft bei mir auch. Nur springen die Werte extrem hin- und her.
                      Mal speisen meine Deltas 150W ins öffentliche Netz ein, da zu viel Ins Hausnetz eingespeist wird… dann zieht mein Haus wieder 200 Watt aus dem öffentlichen Netz, da die Deltas zu wenig ins Hausnetz einspeisen.

                      Normalerweise sollte ja gar nichts ins öffentliche Netz eingespeist werden und immer leicht aus dem öffentlichen Netz gezogen werden. Das klappt irgendwie gerade nicht gut bei mir.

                      S 1 Antwort Letzte Antwort
                      0
                      • R Ralf77

                        @sirdir die Regelung läuft bei mir auch. Nur springen die Werte extrem hin- und her.
                        Mal speisen meine Deltas 150W ins öffentliche Netz ein, da zu viel Ins Hausnetz eingespeist wird… dann zieht mein Haus wieder 200 Watt aus dem öffentlichen Netz, da die Deltas zu wenig ins Hausnetz einspeisen.

                        Normalerweise sollte ja gar nichts ins öffentliche Netz eingespeist werden und immer leicht aus dem öffentlichen Netz gezogen werden. Das klappt irgendwie gerade nicht gut bei mir.

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

                        @ralf77 Ich denke das Script muss langfristig die öffentliche API benützen. Irgendwann wird der ‘Hack’ bestimmt abgedreht oder geht sonst kaputt. Ich bin mir das grad etwas am anschauen aber hab weder viel Erfahrung mit http Kommunikation unter javascript noch mit Verschlüsselung… Mal sehen ob ich was hin krieg.

                        W 1 Antwort Letzte Antwort
                        0
                        • S sirdir

                          @ralf77 Ich denke das Script muss langfristig die öffentliche API benützen. Irgendwann wird der ‘Hack’ bestimmt abgedreht oder geht sonst kaputt. Ich bin mir das grad etwas am anschauen aber hab weder viel Erfahrung mit http Kommunikation unter javascript noch mit Verschlüsselung… Mal sehen ob ich was hin krieg.

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

                          @sirdir
                          Sorry, dass ich mich hier so rausnehmen. Aber ich hab wirklich im Moment üble Probleme, worüber ich jetzt hier nicht jammern möchte.
                          Ich finde es aber auch extrem frustrierend, dass der Hersteller, obwohl wir hier Funktionserweiterungen entwickelt haben, ganz ohne Gegenleistung, die dazu führen, dass mehr Leute, auch im professionellen Bereich auf EF Produkte zurückgreifen, nicht einmal versucht, Kontakt aufzunehmen, geschweige denn Hilfe anbietet, im gegenteil. Die API Dokumentation ist relativ frustrierend, ich habe schon einige Versuche gemacht damit zu arbeiten, leider bisher ziemlich erfolglos.
                          Natürlich wäre eine Umstellung auf die offizielle API sehr wünschenswert, solange das keine Nachteile bei der Geschwindigkeit oder der Qualität der Regulierung einbringt.
                          Ich lade euch herzlich ein, an dieser API Anbindung zu arbeiten.
                          Theoretisch gibt es dort auch einen MQTT server, der uns die relevanten Daten liefern kann.

                          Hier die Einsiegsseite für die API
                          https://developer-eu.ecoflow.com/us

                          Hier mal einer meiner Versuche mit der API zu kommunizieren.
                          Verbindung wird aufgebaut, aber es kommen keine Telegramme:
                          Auch konnte ich keine Daten an meine Geräte senden.

                          const axios = require('axios');
                          const mqtt = require('mqtt');
                          const crypto = require('crypto');
                          
                          // Konfigurationen
                          const host = 'api-e.ecoflow.com';
                          const mqttHost = 'mqtt.ecoflow.com';
                          const mqttPort = 8883;
                          const mqttProtocol = 'mqtts';
                          const accessKey = 'DLXXXXXXXXXXXXXXXXXXXXXXXXX6D6'; // Ersetze dies mit deinem tatsächlichen Access Key
                          const secretKey = 'XxXXXXXXXXXXXXXXXXXXXXXXXXXLA'; // Ersetze dies mit deinem tatsächlichen Secret Key
                          const deviceSN = 'HW5XXXXXXXXXX55'; // Ersetze dies mit der tatsächlichen Seriennummer deines Geräts
                          
                          // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                          function createSignature(params, secretKey) {
                              const queryString = Object.keys(params)
                                  .sort()
                                  .map(key => `${key}=${params[key]}`)
                                  .join('&');
                              return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                          }
                          
                          // Zertifikate für MQTT abrufen
                          async function getMQTTCertification() {
                              const nonce = Math.floor(Math.random() * 1000000);
                              const timestamp = Date.now();
                              const params = {
                                  accessKey: accessKey,
                                  nonce: nonce,
                                  timestamp: timestamp
                              };
                          
                              const signature = createSignature(params, secretKey);
                          
                              try {
                                  const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                      headers: {
                                          accessKey: accessKey,
                                          nonce: nonce,
                                          timestamp: timestamp,
                                          sign: signature
                                      }
                                  });
                                  return response.data.data;
                              } catch (error) {
                                  console.error('Fehler beim Abrufen der MQTT-Zertifikate:', error);
                                  throw error;
                              }
                          }
                          
                          // MQTT-Verbindung herstellen und Daten empfangen
                          async function startMQTTClient() {
                              try {
                                  const certification = await getMQTTCertification();
                          
                                  const client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                      username: certification.certificateAccount,
                                      password: certification.certificatePassword,
                                      protocol: mqttProtocol
                                  });
                          
                                  const deviceTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                  const powerstreamTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                          
                          
                          
                                  client.on('connect', () => {
                                      console.log('Verbunden mit dem MQTT-Broker');
                          
                                      // Geräteliste anfordern
                                      //const deviceListTopic = `/open/${certification.certificateAccount.replace("open-", "")}/${deviceSN}/get`;
                          			const deviceListTopic = `/open/${certification.certificateAccount}/${deviceSN}/get`;
                                      client.subscribe(deviceListTopic, (err) => {
                                          if (!err) {
                                              console.log(`Abonniert auf Geräteliste-Topic: ${deviceListTopic}`);
                                              client.publish(deviceListTopic, JSON.stringify({}));
                                          } else {
                                              console.error('Fehler beim Abonnieren des Geräteliste-Themas:', err);
                                          }
                                      });
                          
                                      // Powerstream-Daten abonnieren
                                      client.subscribe(powerstreamTopic, (err) => {
                                          if (!err) {
                                              console.log(`Abonniert auf Powerstream-Daten: ${powerstreamTopic}`);
                                          } else {
                                              console.error('Fehler beim Abonnieren des Powerstream-Themas:', err);
                                          }
                                      });
                                       // Alle Topics abonnieren, um alle Nachrichten zu empfangen
                                      client.subscribe('#', (err) => {  // '#' ist ein Wildcard-Topic, das alle Topics abonniert
                                          if (!err) {
                                              console.log('Abonniert auf alle Topics (#)');
                                          } else {
                                              console.error('Fehler beim Abonnieren aller Topics:', err);
                                          }
                                      });
                                  });
                          
                                  
                                  client.on('message', (topic, message) => {
                                      // Ausgabe des empfangenen Telegramms
                                      console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                  });
                          
                                  client.on('error', (err) => {
                                      console.error('MQTT-Verbindungsfehler:', err);
                                  });
                          
                                  client.on('close', () => {
                                      console.log('MQTT-Verbindung geschlossen');
                                  });
                          
                              } catch (error) {
                                  console.error('Fehler beim Starten des MQTT-Clients:', error);
                              }
                          }
                          
                          startMQTTClient();
                          

                          Ihr müsst euch dafür als Entwickler registrieren (sehr einfach) und euch den
                          accessKey und secretKey dort generieren.

                          Bei mir treten diese Probleme übrigens nicht auf.
                          Was mich noch interessieren würde: wenn keine Daten mehr am Skript ankommen, und ihr das Skript im iobroker einige Male neu startet, kommen dann wieder Daten?

                          Mehr kann ich im Moment nicht beitragen. Sorry.

                          W 1 Antwort Letzte Antwort
                          1
                          • W Waly_de

                            @sirdir
                            Sorry, dass ich mich hier so rausnehmen. Aber ich hab wirklich im Moment üble Probleme, worüber ich jetzt hier nicht jammern möchte.
                            Ich finde es aber auch extrem frustrierend, dass der Hersteller, obwohl wir hier Funktionserweiterungen entwickelt haben, ganz ohne Gegenleistung, die dazu führen, dass mehr Leute, auch im professionellen Bereich auf EF Produkte zurückgreifen, nicht einmal versucht, Kontakt aufzunehmen, geschweige denn Hilfe anbietet, im gegenteil. Die API Dokumentation ist relativ frustrierend, ich habe schon einige Versuche gemacht damit zu arbeiten, leider bisher ziemlich erfolglos.
                            Natürlich wäre eine Umstellung auf die offizielle API sehr wünschenswert, solange das keine Nachteile bei der Geschwindigkeit oder der Qualität der Regulierung einbringt.
                            Ich lade euch herzlich ein, an dieser API Anbindung zu arbeiten.
                            Theoretisch gibt es dort auch einen MQTT server, der uns die relevanten Daten liefern kann.

                            Hier die Einsiegsseite für die API
                            https://developer-eu.ecoflow.com/us

                            Hier mal einer meiner Versuche mit der API zu kommunizieren.
                            Verbindung wird aufgebaut, aber es kommen keine Telegramme:
                            Auch konnte ich keine Daten an meine Geräte senden.

                            const axios = require('axios');
                            const mqtt = require('mqtt');
                            const crypto = require('crypto');
                            
                            // Konfigurationen
                            const host = 'api-e.ecoflow.com';
                            const mqttHost = 'mqtt.ecoflow.com';
                            const mqttPort = 8883;
                            const mqttProtocol = 'mqtts';
                            const accessKey = 'DLXXXXXXXXXXXXXXXXXXXXXXXXX6D6'; // Ersetze dies mit deinem tatsächlichen Access Key
                            const secretKey = 'XxXXXXXXXXXXXXXXXXXXXXXXXXXLA'; // Ersetze dies mit deinem tatsächlichen Secret Key
                            const deviceSN = 'HW5XXXXXXXXXX55'; // Ersetze dies mit der tatsächlichen Seriennummer deines Geräts
                            
                            // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                            function createSignature(params, secretKey) {
                                const queryString = Object.keys(params)
                                    .sort()
                                    .map(key => `${key}=${params[key]}`)
                                    .join('&');
                                return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                            }
                            
                            // Zertifikate für MQTT abrufen
                            async function getMQTTCertification() {
                                const nonce = Math.floor(Math.random() * 1000000);
                                const timestamp = Date.now();
                                const params = {
                                    accessKey: accessKey,
                                    nonce: nonce,
                                    timestamp: timestamp
                                };
                            
                                const signature = createSignature(params, secretKey);
                            
                                try {
                                    const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                        headers: {
                                            accessKey: accessKey,
                                            nonce: nonce,
                                            timestamp: timestamp,
                                            sign: signature
                                        }
                                    });
                                    return response.data.data;
                                } catch (error) {
                                    console.error('Fehler beim Abrufen der MQTT-Zertifikate:', error);
                                    throw error;
                                }
                            }
                            
                            // MQTT-Verbindung herstellen und Daten empfangen
                            async function startMQTTClient() {
                                try {
                                    const certification = await getMQTTCertification();
                            
                                    const client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                        username: certification.certificateAccount,
                                        password: certification.certificatePassword,
                                        protocol: mqttProtocol
                                    });
                            
                                    const deviceTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                    const powerstreamTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                            
                            
                            
                                    client.on('connect', () => {
                                        console.log('Verbunden mit dem MQTT-Broker');
                            
                                        // Geräteliste anfordern
                                        //const deviceListTopic = `/open/${certification.certificateAccount.replace("open-", "")}/${deviceSN}/get`;
                            			const deviceListTopic = `/open/${certification.certificateAccount}/${deviceSN}/get`;
                                        client.subscribe(deviceListTopic, (err) => {
                                            if (!err) {
                                                console.log(`Abonniert auf Geräteliste-Topic: ${deviceListTopic}`);
                                                client.publish(deviceListTopic, JSON.stringify({}));
                                            } else {
                                                console.error('Fehler beim Abonnieren des Geräteliste-Themas:', err);
                                            }
                                        });
                            
                                        // Powerstream-Daten abonnieren
                                        client.subscribe(powerstreamTopic, (err) => {
                                            if (!err) {
                                                console.log(`Abonniert auf Powerstream-Daten: ${powerstreamTopic}`);
                                            } else {
                                                console.error('Fehler beim Abonnieren des Powerstream-Themas:', err);
                                            }
                                        });
                                         // Alle Topics abonnieren, um alle Nachrichten zu empfangen
                                        client.subscribe('#', (err) => {  // '#' ist ein Wildcard-Topic, das alle Topics abonniert
                                            if (!err) {
                                                console.log('Abonniert auf alle Topics (#)');
                                            } else {
                                                console.error('Fehler beim Abonnieren aller Topics:', err);
                                            }
                                        });
                                    });
                            
                                    
                                    client.on('message', (topic, message) => {
                                        // Ausgabe des empfangenen Telegramms
                                        console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                    });
                            
                                    client.on('error', (err) => {
                                        console.error('MQTT-Verbindungsfehler:', err);
                                    });
                            
                                    client.on('close', () => {
                                        console.log('MQTT-Verbindung geschlossen');
                                    });
                            
                                } catch (error) {
                                    console.error('Fehler beim Starten des MQTT-Clients:', error);
                                }
                            }
                            
                            startMQTTClient();
                            

                            Ihr müsst euch dafür als Entwickler registrieren (sehr einfach) und euch den
                            accessKey und secretKey dort generieren.

                            Bei mir treten diese Probleme übrigens nicht auf.
                            Was mich noch interessieren würde: wenn keine Daten mehr am Skript ankommen, und ihr das Skript im iobroker einige Male neu startet, kommen dann wieder Daten?

                            Mehr kann ich im Moment nicht beitragen. Sorry.

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

                            @waly_de okay, ich konnte heute noch ein bisschen Zeit aufbringen und hab es tatsächlich geschafft mit dem offiziellen API Server zu kommunizieren. Auch das Schreiben von Werten ist mir gelungen.
                            Hier ist der Ansatz:

                            const axios = require('axios');
                            const mqtt = require('mqtt');
                            const crypto = require('crypto');
                            
                            //****** HIER DEINE DATEN ******
                            const accessKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Access Key
                            const secretKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Secret Key
                            const deviceSNs = ['XXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXX']; // Mehrere Geräte-Seriennummern
                            const MQTT_Clientid = 1
                            //*********************/
                            
                            
                            // Konfigurationen
                            const host = 'api-e.ecoflow.com';
                            const mqttHost = 'mqtt.ecoflow.com';
                            const mqttPort = 8883;
                            const mqttProtocol = 'mqtts';
                            const mqttCert = '0_userdata.0.ecoflow.mqttCert'
                            // Globale Variablen für client und certification
                            let client;
                            let certification;
                            
                            if (!existsState(mqttCert)) {
                                createState(mqttCert, "");
                            }
                            
                            // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                            function createSignature(params, secretKey) {
                                const queryString = Object.keys(params)
                                    .sort()
                                    .map(key => `${key}=${params[key]}`)
                                    .join('&');
                                return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                            }
                            
                            // Funktion zur Überprüfung, ob Zertifikat bereits vorhanden ist
                            async function loadMQTTCertification() {
                                return new Promise((resolve, reject) => {
                                    // Überprüfen, ob der State existiert
                            
                                    getState(mqttCert, (err, state) => {
                                        if (err) {
                                            console.error('Fehler beim Überprüfen des Zertifikat-States:', err);
                                            return reject(err);
                                        }
                                        if (state && state.val) {
                                            try {
                                                const storedCert = JSON.parse(state.val);
                                                // Überprüfen, ob die Felder im Zertifikat vorhanden sind
                                                if (storedCert.certificateAccount && storedCert.certificatePassword) {
                                                    console.log('Zertifikat aus ioBroker geladen');
                                                    return resolve(storedCert);
                                                }
                                            } catch (error) {
                                                console.error('Fehler beim Parsen des Zertifikats:'+ error);
                                            }
                                        }
                                        resolve(null); // Kein Zertifikat gefunden oder ungültig
                                    });
                                });
                            }
                            
                            // Zertifikate für MQTT abrufen und speichern
                            async function getMQTTCertification() {
                                const nonce = Math.floor(Math.random() * 1000000);
                                const timestamp = Date.now();
                                const params = {
                                    accessKey: accessKey,
                                    nonce: nonce,
                                    timestamp: timestamp
                                };
                            
                                const signature = createSignature(params, secretKey);
                            
                                try {
                                    const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                        headers: {
                                            accessKey: accessKey,
                                            nonce: nonce,
                                            timestamp: timestamp,
                                            sign: signature
                                        }
                                    });
                            
                                    const certData = response.data.data;
                                    // Zertifikat in ioBroker speichern
                                    setState(mqttCert, JSON.stringify(certData), true);
                                    console.log('Zertifikat erfolgreich abgerufen und in ioBroker gespeichert');
                                    return certData;
                                } catch (error) {
                                    console.error('Fehler beim Abrufen der MQTT-Zertifikate:'+ error);
                                    throw error;
                                }
                            }
                            
                            // Funktion zum Setzen von Parametern (z.B. permanentWatts) ohne client und certification als Parameter
                            function setPermanentWatts(deviceSN, wattsValue) {
                                if (!client || !certification) {
                                    console.error("MQTT-Client oder Zertifizierung nicht bereit.");
                                    return;
                                }
                            
                                const setTopic = `/open/${certification.certificateAccount}/${deviceSN}/set`;
                            
                                const message = {
                                    id: Date.now(), // Einzigartige ID
                                    version: "1.0",
                                    cmdCode: "WN511_SET_PERMANENT_WATTS_PACK", // Befehlscode zum Setzen von permanentWatts
                                    params: {
                                        permanentWatts: wattsValue // Der Wert, den du setzen möchtest
                                    }
                                };
                            
                                client.publish(setTopic, JSON.stringify(message), (err) => {
                                    if (!err) {
                                        console.log(`Befehl zum Setzen von permanentWatts auf ${wattsValue} W für Gerät ${deviceSN} wurde gesendet.`);
                                    } else {
                                        console.error(`Fehler beim Senden des permanentWatts-Befehls für Gerät ${deviceSN}:` + err);
                                    }
                                });
                            }
                            
                            // MQTT-Verbindung herstellen und Daten empfangen
                            async function startMQTTClient() {
                                try {
                                    // Zertifikat aus ioBroker laden, falls vorhanden
                                    certification = await loadMQTTCertification();
                                    if (!certification) {
                                        // Zertifikat neu generieren, wenn es nicht vorhanden ist
                                        certification = await getMQTTCertification();
                                    }
                            
                                    client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                        clientId: 'EcoFlowClient_' + MQTT_Clientid,
                                        username: certification.certificateAccount,
                                        password: certification.certificatePassword,
                                        protocol: mqttProtocol
                                    });
                            
                                    client.on('connect', () => {
                                        console.log('Verbunden mit dem MQTT-Broker');
                            
                                        // Abonnieren von Status und anderen Daten für jedes Gerät
                                        deviceSNs.forEach((deviceSN) => {
                                            const quotaTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                            const statusTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                            
                                            // Abonnieren des Status-Themas
                                            client.subscribe(statusTopic, (err) => {
                                                if (!err) {
                                                    console.log(`Abonniert auf Status-Topic: ${statusTopic}`);
                                                } else {
                                                    console.error(`Fehler beim Abonnieren des Status-Themas für Gerät ${deviceSN}:` + err);
                                                }
                                            });
                            
                                            // Abonnieren des Quota-Themas
                                            client.subscribe(quotaTopic, (err) => {
                                                if (!err) {
                                                    console.log(`Abonniert auf Quota-Topic: ${quotaTopic}`);
                                                } else {
                                                    console.error(`Fehler beim Abonnieren des Quota-Themas für Gerät ${deviceSN}:` + err);
                                                }
                                            });
                                        });
                                    });
                            
                                    client.on('message', (topic, message) => {
                                        console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                    });
                            
                                    client.on('error', (err) => {
                                        console.error('MQTT-Verbindungsfehler:' + err);
                                        client.end();  // Trenne die Verbindung bei einem Fehler
                                        console.log('Verbindung getrennt aufgrund eines Fehlers ' + err);
                                    });
                            
                                    client.on('close', () => {
                                        console.log('MQTT-Verbindung geschlossen');
                                    });
                            
                                } catch (error) {
                                    console.error('Fehler beim Starten des MQTT-Clients:' + error);
                                }
                            }
                            // Schließe die Verbindung, wenn das Skript gestoppt wird
                            onStop(function (callback) {
                                if (client) {
                                    client.end();
                                    log("Script gestoppt");
                                }
                                callback();
                            }, 2000);
                            // Start der MQTT-Client-Verbindung
                            startMQTTClient();
                            
                            
                            
                            // Beispielaufruf von setPermanentWatts außerhalb von startMQTTClient()
                            setTimeout(() => {
                                setPermanentWatts(deviceSNs[0], 3000); // Setzt permanentWatts für ein bestimmtes Gerät auf 300 W
                            }, 5000); // Warte 5 Sekunden, damit der Client verbunden ist
                            

                            Ich würde mich freuen, wenn ihr euch näher damit befasst. bevor ich das ins Skript einbauen kann, wird noch einige Zeit vergehen. Vielleicht schafft ja einer von euch.

                            S 1 Antwort Letzte Antwort
                            0
                            • W Waly_de

                              @waly_de okay, ich konnte heute noch ein bisschen Zeit aufbringen und hab es tatsächlich geschafft mit dem offiziellen API Server zu kommunizieren. Auch das Schreiben von Werten ist mir gelungen.
                              Hier ist der Ansatz:

                              const axios = require('axios');
                              const mqtt = require('mqtt');
                              const crypto = require('crypto');
                              
                              //****** HIER DEINE DATEN ******
                              const accessKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Access Key
                              const secretKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Secret Key
                              const deviceSNs = ['XXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXX']; // Mehrere Geräte-Seriennummern
                              const MQTT_Clientid = 1
                              //*********************/
                              
                              
                              // Konfigurationen
                              const host = 'api-e.ecoflow.com';
                              const mqttHost = 'mqtt.ecoflow.com';
                              const mqttPort = 8883;
                              const mqttProtocol = 'mqtts';
                              const mqttCert = '0_userdata.0.ecoflow.mqttCert'
                              // Globale Variablen für client und certification
                              let client;
                              let certification;
                              
                              if (!existsState(mqttCert)) {
                                  createState(mqttCert, "");
                              }
                              
                              // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                              function createSignature(params, secretKey) {
                                  const queryString = Object.keys(params)
                                      .sort()
                                      .map(key => `${key}=${params[key]}`)
                                      .join('&');
                                  return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                              }
                              
                              // Funktion zur Überprüfung, ob Zertifikat bereits vorhanden ist
                              async function loadMQTTCertification() {
                                  return new Promise((resolve, reject) => {
                                      // Überprüfen, ob der State existiert
                              
                                      getState(mqttCert, (err, state) => {
                                          if (err) {
                                              console.error('Fehler beim Überprüfen des Zertifikat-States:', err);
                                              return reject(err);
                                          }
                                          if (state && state.val) {
                                              try {
                                                  const storedCert = JSON.parse(state.val);
                                                  // Überprüfen, ob die Felder im Zertifikat vorhanden sind
                                                  if (storedCert.certificateAccount && storedCert.certificatePassword) {
                                                      console.log('Zertifikat aus ioBroker geladen');
                                                      return resolve(storedCert);
                                                  }
                                              } catch (error) {
                                                  console.error('Fehler beim Parsen des Zertifikats:'+ error);
                                              }
                                          }
                                          resolve(null); // Kein Zertifikat gefunden oder ungültig
                                      });
                                  });
                              }
                              
                              // Zertifikate für MQTT abrufen und speichern
                              async function getMQTTCertification() {
                                  const nonce = Math.floor(Math.random() * 1000000);
                                  const timestamp = Date.now();
                                  const params = {
                                      accessKey: accessKey,
                                      nonce: nonce,
                                      timestamp: timestamp
                                  };
                              
                                  const signature = createSignature(params, secretKey);
                              
                                  try {
                                      const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                          headers: {
                                              accessKey: accessKey,
                                              nonce: nonce,
                                              timestamp: timestamp,
                                              sign: signature
                                          }
                                      });
                              
                                      const certData = response.data.data;
                                      // Zertifikat in ioBroker speichern
                                      setState(mqttCert, JSON.stringify(certData), true);
                                      console.log('Zertifikat erfolgreich abgerufen und in ioBroker gespeichert');
                                      return certData;
                                  } catch (error) {
                                      console.error('Fehler beim Abrufen der MQTT-Zertifikate:'+ error);
                                      throw error;
                                  }
                              }
                              
                              // Funktion zum Setzen von Parametern (z.B. permanentWatts) ohne client und certification als Parameter
                              function setPermanentWatts(deviceSN, wattsValue) {
                                  if (!client || !certification) {
                                      console.error("MQTT-Client oder Zertifizierung nicht bereit.");
                                      return;
                                  }
                              
                                  const setTopic = `/open/${certification.certificateAccount}/${deviceSN}/set`;
                              
                                  const message = {
                                      id: Date.now(), // Einzigartige ID
                                      version: "1.0",
                                      cmdCode: "WN511_SET_PERMANENT_WATTS_PACK", // Befehlscode zum Setzen von permanentWatts
                                      params: {
                                          permanentWatts: wattsValue // Der Wert, den du setzen möchtest
                                      }
                                  };
                              
                                  client.publish(setTopic, JSON.stringify(message), (err) => {
                                      if (!err) {
                                          console.log(`Befehl zum Setzen von permanentWatts auf ${wattsValue} W für Gerät ${deviceSN} wurde gesendet.`);
                                      } else {
                                          console.error(`Fehler beim Senden des permanentWatts-Befehls für Gerät ${deviceSN}:` + err);
                                      }
                                  });
                              }
                              
                              // MQTT-Verbindung herstellen und Daten empfangen
                              async function startMQTTClient() {
                                  try {
                                      // Zertifikat aus ioBroker laden, falls vorhanden
                                      certification = await loadMQTTCertification();
                                      if (!certification) {
                                          // Zertifikat neu generieren, wenn es nicht vorhanden ist
                                          certification = await getMQTTCertification();
                                      }
                              
                                      client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                          clientId: 'EcoFlowClient_' + MQTT_Clientid,
                                          username: certification.certificateAccount,
                                          password: certification.certificatePassword,
                                          protocol: mqttProtocol
                                      });
                              
                                      client.on('connect', () => {
                                          console.log('Verbunden mit dem MQTT-Broker');
                              
                                          // Abonnieren von Status und anderen Daten für jedes Gerät
                                          deviceSNs.forEach((deviceSN) => {
                                              const quotaTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                              const statusTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                              
                                              // Abonnieren des Status-Themas
                                              client.subscribe(statusTopic, (err) => {
                                                  if (!err) {
                                                      console.log(`Abonniert auf Status-Topic: ${statusTopic}`);
                                                  } else {
                                                      console.error(`Fehler beim Abonnieren des Status-Themas für Gerät ${deviceSN}:` + err);
                                                  }
                                              });
                              
                                              // Abonnieren des Quota-Themas
                                              client.subscribe(quotaTopic, (err) => {
                                                  if (!err) {
                                                      console.log(`Abonniert auf Quota-Topic: ${quotaTopic}`);
                                                  } else {
                                                      console.error(`Fehler beim Abonnieren des Quota-Themas für Gerät ${deviceSN}:` + err);
                                                  }
                                              });
                                          });
                                      });
                              
                                      client.on('message', (topic, message) => {
                                          console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                      });
                              
                                      client.on('error', (err) => {
                                          console.error('MQTT-Verbindungsfehler:' + err);
                                          client.end();  // Trenne die Verbindung bei einem Fehler
                                          console.log('Verbindung getrennt aufgrund eines Fehlers ' + err);
                                      });
                              
                                      client.on('close', () => {
                                          console.log('MQTT-Verbindung geschlossen');
                                      });
                              
                                  } catch (error) {
                                      console.error('Fehler beim Starten des MQTT-Clients:' + error);
                                  }
                              }
                              // Schließe die Verbindung, wenn das Skript gestoppt wird
                              onStop(function (callback) {
                                  if (client) {
                                      client.end();
                                      log("Script gestoppt");
                                  }
                                  callback();
                              }, 2000);
                              // Start der MQTT-Client-Verbindung
                              startMQTTClient();
                              
                              
                              
                              // Beispielaufruf von setPermanentWatts außerhalb von startMQTTClient()
                              setTimeout(() => {
                                  setPermanentWatts(deviceSNs[0], 3000); // Setzt permanentWatts für ein bestimmtes Gerät auf 300 W
                              }, 5000); // Warte 5 Sekunden, damit der Client verbunden ist
                              

                              Ich würde mich freuen, wenn ihr euch näher damit befasst. bevor ich das ins Skript einbauen kann, wird noch einige Zeit vergehen. Vielleicht schafft ja einer von euch.

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

                              @waly_de Hey, danke. Hab das Script mal probiert, hab die Status Infos der konfigurierten Geräte bekommen. Hab dann versucht den gesendeten Befehl auf slowChgWatts für die Delta 2 Max zu ändern und plötzlich bekomme ich nur noch:

                              MQTT-Verbindungsfehler:Error: Connection refused: Not authorized
                              

                              Keys stimmen. Seltsam.

                              Noch zu deiner Frage beim ‘richtigen’ Script, ich weiss nicht, es war nicht konsistent. Ne weile kam z.B. einfach immer 0% beim Batteriestand zurück, auch nach Neustart des Scripts. In anderen Momenten schien ein Neustart zu helfen.

                              Edit: Die Verbindung geht jetzt wieder, aber ich musste nen neuen Access Key erstellen, der alte war ‘verbrannt’… WTF?
                              Das slowChgWatts muss ich mir nochmal genauer anschauen, das ist anscheinend in nem Array/Subtopic, k.A. wie das in MQTT aussieht.

                              G 1 Antwort Letzte Antwort
                              0
                              • S sirdir

                                @waly_de Hey, danke. Hab das Script mal probiert, hab die Status Infos der konfigurierten Geräte bekommen. Hab dann versucht den gesendeten Befehl auf slowChgWatts für die Delta 2 Max zu ändern und plötzlich bekomme ich nur noch:

                                MQTT-Verbindungsfehler:Error: Connection refused: Not authorized
                                

                                Keys stimmen. Seltsam.

                                Noch zu deiner Frage beim ‘richtigen’ Script, ich weiss nicht, es war nicht konsistent. Ne weile kam z.B. einfach immer 0% beim Batteriestand zurück, auch nach Neustart des Scripts. In anderen Momenten schien ein Neustart zu helfen.

                                Edit: Die Verbindung geht jetzt wieder, aber ich musste nen neuen Access Key erstellen, der alte war ‘verbrannt’… WTF?
                                Das slowChgWatts muss ich mir nochmal genauer anschauen, das ist anscheinend in nem Array/Subtopic, k.A. wie das in MQTT aussieht.

                                G Offline
                                G Offline
                                giovanne
                                schrieb am zuletzt editiert von
                                #1512

                                @sirdir , musst mit den mqtt Client IDs aufpassen, die sind limitiert pro Tag soweit man bisher weiß. Sobald Client ID Limit erreicht ist werden die certificateAccount Daten für mqtt wohl gesperrt und Connection per mqtt geht nicht mehr.
                                Zu dem Zeitpunkt funktioniert http mit den Secret/Key noch.
                                Für mqtt hilft dann aktuell tatsächlich wohl nur neue Secret/Key erstellen.

                                Musst de mal stöbern wenn mehr wissen willst. Bei HA integration ist zb seit v1.1.0 auch eingebaut daß immer die gleiche Client ID pro integration verwendet wird, gab da vorher auch Probleme da für jedes Gerät zuvor eine eigene Client ID verwendet wurde und dadurch das Limit ruck zuck erreicht war ...

                                S 1 Antwort Letzte Antwort
                                0
                                • G giovanne

                                  @sirdir , musst mit den mqtt Client IDs aufpassen, die sind limitiert pro Tag soweit man bisher weiß. Sobald Client ID Limit erreicht ist werden die certificateAccount Daten für mqtt wohl gesperrt und Connection per mqtt geht nicht mehr.
                                  Zu dem Zeitpunkt funktioniert http mit den Secret/Key noch.
                                  Für mqtt hilft dann aktuell tatsächlich wohl nur neue Secret/Key erstellen.

                                  Musst de mal stöbern wenn mehr wissen willst. Bei HA integration ist zb seit v1.1.0 auch eingebaut daß immer die gleiche Client ID pro integration verwendet wird, gab da vorher auch Probleme da für jedes Gerät zuvor eine eigene Client ID verwendet wurde und dadurch das Limit ruck zuck erreicht war ...

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

                                  @giovanne Stimmt, in die HA Integration wollte ich mal rein schauen weil mir nicht ganz klar ist, wie die messages genau aufgebaut sein müssen. Aber wenn es da so enge Limiten gibt, ist das eh wenig nützlich, da werden ja z.T. alle paar Sekunden neue Einspeisewerte gesendet zur Zeit…

                                  S 1 Antwort Letzte Antwort
                                  0
                                  • S sirdir

                                    @giovanne Stimmt, in die HA Integration wollte ich mal rein schauen weil mir nicht ganz klar ist, wie die messages genau aufgebaut sein müssen. Aber wenn es da so enge Limiten gibt, ist das eh wenig nützlich, da werden ja z.T. alle paar Sekunden neue Einspeisewerte gesendet zur Zeit…

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

                                    Hab zumindest das jetzt mal hingekriegt. Funktioniert halt wesentlich besser, wenn man das Datenformat unter MQTT nachschaut und nicht unter HTTP :)

                                    W 1 Antwort Letzte Antwort
                                    0
                                    • S sirdir

                                      Hab zumindest das jetzt mal hingekriegt. Funktioniert halt wesentlich besser, wenn man das Datenformat unter MQTT nachschaut und nicht unter HTTP :)

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

                                      @sirdir guter Hinweis mit der Client ID.
                                      Ich hab das Grip mal angepasst und eine Client ID fest vergeben. Damit sollte das Problem erledigt sein.

                                      const axios = require('axios');
                                      const mqtt = require('mqtt');
                                      const crypto = require('crypto');
                                       
                                      //****** HIER DEINE DATEN ******
                                      const accessKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Access Key
                                      const secretKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Secret Key
                                      const deviceSNs = ['XXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXX']; // Mehrere Geräte-Seriennummern
                                      const MQTT_Clientid = 1
                                      //*********************/
                                       
                                       
                                      // Konfigurationen
                                      const host = 'api-e.ecoflow.com';
                                      const mqttHost = 'mqtt.ecoflow.com';
                                      const mqttPort = 8883;
                                      const mqttProtocol = 'mqtts';
                                      const mqttCert = '0_userdata.0.ecoflow.mqttCert'
                                      // Globale Variablen für client und certification
                                      let client;
                                      let certification;
                                       
                                      if (!existsState(mqttCert)) {
                                          createState(mqttCert, "");
                                      }
                                       
                                      // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                                      function createSignature(params, secretKey) {
                                          const queryString = Object.keys(params)
                                              .sort()
                                              .map(key => `${key}=${params[key]}`)
                                              .join('&');
                                          return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                                      }
                                       
                                      // Funktion zur Überprüfung, ob Zertifikat bereits vorhanden ist
                                      async function loadMQTTCertification() {
                                          return new Promise((resolve, reject) => {
                                              // Überprüfen, ob der State existiert
                                       
                                              getState(mqttCert, (err, state) => {
                                                  if (err) {
                                                      console.error('Fehler beim Überprüfen des Zertifikat-States:', err);
                                                      return reject(err);
                                                  }
                                                  if (state && state.val) {
                                                      try {
                                                          const storedCert = JSON.parse(state.val);
                                                          // Überprüfen, ob die Felder im Zertifikat vorhanden sind
                                                          if (storedCert.certificateAccount && storedCert.certificatePassword) {
                                                              console.log('Zertifikat aus ioBroker geladen');
                                                              return resolve(storedCert);
                                                          }
                                                      } catch (error) {
                                                          console.error('Fehler beim Parsen des Zertifikats:'+ error);
                                                      }
                                                  }
                                                  resolve(null); // Kein Zertifikat gefunden oder ungültig
                                              });
                                          });
                                      }
                                       
                                      // Zertifikate für MQTT abrufen und speichern
                                      async function getMQTTCertification() {
                                          const nonce = Math.floor(Math.random() * 1000000);
                                          const timestamp = Date.now();
                                          const params = {
                                              accessKey: accessKey,
                                              nonce: nonce,
                                              timestamp: timestamp
                                          };
                                       
                                          const signature = createSignature(params, secretKey);
                                       
                                          try {
                                              const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                                  headers: {
                                                      accessKey: accessKey,
                                                      nonce: nonce,
                                                      timestamp: timestamp,
                                                      sign: signature
                                                  }
                                              });
                                       
                                              const certData = response.data.data;
                                              // Zertifikat in ioBroker speichern
                                              setState(mqttCert, JSON.stringify(certData), true);
                                              console.log('Zertifikat erfolgreich abgerufen und in ioBroker gespeichert');
                                              return certData;
                                          } catch (error) {
                                              console.error('Fehler beim Abrufen der MQTT-Zertifikate:'+ error);
                                              throw error;
                                          }
                                      }
                                       
                                      // Funktion zum Setzen von Parametern (z.B. permanentWatts) ohne client und certification als Parameter
                                      function setPermanentWatts(deviceSN, wattsValue) {
                                          if (!client || !certification) {
                                              console.error("MQTT-Client oder Zertifizierung nicht bereit.");
                                              return;
                                          }
                                       
                                          const setTopic = `/open/${certification.certificateAccount}/${deviceSN}/set`;
                                       
                                          const message = {
                                              id: Date.now(), // Einzigartige ID
                                              version: "1.0",
                                              cmdCode: "WN511_SET_PERMANENT_WATTS_PACK", // Befehlscode zum Setzen von permanentWatts
                                              params: {
                                                  permanentWatts: wattsValue // Der Wert, den du setzen möchtest
                                              }
                                          };
                                       
                                          client.publish(setTopic, JSON.stringify(message), (err) => {
                                              if (!err) {
                                                  console.log(`Befehl zum Setzen von permanentWatts auf ${wattsValue} W für Gerät ${deviceSN} wurde gesendet.`);
                                              } else {
                                                  console.error(`Fehler beim Senden des permanentWatts-Befehls für Gerät ${deviceSN}:` + err);
                                              }
                                          });
                                      }
                                       
                                      // MQTT-Verbindung herstellen und Daten empfangen
                                      async function startMQTTClient() {
                                          try {
                                              // Zertifikat aus ioBroker laden, falls vorhanden
                                              certification = await loadMQTTCertification();
                                              if (!certification) {
                                                  // Zertifikat neu generieren, wenn es nicht vorhanden ist
                                                  certification = await getMQTTCertification();
                                              }
                                       
                                              client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                                  clientId: 'EcoFlowClient_' + MQTT_Clientid,
                                                  username: certification.certificateAccount,
                                                  password: certification.certificatePassword,
                                                  protocol: mqttProtocol
                                              });
                                       
                                              client.on('connect', () => {
                                                  console.log('Verbunden mit dem MQTT-Broker');
                                       
                                                  // Abonnieren von Status und anderen Daten für jedes Gerät
                                                  deviceSNs.forEach((deviceSN) => {
                                                      const quotaTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                                      const statusTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                                       
                                                      // Abonnieren des Status-Themas
                                                      client.subscribe(statusTopic, (err) => {
                                                          if (!err) {
                                                              console.log(`Abonniert auf Status-Topic: ${statusTopic}`);
                                                          } else {
                                                              console.error(`Fehler beim Abonnieren des Status-Themas für Gerät ${deviceSN}:` + err);
                                                          }
                                                      });
                                       
                                                      // Abonnieren des Quota-Themas
                                                      client.subscribe(quotaTopic, (err) => {
                                                          if (!err) {
                                                              console.log(`Abonniert auf Quota-Topic: ${quotaTopic}`);
                                                          } else {
                                                              console.error(`Fehler beim Abonnieren des Quota-Themas für Gerät ${deviceSN}:` + err);
                                                          }
                                                      });
                                                  });
                                              });
                                       
                                              client.on('message', (topic, message) => {
                                                  console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                              });
                                       
                                              client.on('error', (err) => {
                                                  console.error('MQTT-Verbindungsfehler:' + err);
                                                  client.end();  // Trenne die Verbindung bei einem Fehler
                                                  console.log('Verbindung getrennt aufgrund eines Fehlers ' + err);
                                              });
                                       
                                              client.on('close', () => {
                                                  console.log('MQTT-Verbindung geschlossen');
                                              });
                                       
                                          } catch (error) {
                                              console.error('Fehler beim Starten des MQTT-Clients:' + error);
                                          }
                                      }
                                      // Schließe die Verbindung, wenn das Skript gestoppt wird
                                      onStop(function (callback) {
                                          if (client) {
                                              client.end();
                                              log("Script gestoppt");
                                          }
                                          callback();
                                      }, 2000);
                                      // Start der MQTT-Client-Verbindung
                                      startMQTTClient();
                                       
                                       
                                       
                                      // Beispielaufruf von setPermanentWatts außerhalb von startMQTTClient()
                                      setTimeout(() => {
                                          setPermanentWatts(deviceSNs[0], 3000); // Setzt permanentWatts für ein bestimmtes Gerät auf 300 W
                                      }, 5000); // Warte 5 Sekunden, damit der Client verbunden ist
                                      
                                      
                                      G S 2 Antworten Letzte Antwort
                                      0
                                      • W Waly_de

                                        @sirdir guter Hinweis mit der Client ID.
                                        Ich hab das Grip mal angepasst und eine Client ID fest vergeben. Damit sollte das Problem erledigt sein.

                                        const axios = require('axios');
                                        const mqtt = require('mqtt');
                                        const crypto = require('crypto');
                                         
                                        //****** HIER DEINE DATEN ******
                                        const accessKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Access Key
                                        const secretKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Secret Key
                                        const deviceSNs = ['XXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXX']; // Mehrere Geräte-Seriennummern
                                        const MQTT_Clientid = 1
                                        //*********************/
                                         
                                         
                                        // Konfigurationen
                                        const host = 'api-e.ecoflow.com';
                                        const mqttHost = 'mqtt.ecoflow.com';
                                        const mqttPort = 8883;
                                        const mqttProtocol = 'mqtts';
                                        const mqttCert = '0_userdata.0.ecoflow.mqttCert'
                                        // Globale Variablen für client und certification
                                        let client;
                                        let certification;
                                         
                                        if (!existsState(mqttCert)) {
                                            createState(mqttCert, "");
                                        }
                                         
                                        // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                                        function createSignature(params, secretKey) {
                                            const queryString = Object.keys(params)
                                                .sort()
                                                .map(key => `${key}=${params[key]}`)
                                                .join('&');
                                            return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                                        }
                                         
                                        // Funktion zur Überprüfung, ob Zertifikat bereits vorhanden ist
                                        async function loadMQTTCertification() {
                                            return new Promise((resolve, reject) => {
                                                // Überprüfen, ob der State existiert
                                         
                                                getState(mqttCert, (err, state) => {
                                                    if (err) {
                                                        console.error('Fehler beim Überprüfen des Zertifikat-States:', err);
                                                        return reject(err);
                                                    }
                                                    if (state && state.val) {
                                                        try {
                                                            const storedCert = JSON.parse(state.val);
                                                            // Überprüfen, ob die Felder im Zertifikat vorhanden sind
                                                            if (storedCert.certificateAccount && storedCert.certificatePassword) {
                                                                console.log('Zertifikat aus ioBroker geladen');
                                                                return resolve(storedCert);
                                                            }
                                                        } catch (error) {
                                                            console.error('Fehler beim Parsen des Zertifikats:'+ error);
                                                        }
                                                    }
                                                    resolve(null); // Kein Zertifikat gefunden oder ungültig
                                                });
                                            });
                                        }
                                         
                                        // Zertifikate für MQTT abrufen und speichern
                                        async function getMQTTCertification() {
                                            const nonce = Math.floor(Math.random() * 1000000);
                                            const timestamp = Date.now();
                                            const params = {
                                                accessKey: accessKey,
                                                nonce: nonce,
                                                timestamp: timestamp
                                            };
                                         
                                            const signature = createSignature(params, secretKey);
                                         
                                            try {
                                                const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                                    headers: {
                                                        accessKey: accessKey,
                                                        nonce: nonce,
                                                        timestamp: timestamp,
                                                        sign: signature
                                                    }
                                                });
                                         
                                                const certData = response.data.data;
                                                // Zertifikat in ioBroker speichern
                                                setState(mqttCert, JSON.stringify(certData), true);
                                                console.log('Zertifikat erfolgreich abgerufen und in ioBroker gespeichert');
                                                return certData;
                                            } catch (error) {
                                                console.error('Fehler beim Abrufen der MQTT-Zertifikate:'+ error);
                                                throw error;
                                            }
                                        }
                                         
                                        // Funktion zum Setzen von Parametern (z.B. permanentWatts) ohne client und certification als Parameter
                                        function setPermanentWatts(deviceSN, wattsValue) {
                                            if (!client || !certification) {
                                                console.error("MQTT-Client oder Zertifizierung nicht bereit.");
                                                return;
                                            }
                                         
                                            const setTopic = `/open/${certification.certificateAccount}/${deviceSN}/set`;
                                         
                                            const message = {
                                                id: Date.now(), // Einzigartige ID
                                                version: "1.0",
                                                cmdCode: "WN511_SET_PERMANENT_WATTS_PACK", // Befehlscode zum Setzen von permanentWatts
                                                params: {
                                                    permanentWatts: wattsValue // Der Wert, den du setzen möchtest
                                                }
                                            };
                                         
                                            client.publish(setTopic, JSON.stringify(message), (err) => {
                                                if (!err) {
                                                    console.log(`Befehl zum Setzen von permanentWatts auf ${wattsValue} W für Gerät ${deviceSN} wurde gesendet.`);
                                                } else {
                                                    console.error(`Fehler beim Senden des permanentWatts-Befehls für Gerät ${deviceSN}:` + err);
                                                }
                                            });
                                        }
                                         
                                        // MQTT-Verbindung herstellen und Daten empfangen
                                        async function startMQTTClient() {
                                            try {
                                                // Zertifikat aus ioBroker laden, falls vorhanden
                                                certification = await loadMQTTCertification();
                                                if (!certification) {
                                                    // Zertifikat neu generieren, wenn es nicht vorhanden ist
                                                    certification = await getMQTTCertification();
                                                }
                                         
                                                client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                                    clientId: 'EcoFlowClient_' + MQTT_Clientid,
                                                    username: certification.certificateAccount,
                                                    password: certification.certificatePassword,
                                                    protocol: mqttProtocol
                                                });
                                         
                                                client.on('connect', () => {
                                                    console.log('Verbunden mit dem MQTT-Broker');
                                         
                                                    // Abonnieren von Status und anderen Daten für jedes Gerät
                                                    deviceSNs.forEach((deviceSN) => {
                                                        const quotaTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                                        const statusTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                                         
                                                        // Abonnieren des Status-Themas
                                                        client.subscribe(statusTopic, (err) => {
                                                            if (!err) {
                                                                console.log(`Abonniert auf Status-Topic: ${statusTopic}`);
                                                            } else {
                                                                console.error(`Fehler beim Abonnieren des Status-Themas für Gerät ${deviceSN}:` + err);
                                                            }
                                                        });
                                         
                                                        // Abonnieren des Quota-Themas
                                                        client.subscribe(quotaTopic, (err) => {
                                                            if (!err) {
                                                                console.log(`Abonniert auf Quota-Topic: ${quotaTopic}`);
                                                            } else {
                                                                console.error(`Fehler beim Abonnieren des Quota-Themas für Gerät ${deviceSN}:` + err);
                                                            }
                                                        });
                                                    });
                                                });
                                         
                                                client.on('message', (topic, message) => {
                                                    console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                                });
                                         
                                                client.on('error', (err) => {
                                                    console.error('MQTT-Verbindungsfehler:' + err);
                                                    client.end();  // Trenne die Verbindung bei einem Fehler
                                                    console.log('Verbindung getrennt aufgrund eines Fehlers ' + err);
                                                });
                                         
                                                client.on('close', () => {
                                                    console.log('MQTT-Verbindung geschlossen');
                                                });
                                         
                                            } catch (error) {
                                                console.error('Fehler beim Starten des MQTT-Clients:' + error);
                                            }
                                        }
                                        // Schließe die Verbindung, wenn das Skript gestoppt wird
                                        onStop(function (callback) {
                                            if (client) {
                                                client.end();
                                                log("Script gestoppt");
                                            }
                                            callback();
                                        }, 2000);
                                        // Start der MQTT-Client-Verbindung
                                        startMQTTClient();
                                         
                                         
                                         
                                        // Beispielaufruf von setPermanentWatts außerhalb von startMQTTClient()
                                        setTimeout(() => {
                                            setPermanentWatts(deviceSNs[0], 3000); // Setzt permanentWatts für ein bestimmtes Gerät auf 300 W
                                        }, 5000); // Warte 5 Sekunden, damit der Client verbunden ist
                                        
                                        
                                        G Offline
                                        G Offline
                                        giovanne
                                        schrieb am zuletzt editiert von
                                        #1516

                                        @waly_de , gern geschehen 😉

                                        1 Antwort Letzte Antwort
                                        1
                                        • W Waly_de

                                          @sirdir guter Hinweis mit der Client ID.
                                          Ich hab das Grip mal angepasst und eine Client ID fest vergeben. Damit sollte das Problem erledigt sein.

                                          const axios = require('axios');
                                          const mqtt = require('mqtt');
                                          const crypto = require('crypto');
                                           
                                          //****** HIER DEINE DATEN ******
                                          const accessKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Access Key
                                          const secretKey = 'XXXXXXXXXXXXXXXX'; // Ersetze dies mit deinem tatsächlichen Secret Key
                                          const deviceSNs = ['XXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXX']; // Mehrere Geräte-Seriennummern
                                          const MQTT_Clientid = 1
                                          //*********************/
                                           
                                           
                                          // Konfigurationen
                                          const host = 'api-e.ecoflow.com';
                                          const mqttHost = 'mqtt.ecoflow.com';
                                          const mqttPort = 8883;
                                          const mqttProtocol = 'mqtts';
                                          const mqttCert = '0_userdata.0.ecoflow.mqttCert'
                                          // Globale Variablen für client und certification
                                          let client;
                                          let certification;
                                           
                                          if (!existsState(mqttCert)) {
                                              createState(mqttCert, "");
                                          }
                                           
                                          // Hilfsfunktion zur Erstellung eines HMAC-SHA256-Signatur
                                          function createSignature(params, secretKey) {
                                              const queryString = Object.keys(params)
                                                  .sort()
                                                  .map(key => `${key}=${params[key]}`)
                                                  .join('&');
                                              return crypto.createHmac('sha256', secretKey).update(queryString).digest('hex');
                                          }
                                           
                                          // Funktion zur Überprüfung, ob Zertifikat bereits vorhanden ist
                                          async function loadMQTTCertification() {
                                              return new Promise((resolve, reject) => {
                                                  // Überprüfen, ob der State existiert
                                           
                                                  getState(mqttCert, (err, state) => {
                                                      if (err) {
                                                          console.error('Fehler beim Überprüfen des Zertifikat-States:', err);
                                                          return reject(err);
                                                      }
                                                      if (state && state.val) {
                                                          try {
                                                              const storedCert = JSON.parse(state.val);
                                                              // Überprüfen, ob die Felder im Zertifikat vorhanden sind
                                                              if (storedCert.certificateAccount && storedCert.certificatePassword) {
                                                                  console.log('Zertifikat aus ioBroker geladen');
                                                                  return resolve(storedCert);
                                                              }
                                                          } catch (error) {
                                                              console.error('Fehler beim Parsen des Zertifikats:'+ error);
                                                          }
                                                      }
                                                      resolve(null); // Kein Zertifikat gefunden oder ungültig
                                                  });
                                              });
                                          }
                                           
                                          // Zertifikate für MQTT abrufen und speichern
                                          async function getMQTTCertification() {
                                              const nonce = Math.floor(Math.random() * 1000000);
                                              const timestamp = Date.now();
                                              const params = {
                                                  accessKey: accessKey,
                                                  nonce: nonce,
                                                  timestamp: timestamp
                                              };
                                           
                                              const signature = createSignature(params, secretKey);
                                           
                                              try {
                                                  const response = await axios.get(`https://${host}/iot-open/sign/certification`, {
                                                      headers: {
                                                          accessKey: accessKey,
                                                          nonce: nonce,
                                                          timestamp: timestamp,
                                                          sign: signature
                                                      }
                                                  });
                                           
                                                  const certData = response.data.data;
                                                  // Zertifikat in ioBroker speichern
                                                  setState(mqttCert, JSON.stringify(certData), true);
                                                  console.log('Zertifikat erfolgreich abgerufen und in ioBroker gespeichert');
                                                  return certData;
                                              } catch (error) {
                                                  console.error('Fehler beim Abrufen der MQTT-Zertifikate:'+ error);
                                                  throw error;
                                              }
                                          }
                                           
                                          // Funktion zum Setzen von Parametern (z.B. permanentWatts) ohne client und certification als Parameter
                                          function setPermanentWatts(deviceSN, wattsValue) {
                                              if (!client || !certification) {
                                                  console.error("MQTT-Client oder Zertifizierung nicht bereit.");
                                                  return;
                                              }
                                           
                                              const setTopic = `/open/${certification.certificateAccount}/${deviceSN}/set`;
                                           
                                              const message = {
                                                  id: Date.now(), // Einzigartige ID
                                                  version: "1.0",
                                                  cmdCode: "WN511_SET_PERMANENT_WATTS_PACK", // Befehlscode zum Setzen von permanentWatts
                                                  params: {
                                                      permanentWatts: wattsValue // Der Wert, den du setzen möchtest
                                                  }
                                              };
                                           
                                              client.publish(setTopic, JSON.stringify(message), (err) => {
                                                  if (!err) {
                                                      console.log(`Befehl zum Setzen von permanentWatts auf ${wattsValue} W für Gerät ${deviceSN} wurde gesendet.`);
                                                  } else {
                                                      console.error(`Fehler beim Senden des permanentWatts-Befehls für Gerät ${deviceSN}:` + err);
                                                  }
                                              });
                                          }
                                           
                                          // MQTT-Verbindung herstellen und Daten empfangen
                                          async function startMQTTClient() {
                                              try {
                                                  // Zertifikat aus ioBroker laden, falls vorhanden
                                                  certification = await loadMQTTCertification();
                                                  if (!certification) {
                                                      // Zertifikat neu generieren, wenn es nicht vorhanden ist
                                                      certification = await getMQTTCertification();
                                                  }
                                           
                                                  client = mqtt.connect(`${mqttProtocol}://${mqttHost}:${mqttPort}`, {
                                                      clientId: 'EcoFlowClient_' + MQTT_Clientid,
                                                      username: certification.certificateAccount,
                                                      password: certification.certificatePassword,
                                                      protocol: mqttProtocol
                                                  });
                                           
                                                  client.on('connect', () => {
                                                      console.log('Verbunden mit dem MQTT-Broker');
                                           
                                                      // Abonnieren von Status und anderen Daten für jedes Gerät
                                                      deviceSNs.forEach((deviceSN) => {
                                                          const quotaTopic = `/open/${certification.certificateAccount}/${deviceSN}/quota`;
                                                          const statusTopic = `/open/${certification.certificateAccount}/${deviceSN}/status`;
                                           
                                                          // Abonnieren des Status-Themas
                                                          client.subscribe(statusTopic, (err) => {
                                                              if (!err) {
                                                                  console.log(`Abonniert auf Status-Topic: ${statusTopic}`);
                                                              } else {
                                                                  console.error(`Fehler beim Abonnieren des Status-Themas für Gerät ${deviceSN}:` + err);
                                                              }
                                                          });
                                           
                                                          // Abonnieren des Quota-Themas
                                                          client.subscribe(quotaTopic, (err) => {
                                                              if (!err) {
                                                                  console.log(`Abonniert auf Quota-Topic: ${quotaTopic}`);
                                                              } else {
                                                                  console.error(`Fehler beim Abonnieren des Quota-Themas für Gerät ${deviceSN}:` + err);
                                                              }
                                                          });
                                                      });
                                                  });
                                           
                                                  client.on('message', (topic, message) => {
                                                      console.log(`Nachricht empfangen von Topic ${topic}: ${message.toString()}`);
                                                  });
                                           
                                                  client.on('error', (err) => {
                                                      console.error('MQTT-Verbindungsfehler:' + err);
                                                      client.end();  // Trenne die Verbindung bei einem Fehler
                                                      console.log('Verbindung getrennt aufgrund eines Fehlers ' + err);
                                                  });
                                           
                                                  client.on('close', () => {
                                                      console.log('MQTT-Verbindung geschlossen');
                                                  });
                                           
                                              } catch (error) {
                                                  console.error('Fehler beim Starten des MQTT-Clients:' + error);
                                              }
                                          }
                                          // Schließe die Verbindung, wenn das Skript gestoppt wird
                                          onStop(function (callback) {
                                              if (client) {
                                                  client.end();
                                                  log("Script gestoppt");
                                              }
                                              callback();
                                          }, 2000);
                                          // Start der MQTT-Client-Verbindung
                                          startMQTTClient();
                                           
                                           
                                           
                                          // Beispielaufruf von setPermanentWatts außerhalb von startMQTTClient()
                                          setTimeout(() => {
                                              setPermanentWatts(deviceSNs[0], 3000); // Setzt permanentWatts für ein bestimmtes Gerät auf 300 W
                                          }, 5000); // Warte 5 Sekunden, damit der Client verbunden ist
                                          
                                          
                                          S Offline
                                          S Offline
                                          sirdir
                                          schrieb am zuletzt editiert von sirdir
                                          #1517

                                          @waly_de das war @giovanne :)

                                          Ich hab das Format jetzt verstanden un konnte diverse Werte setzen.

                                          Was mir noch nicht ganz klar ist, der z.B. batSoc taucht im quota wohl nur auf, wenn er sich ändert… abfragen kann man den nicht?
                                          und z.B. die Einspeisekontrolle ein/ausschalten, dafür gibt’s keinen Parameter? Dann liesse sich das Script ja schon mal nicht komplett umschreiben…

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          799

                                          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