Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. ioBroker Allgemein
  4. Venus V3.0 API Token

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    698

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

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

Venus V3.0 API Token

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
27 Beiträge 9 Kommentatoren 1.8k Aufrufe 8 Beobachtet
  • Ä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.
  • G Gismoh

    @stephan61
    Hallo stephan61,
    hatte es via http Toolkit gemacht.

    Beste Grüße!

    S Offline
    S Offline
    stephan61
    schrieb am zuletzt editiert von
    #3

    @gismoh
    hallo gismoh
    liest du die local api aus ?
    oder kannst du mir helfen wie ich die Daten aus der local Api bekommen
    Gruß Stephan

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      stephan61
      schrieb am zuletzt editiert von
      #4

      Hallo ich versuche meine Marstek Venus E 3 über die locale Api abzufragen.

      habe folgenden Code

      const client = dgram.createSocket('udp4');
      
      const venusIp = '192.168.178.15'; // Ersetzen Sie durch die tatsächliche IP
      const venusPort = 30000; // Standardport der lokalen API
      
      // Funktion zum Senden eines Befehls und Empfangen der Antwort
      function sendApiCommand(command, callback) {
          const message = Buffer.from(JSON.stringify(command));
          client.send(message, venusPort, venusIp, (err) => {
              if (err) {
                  console.error(`Fehler beim Senden des UDP-Befehls: ${err}`);
                  if (callback) callback(err, null);
              }
          });
      
          // Listener für Antworten
          client.on('message', (msg, rinfo) => {
              try {
                  const response = JSON.parse(msg.toString());
                  if (callback) callback(null, response);
                  client.close(); // Socket nach Antwort schließen oder offen lassen, je nach Bedarf
              } catch (e) {
                  console.error(`Fehler beim Parsen der JSON-Antwort: ${e}`);
              }
          });
      }
      
      // Beispiel: Abfrage des Batteriestatus
      const statusCommand = {
          "command": "Bat.GetStatus",
          "param": {"id": 0}
      };
      
      sendApiCommand(statusCommand, (err, data) => {
          if (!err && data) {
              console.log("Batteriestatus erhalten:", data);
              // Datenpunkte in ioBroker erstellen/aktualisieren (Beispiel)
              setState('0_userdata.0.MarstekVenus.Status', JSON.stringify(data));
              setState('0_userdata.0.MarstekVenus.SOC', data.soc);
          }
      });
      code_text
      

      leider kommt keine Antwort
      Anbei die Apibeschreibung Marstek_Device_Open_API_EN_.Rev1.0.pdf

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        matzze2000
        schrieb am zuletzt editiert von
        #5

        Dass du keine Antworten bekommst liegt vermutlich an der Firmware Version. Ich habe auch die letzten Tage rumgetestet und irgendwann mal 2-3 Antworten bekommen und dann ohne Änderungen keine mehr. Ich habe dann im PV Forum gesehen, dass es deutlich aktuellere FW Versionen mit API Fixes gibt, die muss man aber über die Feedback Funktion in der Marstek App beim Support anfragen und freischalten lassen. Damit kann ich jetzt auch die API abfragen. Hier mal mein sehr rudimentäres TS Script mit dem ich die aktuelle Leistung und Batteriestand abfragen kann:

        const DEVICE_IP = "192.168.1.143"; // IP deines Marstek Venus E 3.0
        const DEVICE_PORT = 30000; // UDP-Port laut App
        
        const dgram = require("dgram");
        const socket = dgram.createSocket("udp4");
        
        // Datenpunkte
        const SOC_STATE = "0_userdata.0.marstek.soc";
        const GRID_POWER_STATE = "0_userdata.0.marstek.gridPower";
        
        createState(SOC_STATE, 0, { name: "State of Charge", unit: "%", type: "number", role: "value.battery" });
        createState(GRID_POWER_STATE, 0, { name: "Grid Power", unit: "W", type: "number", role: "value.power" });
        
        // JSON-RPC Requests
        const batRequest = JSON.stringify({ id: 1, method: "Bat.GetStatus", params: { id: 0 } });
        const esRequest = JSON.stringify({ id: 2, method: "ES.GetStatus", params: { id: 0 } });
        const discoverRequest = JSON.stringify({ id: 0, method: "Marstek.GetDevice", params: { ble_mac: "0" } });
        
        // UDP-Antwortverarbeitung
        socket.on("message", (msg: Buffer) => {
            try {
                const response = JSON.parse(msg.toString());
                log("UDP Antwort: " + msg.toString(), "info");
        
                if (response.result) {
                    if (response.id === 1 && response.result.soc !== undefined) {
                        setState(SOC_STATE, parseFloat(response.result.soc));
                    }
                    if (response.id === 2 && response.result.ongrid_power !== undefined) {
                        setState(GRID_POWER_STATE, parseFloat(response.result.ongrid_power));
                        setState(SOC_STATE, parseFloat(response.result.bat_soc));
                    }
                }
            } catch (err) {
                log("Fehler beim Parsen der Antwort: " + err, "error");
            }
        });
        
        // Fehlerbehandlung
        socket.on("error", (err) => {
            log("UDP Fehler: " + err.message, "error");
        });
        
        // Zyklisches Abfragen
        schedule("*/30 * * * * *", () => {
            // log("Sende Bat.GetStatus an Marstek", "info");
            // socket.send(batRequest, 0, batRequest.length, DEVICE_PORT, DEVICE_IP);
        
            //log("Sende ES.GetStatus an Marstek", "info");
            socket.send(esRequest, 0, esRequest.length, DEVICE_PORT, DEVICE_IP);
        });
        
        // // Einmaliger Discovery-Request zum Start
        // setTimeout(() => {
        //     log("Sende Discovery-Request (Marstek.GetDevice)", "info");
        //     socket.send(discoverRequest, 0, discoverRequest.length, DEVICE_PORT, DEVICE_IP);
        // }, 10000);
        
        // Socket starten
        socket.bind(); // kein fester Source-Port nötig
        

        Läuft damit zuverlässig. Und ich denke alle anderen Sachen aus der API Doku kann man dann auch recht einfach umsetzen, ist ja überschaubar von der Komplexität.

        1 Antwort Letzte Antwort
        0
        • D Offline
          D Offline
          derkleinschreiber
          schrieb am zuletzt editiert von derkleinschreiber
          #6

          Hallo !
          vielen Dank für den Code !

          Api freischalten geht seit etwa Dezember direkt in der App.

          Geht einwandfrei !

          --> ein bischen Offtopic: Sollte jemand lieber mit Blockly "programmieren" geht das sehr einfach mit exec aufrufen (mit netcat = nc)

          echo '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000

          Alles andere aus der API kann man damit auch abfragen / übertragen / Modes setzen etc. Habs grad probiert. Wichtig ist nur das vorher einmalig :

          echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0" } } ' | nc -u -w 1 192.168.178.255 30000 gesendet wird damit er die UDP API aktiviert.

          Manchmnal antwort mein Marstek Venus E v3 erst beim 2ten mal. Offenbar muss er nach längerer Zeit immer erst auffwachen.

          K 2 Antworten Letzte Antwort
          0
          • S Offline
            S Offline
            schneire
            schrieb am zuletzt editiert von schneire
            #7

            Hallo und eine Bitte an den derkleinschreiber ,

            kannst du bitte dein Blockly bereitstellen, damit ich als Beginner mit dem Venus E schon mal einen gute Basis habe?!

            Danke schön

            influxdb2.7, mqtt, Grafana, Raspberry Pi5, Venus-Os m.Raspi3, JK-BMS

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              derkleinschreiber
              schrieb am zuletzt editiert von derkleinschreiber
              #8

              bef35fb0-b95d-44ae-a186-156d574ac973-image.png

              echo '{ "id": 1, "method": "ES.GetMode", "params": { "id": 0 } }'| nc -u -w 1 192.168.178.149 30000

              Ich hab den Loglevel auf "fehler" gesetzt damit ichs im log besser sehe..
              So kannst du jeden Befehl aus der Api aufrufen.

              Wenn du die Antwort auswerten/verarbeiten möchtest ist das die Variable "result"

              Du must Ihm vorher aber einmal aufwecken mit dem "Suchbefehl". Siehe Api bzw. mein Post weiß es grad nicht auswendig

              NC = Netcat ist ein exteres Programm - sollte das in deinem Image nicht drin sein must du es vorher nachinstallieren mit "apt-get install -y netcat" auf der commandozeile

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                schneire
                schrieb am zuletzt editiert von
                #9

                Danke dir für die Anleitung womit ich schon ein wenig weiter bin:
                a) Ich habe NC nur mit apt install -y netcat-openbsd in den Raspi bekommen.
                b) mein Blockly sieht so aus und erzeugt (manchmal) Error und ich schreibe es in die Variable "M-Power2" als string:

                Venus.jpg

                influxdb2.7, mqtt, Grafana, Raspberry Pi5, Venus-Os m.Raspi3, JK-BMS

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  schneire
                  schrieb am zuletzt editiert von
                  #10

                  Wert.jpg

                  influxdb2.7, mqtt, Grafana, Raspberry Pi5, Venus-Os m.Raspi3, JK-BMS

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    schneire
                    schrieb am zuletzt editiert von schneire
                    #11

                    Wenn ich nun einen zweite Abfrage "Bat.GetMode" anhänge gibt es nur Fehler was mache ich hier falsch?
                    Bat-get.jpg

                    influxdb2.7, mqtt, Grafana, Raspberry Pi5, Venus-Os m.Raspi3, JK-BMS

                    1 Antwort Letzte Antwort
                    0
                    • D Offline
                      D Offline
                      derkleinschreiber
                      schrieb am zuletzt editiert von derkleinschreiber
                      #12

                      Hallo.
                      Dein Linux Image ist offenbar Openbsd basiert, deshalb brauchst du einen anden Install code.. aber das hat ja geklappt.

                      Der "Error" ist kein Error.. im log steht das nur weil du / ich den Output als "Fehler" Ausgabe deklarierst.

                      Im 2ten Beispiel hast du 2 sachen geändert.

                      1. Du fragst als GetDevice ab.. -> Das must du wiklirch nur einmalig nach dem einschalten des Venus machen. Er öffnet darauf hin die Api und antwortet solang bis er wirklich aus war. Danach schickst du direkt das nächste Kommando. Eventuell ist dem Venus oder dem Netzwerk zu schnell.. und es gibt dann keine Antwort.

                      Mach mal 3 Programme raus und starte die nacheinander. Oder mach einfach mal 2 Sekunden Pause dazwischen.. Erst GetDevice, dann GetMode, und dann Bat.getmode..

                      echo '{ "id": 1, "method": "ES.GetMode", "params": { "id": 0 } }'| nc -u -w 1 192.168.178.149 30000 -> "-w 1" bedeutet nach einer Sekunde verbindung abbrechen und ausgeben. Eventuell ist noch gar kein Antwort-Paket angekommen - oder das Anfrage-Paket ist nicht beim Marstek angekommen..

                      Vielleicht hast du auch beim kopieren der Befehle nen Fehler gemacht. IP / Port ? und mir ist aufgefallen das man aus der API Doku nicht rauskopieren kann. (Die Klammern sind dann immer falsch).

                      Du kannst die Netcat Befehle auch erst alle direkt auf der Console testen mit und ohne -w "Sekunden" . Dann kannst du sehen ob du überhaupt direkt jedes mal ne Antwort bekommst und auch mal gucken wie schnell das klappt.

                      nachtrag: Welche Firmware Version hast auf dem Venus ? Und ist es Version 1 2 oder 3
                      nachtrag2: ich lass mir auch den gesendeten Befehl ins log schreiben, so kann man sehen oder tatsächlich der richitge Befehl gesendet wird (wegen dem hochkomma problem - ich weiß nicht ob das bei OpenBsd genauso klappt wie bei mir)

                      1 Antwort Letzte Antwort
                      0
                      • S Offline
                        S Offline
                        schneire
                        schrieb am zuletzt editiert von
                        #13

                        Bei mir läuft auf dem Venus 3.0 eine Firmware V147.117.112 leider nicht ohne Probleme so dass ich deshalb auch Firmware-Fehler / API-Fehler vermute. Mal sehen was mit den Support für einen Version kommt. Und auch mit Pausen waren noch nicht erfolgreich.

                        influxdb2.7, mqtt, Grafana, Raspberry Pi5, Venus-Os m.Raspi3, JK-BMS

                        1 Antwort Letzte Antwort
                        0
                        • T Offline
                          T Offline
                          technogodder
                          schrieb am zuletzt editiert von
                          #14

                          Hallo, ich habe seit gestern auch den Marstek Venus E 3.0 und habe den Support angeschrieben, dass ich ebenfalls eine Freigabe für Smarthome benötige. Sie haben mir heute geantwortet, dass sie jetzt für mich MQTT freigeschaltet haben. Eigentlich benötige ich in iobroker den Füllstand, ob lädt oder entlädt, und die Leistung.

                          Jetzt stehe ich allerdings auf dem Schlauch, normalerweise müsste ich doch jetzt meine iobroker-ip und port irgendwo in der Marstek-App eingeben oder habe ich einen Denkfehler? Neue Einstellungen habe ich jetzt nicht in der App, nur das bekannte "Local API" und den Port.

                          1 Antwort Letzte Antwort
                          0
                          • D derkleinschreiber

                            Hallo !
                            vielen Dank für den Code !

                            Api freischalten geht seit etwa Dezember direkt in der App.

                            Geht einwandfrei !

                            --> ein bischen Offtopic: Sollte jemand lieber mit Blockly "programmieren" geht das sehr einfach mit exec aufrufen (mit netcat = nc)

                            echo '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000

                            Alles andere aus der API kann man damit auch abfragen / übertragen / Modes setzen etc. Habs grad probiert. Wichtig ist nur das vorher einmalig :

                            echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0" } } ' | nc -u -w 1 192.168.178.255 30000 gesendet wird damit er die UDP API aktiviert.

                            Manchmnal antwort mein Marstek Venus E v3 erst beim 2ten mal. Offenbar muss er nach längerer Zeit immer erst auffwachen.

                            K Offline
                            K Offline
                            KSN
                            schrieb am zuletzt editiert von
                            #15

                            @derkleinschreiber sagte in Venus V3.0 API Token:

                            --> ein bischen Offtopic: Sollte jemand lieber mit Blockly "programmieren" geht das sehr einfach mit exec aufrufen (mit netcat = nc)

                            echo '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000

                            Alles andere aus der API kann man damit auch abfragen / übertragen / Modes setzen etc. Habs grad probiert. Wichtig ist nur das vorher einmalig :

                            echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0" } } ' | nc -u -w 1 192.168.178.255 30000 gesendet wird damit er die UDP API aktiviert.

                            WIe @derkleinschreiber oben sagte, versuche ich, meine Venus E 3.0 (am LAN) und CT002 über die API auszulesen mit netcat.
                            Venus Version ist V148.
                            ping auf die Adresse geht.
                            Wenn ich Kommandos sende erhalte ich auch eine Antwort, alledings immer einen Fehler.
                            Prinzipiell scheint daher die Venus ja zu antworten.

                            auch nach mehrmaligem Senden von Bat.GetStatus :
                            Kommando:
                            MARSTEK_Result=echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0"}} ' | nc -u -w 1 192.168.2.33 30000
                            Ergebnis:
                            MARSTEK_Result={ "id": 0, "src": "VenusE 3.0-bc2a33ad06aa", "error": { "code": -32700, "message": "Parse error", "data": 402 } }

                            Hat jemand eine Idee, woran es liegen kann?

                            Herzlichen Dank für euren Support!

                            L 1 Antwort Letzte Antwort
                            0
                            • K KSN

                              @derkleinschreiber sagte in Venus V3.0 API Token:

                              --> ein bischen Offtopic: Sollte jemand lieber mit Blockly "programmieren" geht das sehr einfach mit exec aufrufen (mit netcat = nc)

                              echo '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000

                              Alles andere aus der API kann man damit auch abfragen / übertragen / Modes setzen etc. Habs grad probiert. Wichtig ist nur das vorher einmalig :

                              echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0" } } ' | nc -u -w 1 192.168.178.255 30000 gesendet wird damit er die UDP API aktiviert.

                              WIe @derkleinschreiber oben sagte, versuche ich, meine Venus E 3.0 (am LAN) und CT002 über die API auszulesen mit netcat.
                              Venus Version ist V148.
                              ping auf die Adresse geht.
                              Wenn ich Kommandos sende erhalte ich auch eine Antwort, alledings immer einen Fehler.
                              Prinzipiell scheint daher die Venus ja zu antworten.

                              auch nach mehrmaligem Senden von Bat.GetStatus :
                              Kommando:
                              MARSTEK_Result=echo '{ "id": 0, "method": "Marstek.GetDevice", "params": { "ble_mac":"0"}} ' | nc -u -w 1 192.168.2.33 30000
                              Ergebnis:
                              MARSTEK_Result={ "id": 0, "src": "VenusE 3.0-bc2a33ad06aa", "error": { "code": -32700, "message": "Parse error", "data": 402 } }

                              Hat jemand eine Idee, woran es liegen kann?

                              Herzlichen Dank für euren Support!

                              L Offline
                              L Offline
                              logaems
                              schrieb am zuletzt editiert von logaems
                              #16

                              @KSN
                              setze als ble_mac mal die Bluetoothadresse des Gerätes ein. SIe steht auf dem Aufkleber des Gerätes. So eingeben, wie sie dort steht ... also anstellle der "0" "12ab34cd .."
                              Irgendwie sehe ich das in der v2.0 Doku der API nicht mehr. Ich hatte nach der v1.0 gearbeitet
                              Es wird ja mit einem parsing-Fehler geantwortet. Vielleicht musst du die "0" auch ohne "" senden. Ich las mal irgendwo, dass Marstek die Variablentypen auch mal ändert.

                              1 Antwort Letzte Antwort
                              0
                              • H Nicht stören
                                H Nicht stören
                                Hansi1234
                                schrieb am zuletzt editiert von Hansi1234
                                #17

                                puh weil ich jetzt ewig herumgetan habe, hier meine Tip: Nach dem Ändern der Ports von 30000 auf 2220 ging es. Hab das Script @stephan61 von ChatGPT erweitern lassen. @technogodder das gleiche Problem hatte ich auch. Versuchs mit der Portänderung und folgendem Script:

                                /***********************
                                 MARSTEK VENUS E UDP
                                 erweiterte Version
                                ***********************/
                                
                                const DEVICE_IP = "192.168.179.103";
                                const DEVICE_PORT = 2220;
                                
                                const POLL_INTERVAL = 10; // Sekunden
                                const TIMEOUT = 30; // Sekunden bis Gerät als offline gilt
                                const DEBUG = false;
                                
                                const dgram = require("dgram");
                                let socket = dgram.createSocket("udp4");
                                
                                let lastResponse = Date.now();
                                
                                /***********************
                                 STATES
                                ***********************/
                                
                                const BASE = "0_userdata.0.marstek.";
                                
                                const STATES = {
                                    soc: BASE + "battery.soc",
                                    batteryPower: BASE + "battery.power",
                                    gridPower: BASE + "grid.power",
                                    pvPower: BASE + "pv.power",
                                    temperature: BASE + "device.temperature",
                                    online: BASE + "device.online"
                                };
                                
                                createState(STATES.soc, 0, { name: "Battery SOC", unit: "%", type: "number", role: "value.battery" });
                                createState(STATES.batteryPower, 0, { name: "Battery Power", unit: "W", type: "number", role: "value.power" });
                                createState(STATES.gridPower, 0, { name: "Grid Power", unit: "W", type: "number", role: "value.power" });
                                createState(STATES.pvPower, 0, { name: "PV Power", unit: "W", type: "number", role: "value.power" });
                                createState(STATES.temperature, 0, { name: "Temperature", unit: "°C", type: "number", role: "value.temperature" });
                                createState(STATES.online, false, { name: "Device Online", type: "boolean", role: "indicator.reachable" });
                                
                                /***********************
                                 JSON RPC REQUESTS
                                ***********************/
                                
                                const requests = {
                                
                                    battery: JSON.stringify({
                                        id: 1,
                                        method: "Bat.GetStatus",
                                        params: { id: 0 }
                                    }),
                                
                                    energy: JSON.stringify({
                                        id: 2,
                                        method: "ES.GetStatus",
                                        params: { id: 0 }
                                    }),
                                
                                    discover: JSON.stringify({
                                        id: 0,
                                        method: "Marstek.GetDevice",
                                        params: { ble_mac: "0" }
                                    })
                                };
                                
                                /***********************
                                 UDP MESSAGE
                                ***********************/
                                
                                socket.on("message", (msg) => {
                                
                                    const text = msg.toString();
                                
                                    if (DEBUG) log("UDP: " + text);
                                
                                    lastResponse = Date.now();
                                    setState(STATES.online, true, true);
                                
                                    try {
                                
                                        const data = JSON.parse(text);
                                
                                        if (!data.result) return;
                                
                                        const r = data.result;
                                
                                        // SOC
                                        if (r.soc !== undefined) {
                                            setState(STATES.soc, Number(r.soc), true);
                                        }
                                
                                        if (r.bat_soc !== undefined) {
                                            setState(STATES.soc, Number(r.bat_soc), true);
                                        }
                                
                                        // Batterie Leistung
                                        if (r.bat_power !== undefined) {
                                            setState(STATES.batteryPower, Number(r.bat_power), true);
                                        }
                                
                                        // Netzleistung
                                        if (r.ongrid_power !== undefined) {
                                            setState(STATES.gridPower, Number(r.ongrid_power), true);
                                        }
                                
                                        // PV Leistung
                                        if (r.pv_power !== undefined) {
                                            setState(STATES.pvPower, Number(r.pv_power), true);
                                        }
                                
                                        // Temperatur
                                        if (r.temp !== undefined) {
                                            setState(STATES.temperature, Number(r.temp), true);
                                        }
                                
                                    } catch (e) {
                                
                                        log("Parse Fehler: " + e, "error");
                                
                                    }
                                
                                });
                                
                                /***********************
                                 ERROR HANDLING
                                ***********************/
                                
                                socket.on("error", (err) => {
                                
                                    log("UDP Fehler: " + err.message, "error");
                                
                                });
                                
                                /***********************
                                 SOCKET START
                                ***********************/
                                
                                socket.on("listening", () => {
                                
                                    const addr = socket.address();
                                
                                    log("Marstek UDP gestartet: " + addr.address + ":" + addr.port);
                                
                                });
                                
                                socket.bind();
                                
                                /***********************
                                 POLLING
                                ***********************/
                                
                                function pollDevice() {
                                
                                    try {
                                
                                        socket.send(requests.energy, 0, requests.energy.length, DEVICE_PORT, DEVICE_IP);
                                        socket.send(requests.battery, 0, requests.battery.length, DEVICE_PORT, DEVICE_IP);
                                
                                    } catch (e) {
                                
                                        log("Send Fehler: " + e, "error");
                                
                                    }
                                
                                }
                                
                                schedule("*/" + POLL_INTERVAL + " * * * * *", pollDevice);
                                
                                /***********************
                                 DISCOVERY
                                ***********************/
                                
                                setTimeout(() => {
                                
                                    if (DEBUG) log("Discovery Request");
                                
                                    socket.send(requests.discover, 0, requests.discover.length, DEVICE_PORT, DEVICE_IP);
                                
                                }, 5000);
                                
                                /***********************
                                 OFFLINE CHECK
                                ***********************/
                                
                                setInterval(() => {
                                
                                    if (Date.now() - lastResponse > TIMEOUT * 1000) {
                                
                                        setState(STATES.online, false, true);
                                
                                    }
                                
                                }, 5000);
                                
                                1 Antwort Letzte Antwort
                                0
                                • G Offline
                                  G Offline
                                  Gismoh
                                  schrieb am zuletzt editiert von Gismoh
                                  #18

                                  Habe nun auch komplett umgeschwenkt auf die Api Steuerung.
                                  Mit der neuen Firmware hatte ich zwar auch die Api Funktion in der App, aber der Speicher hatte nicht geantwortet.
                                  Der Support hatte mir dann neuere Firmware freigeschaltet, und ja hat geklappt, die Speicher kann ich nun via API regeln.
                                  Das Laden hatte via Skript schon mal geklappt, mal sehen, wie es sich nachher verhält, beim endladen. Das neue Skript ist noch "frisch".

                                  ioBroker auf: Lenovo ThinkCentre M910Q Tiny i5-7500T 16 GB mit proxmox in VM (Bookworm)

                                  H 1 Antwort Letzte Antwort
                                  0
                                  • G Gismoh

                                    Habe nun auch komplett umgeschwenkt auf die Api Steuerung.
                                    Mit der neuen Firmware hatte ich zwar auch die Api Funktion in der App, aber der Speicher hatte nicht geantwortet.
                                    Der Support hatte mir dann neuere Firmware freigeschaltet, und ja hat geklappt, die Speicher kann ich nun via API regeln.
                                    Das Laden hatte via Skript schon mal geklappt, mal sehen, wie es sich nachher verhält, beim endladen. Das neue Skript ist noch "frisch".

                                    H Nicht stören
                                    H Nicht stören
                                    Hansi1234
                                    schrieb am zuletzt editiert von
                                    #19

                                    @Gismoh sagte in Venus V3.0 API Token:

                                    Habe nun auch komplett umgeschwenkt auf die Api Steuerung.
                                    Mit der neuen Firmware hatte ich zwar auch die Api Funktion in der App, aber der Speicher hatte nicht geantwortet.
                                    Der Support hatte mir dann neuere Firmware freigeschaltet, und ja hat geklappt, die Speicher kann ich nun via API regeln.
                                    Das Laden hatte via Skript schon mal geklappt, mal sehen, wie es sich nachher verhält, beim endladen. Das neue Skript ist noch "frisch".

                                    Kannst du deinen Stand hier aktuell halten? Mein Script ist überhaupt noch nicht ausgereift und mit meiner Shelly Emulation hab ich nur Probleme

                                    G 2 Antworten Letzte Antwort
                                    0
                                    • H Hansi1234

                                      @Gismoh sagte in Venus V3.0 API Token:

                                      Habe nun auch komplett umgeschwenkt auf die Api Steuerung.
                                      Mit der neuen Firmware hatte ich zwar auch die Api Funktion in der App, aber der Speicher hatte nicht geantwortet.
                                      Der Support hatte mir dann neuere Firmware freigeschaltet, und ja hat geklappt, die Speicher kann ich nun via API regeln.
                                      Das Laden hatte via Skript schon mal geklappt, mal sehen, wie es sich nachher verhält, beim endladen. Das neue Skript ist noch "frisch".

                                      Kannst du deinen Stand hier aktuell halten? Mein Script ist überhaupt noch nicht ausgereift und mit meiner Shelly Emulation hab ich nur Probleme

                                      G Offline
                                      G Offline
                                      Gismoh
                                      schrieb am zuletzt editiert von
                                      #20

                                      @Hansi1234 gerne.
                                      Wie gesagt kann die steuern, das das Skript zwischen laden und entladen wechselt.
                                      Aber das Timing stimmt aktuell nicht, bin gerade aktiv am testen und quasi am "debuggen".

                                      ioBroker auf: Lenovo ThinkCentre M910Q Tiny i5-7500T 16 GB mit proxmox in VM (Bookworm)

                                      H 1 Antwort Letzte Antwort
                                      0
                                      • G Gismoh

                                        @Hansi1234 gerne.
                                        Wie gesagt kann die steuern, das das Skript zwischen laden und entladen wechselt.
                                        Aber das Timing stimmt aktuell nicht, bin gerade aktiv am testen und quasi am "debuggen".

                                        H Nicht stören
                                        H Nicht stören
                                        Hansi1234
                                        schrieb am zuletzt editiert von
                                        #21

                                        @Gismoh ja, Stichwort Hysterese. Aber gab's da nicht ein Adapter Nulleinspeisung oä?
                                        Hast du es zufällig geschafft, den Akku via uni-meter zu betreiben?

                                        G 2 Antworten Letzte Antwort
                                        0
                                        • H Hansi1234

                                          @Gismoh ja, Stichwort Hysterese. Aber gab's da nicht ein Adapter Nulleinspeisung oä?
                                          Hast du es zufällig geschafft, den Akku via uni-meter zu betreiben?

                                          G Offline
                                          G Offline
                                          Gismoh
                                          schrieb am zuletzt editiert von
                                          #22

                                          @Hansi1234 ne, unimeter habe ich ja gar nicht versucht. Wollte es ja ohne zusätzlichen Code machen, bei mir war ja alles nur im IOBroker als JS. Hatte dort die Regelung nicht hinbekommen, steuern konnte ich ja.
                                          Hatte dies nun komplett verworfen und habe gestern mit der Steuerung über Api angefangen.
                                          Ein Adapter "Nulleinspeisung" kenne ich nicht.

                                          ioBroker auf: Lenovo ThinkCentre M910Q Tiny i5-7500T 16 GB mit proxmox in VM (Bookworm)

                                          1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          660

                                          Online

                                          32.7k

                                          Benutzer

                                          82.6k

                                          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