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. ioBroker Allgemein
  4. Venus V3.0 API Token

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Venus V3.0 API Token

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
6 Beiträge 4 Kommentatoren 809 Aufrufe 2 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.
  • G Gismoh

    @ottelo @steffen-5

    danke für eure Rückmeldungen.

    Ich bin da aktuell noch mitten in der Umsetzung.
    Grundsätzlich funktioniert die reine Skriptlösung – man braucht also keinen zusätzlichen Docker oder andere externe Tools. JS-Skripte im ioBroker reichen völlig aus.

    Derzeit arbeite ich eher an der Steuerung und Logik. Ziel ist u.a. eine SoC-Berücksichtigung, die Marstek selbst nicht vorsieht. Also z.B.: Akku nur bis XX % laden oder nur bis XX % entladen – frei im Skript einstellbar.

    Außerdem möchte ich eine regelbare Lade-/Entladeleistung integrieren.
    In der App kann man zwar Grenzen setzen (z.B. max. 800 W oder 2.500 W), aber:

    Bei der Entladung halten sich die Speicher an die eingestellte Begrenzung (u.a. wegen Leitungs-/Brandschutz).

    Beim Laden leider nicht – selbst wenn man 800 W vorgibt, ziehen die Speicher problemlos 2.500 W. Für die Leitungen macht es aber keinen Unterschied, ob der Strom „+“ oder „–“ ist (Laden/Entladen) – belastet werden sie gleich stark.

    Da ich selbst nicht programmieren kann, nutze ich KI zur Unterstützung. Allerdings stoße ich dabei immer wieder (trotz bezahlter Tarife) auf Sperren und Timeouts, was das Ganze ziemlich ausbremst.

    Als Nächstes möchte ich eine Mehr-Speicher-Lösung sauber umsetzen. Erste Ansätze habe ich bereits bei mir integriert. Auch der API-Abruf läuft momentan noch in einem separaten Skript – den würde ich dann einarbeiten, sobald die Basis stabil läuft.

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

    @gismoh
    Hallo gismoh
    habe die venus V3.0 und habe mir lan und API freischalten lassen
    wie komme ich an den API Token?

    Gruß Stephan

    G 1 Antwort Letzte Antwort
    0
    • S stephan61

      @gismoh
      Hallo gismoh
      habe die venus V3.0 und habe mir lan und API freischalten lassen
      wie komme ich an den API Token?

      Gruß Stephan

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

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

      Beste Grüße!

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

      S 1 Antwort Letzte Antwort
      0
      • 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.

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


              Support us

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

              640

              Online

              32.7k

              Benutzer

              82.3k

              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