Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Solarwatt Energymanager flex Daten auslesen die Zweite

NEWS

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

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

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

Solarwatt Energymanager flex Daten auslesen die Zweite

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
solarwattenergymanager flexregex
18 Beiträge 3 Kommentatoren 665 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.
  • D DerAngler

    @arteck Vielen Dank, jetzt bin ich schon mal weiter.
    Ich habe jetzt ein Blockly Script erstellt, was zu Testzwecken 2 Werte abfragt und im debug ausgibt.
    Nächster Schritt ist die Werte in ein Objekt zu schreiben. Ich werde berichten. !

    Mhh, eigentlich wollte ich ein Bild vom Blockly hochladen, es kommt aber nur:
    ERROR Something went wrong while parsing server response

    Also anders:

    var result;
    
    
    try {
      require("request")('http://192.168.178.64/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_batteryChannelGroup_batteryStateOfCharge', async (error, response, result) => {
        console.log(getAttr((function () { try { return JSON.parse(result); } catch (e) { return {}; }})(), 'state'));
      }).on("error", (e) => { console.error(e); });
    } catch (e) { console.error(e); }
    try {
      require("request")('http://192.168.178.64/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_netChannelGroup_netVoltage', async (error, response, result) => {
        console.log(getAttr((function () { try { return JSON.parse(result); } catch (e) { return {}; }})(), 'state'));
      }).on("error", (e) => { console.error(e); });
    } catch (e) { console.error(e); }
    
    D Offline
    D Offline
    DerAngler
    schrieb am zuletzt editiert von
    #5

    Weiter geht´s :
    Ich habe bis jetzt 3 Werte eindeutig identifizieren können (gar nicht so leicht):

    • Netzbezug in Watt
    • Speicherstand Batterie in %
    • Produktion Solar in Watt
      alle Werte können ausgelesen werden:
    • Speicherstand Batterie kann ich so weiterverwenden (auch als Zahl)
    • Produktion Solar in Watt kommt als String, kann ich mir im Moment nur anzeigen lassen, nicht aber weiterverarbeiten
    • Netzbezug in Watt kommt als komischer Wert: javascript.0 (793) script.js.common.Skripte.Abfrage_Solar: 1709489385000|0.0 W
      falls aktuell Netzstrom bezogen wird, kommt dieser mit x Nachkommastellen
      Hier das Blockly zum Auslesen der Werte:
      BlocklyauslesenWerte.JPG

    Und ein zweites Blockly, was den Netzbezug "splittet", einmal vor dem "|", dann werden noch die Nachkommastellen abgeschnitten:

    Blocklyumwandlungwerte.JPG

    Die Objekte dazu sehen so aus:
    Objekte.JPG

    Eine einfache Anzeige in Vis ist testweise erstellt:
    VisSolar.JPG

    Der nächste Schritt ist aus den "json-Strings" "Numbers" zu machen, dass ich das einfacher handhaben kann.

    D mcBirneM 2 Antworten Letzte Antwort
    0
    • D DerAngler

      Weiter geht´s :
      Ich habe bis jetzt 3 Werte eindeutig identifizieren können (gar nicht so leicht):

      • Netzbezug in Watt
      • Speicherstand Batterie in %
      • Produktion Solar in Watt
        alle Werte können ausgelesen werden:
      • Speicherstand Batterie kann ich so weiterverwenden (auch als Zahl)
      • Produktion Solar in Watt kommt als String, kann ich mir im Moment nur anzeigen lassen, nicht aber weiterverarbeiten
      • Netzbezug in Watt kommt als komischer Wert: javascript.0 (793) script.js.common.Skripte.Abfrage_Solar: 1709489385000|0.0 W
        falls aktuell Netzstrom bezogen wird, kommt dieser mit x Nachkommastellen
        Hier das Blockly zum Auslesen der Werte:
        BlocklyauslesenWerte.JPG

      Und ein zweites Blockly, was den Netzbezug "splittet", einmal vor dem "|", dann werden noch die Nachkommastellen abgeschnitten:

      Blocklyumwandlungwerte.JPG

      Die Objekte dazu sehen so aus:
      Objekte.JPG

      Eine einfache Anzeige in Vis ist testweise erstellt:
      VisSolar.JPG

      Der nächste Schritt ist aus den "json-Strings" "Numbers" zu machen, dass ich das einfacher handhaben kann.

      D Offline
      D Offline
      DerAngler
      schrieb am zuletzt editiert von
      #6

      Im Moment ist wenig Zeit zum Basteln. Da eine Anzeige auf dem MagicMirror dann doch etwas langweilig ist....
      Die nächsten Schritte: Aus China 2 x 300V Voltmeter bestellt, die Widerstände, Kondensatoren und Dioden herausgelötet. Das alte Ziffernblatt eingescannt und ein wenig bearbeitet, wieder eingebaut (etwas auf alt getrimmt --> Steam-Punk-mäßig) Zwei Löcher in die Rückwand gebohrt für 2 RGB LED´s. ! Die Voltmeter werden per PWM von einem ESP8266 angesteuert werden (Vorwiderstand 2.2 kOhm), die LED´s (ich glaube 470 Ohm Vorwiderstand) werden je nach Wert mit verschiedenen Farben leuchten.
      20240313_222329.jpg
      20240313_222323.jpg
      Ach ja, noch eine Befestigungsplatte mit dem 3D Drucker gedruckt als Halterung für die Voltmeter.....

      D 1 Antwort Letzte Antwort
      0
      • D DerAngler

        Im Moment ist wenig Zeit zum Basteln. Da eine Anzeige auf dem MagicMirror dann doch etwas langweilig ist....
        Die nächsten Schritte: Aus China 2 x 300V Voltmeter bestellt, die Widerstände, Kondensatoren und Dioden herausgelötet. Das alte Ziffernblatt eingescannt und ein wenig bearbeitet, wieder eingebaut (etwas auf alt getrimmt --> Steam-Punk-mäßig) Zwei Löcher in die Rückwand gebohrt für 2 RGB LED´s. ! Die Voltmeter werden per PWM von einem ESP8266 angesteuert werden (Vorwiderstand 2.2 kOhm), die LED´s (ich glaube 470 Ohm Vorwiderstand) werden je nach Wert mit verschiedenen Farben leuchten.
        20240313_222329.jpg
        20240313_222323.jpg
        Ach ja, noch eine Befestigungsplatte mit dem 3D Drucker gedruckt als Halterung für die Voltmeter.....

        D Offline
        D Offline
        DerAngler
        schrieb am zuletzt editiert von
        #7

        Ach ja. Angezeigt wird der Ladezustand der Batterie (in % vom 4,8 kWh Speicher) und die Leistung der Solarplatten (6800W).

        mcBirneM 1 Antwort Letzte Antwort
        0
        • D DerAngler

          Ach ja. Angezeigt wird der Ladezustand der Batterie (in % vom 4,8 kWh Speicher) und die Leistung der Solarplatten (6800W).

          mcBirneM Offline
          mcBirneM Offline
          mcBirne
          schrieb am zuletzt editiert von
          #8

          @derangler
          Hallo zusammen,
          Ich kann auf diese Weise alle Werte auslesen.
          Ich möchte aber meine Wallbox starten, wenn der Strom preiswert ist, und dann den Speicher sperren. Auf der Homepage kann man den Speicher ab einer gewissen Uhrzeit für einige Stunden sperren. Also muss irgendetwas an den Energiemanager gesendet werden. Hat jemand eine Idee, wie man herausbekommt, welcher Befehl da gesendet wird?

          1 Antwort Letzte Antwort
          0
          • D DerAngler

            Weiter geht´s :
            Ich habe bis jetzt 3 Werte eindeutig identifizieren können (gar nicht so leicht):

            • Netzbezug in Watt
            • Speicherstand Batterie in %
            • Produktion Solar in Watt
              alle Werte können ausgelesen werden:
            • Speicherstand Batterie kann ich so weiterverwenden (auch als Zahl)
            • Produktion Solar in Watt kommt als String, kann ich mir im Moment nur anzeigen lassen, nicht aber weiterverarbeiten
            • Netzbezug in Watt kommt als komischer Wert: javascript.0 (793) script.js.common.Skripte.Abfrage_Solar: 1709489385000|0.0 W
              falls aktuell Netzstrom bezogen wird, kommt dieser mit x Nachkommastellen
              Hier das Blockly zum Auslesen der Werte:
              BlocklyauslesenWerte.JPG

            Und ein zweites Blockly, was den Netzbezug "splittet", einmal vor dem "|", dann werden noch die Nachkommastellen abgeschnitten:

            Blocklyumwandlungwerte.JPG

            Die Objekte dazu sehen so aus:
            Objekte.JPG

            Eine einfache Anzeige in Vis ist testweise erstellt:
            VisSolar.JPG

            Der nächste Schritt ist aus den "json-Strings" "Numbers" zu machen, dass ich das einfacher handhaben kann.

            mcBirneM Offline
            mcBirneM Offline
            mcBirne
            schrieb am zuletzt editiert von
            #9

            @derangler
            Hallo,
            Funktioniert die Lösung bei dir noch? Bei mir nicht mehr.

            D 1 Antwort Letzte Antwort
            0
            • mcBirneM mcBirne

              @derangler
              Hallo,
              Funktioniert die Lösung bei dir noch? Bei mir nicht mehr.

              D Offline
              D Offline
              DerAngler
              schrieb am zuletzt editiert von DerAngler
              #10

              @mcbirne Nein, der Zugang ist seit einem update von Solarwatt ein anderer. Man muss sich zuerst auf dem Energymanager
              einloggen, dann wird vom Energymanager ein Session-Cookie vergeben.
              Nur mit diesem Session-Cookie kann man dann über iobroker die Daten auslesen. Ich habe vor 3 Tagen mit Hilfe von Gemini eine Abfrage geschrieben,
              die im Moment im Pobelauf ist und zu funktionieren scheint. Falls ich hier in 2 Tagen nix reingeschrieben habe, melde Dich nochmal. Entweder funktioniert
              die Lösung doch nicht dauerhaft , oder ich habe vergessen sie reinzustellen.

              mcBirneM 1 Antwort Letzte Antwort
              1
              • D DerAngler

                @mcbirne Nein, der Zugang ist seit einem update von Solarwatt ein anderer. Man muss sich zuerst auf dem Energymanager
                einloggen, dann wird vom Energymanager ein Session-Cookie vergeben.
                Nur mit diesem Session-Cookie kann man dann über iobroker die Daten auslesen. Ich habe vor 3 Tagen mit Hilfe von Gemini eine Abfrage geschrieben,
                die im Moment im Pobelauf ist und zu funktionieren scheint. Falls ich hier in 2 Tagen nix reingeschrieben habe, melde Dich nochmal. Entweder funktioniert
                die Lösung doch nicht dauerhaft , oder ich habe vergessen sie reinzustellen.

                mcBirneM Offline
                mcBirneM Offline
                mcBirne
                schrieb am zuletzt editiert von
                #11

                @derangler keine Ahnung ob jetzt exakt 2 Tage rum sind. Aber leider habe ich es nicht hinbekommen und würde mich daher über deine Lösung freuen.

                D 1 Antwort Letzte Antwort
                0
                • mcBirneM mcBirne

                  @derangler keine Ahnung ob jetzt exakt 2 Tage rum sind. Aber leider habe ich es nicht hinbekommen und würde mich daher über deine Lösung freuen.

                  D Offline
                  D Offline
                  DerAngler
                  schrieb am zuletzt editiert von DerAngler
                  #12

                  @mcbirne
                  Moin, also bei mir scheint es zu laufen. Wie gesagt, das ist eine Coproduktion von Gemini und mir, da ich eigentlich zu wenig Ahnung habe. Falls Du oder jemand Tips hat, immer her damit.
                  Instanzen Java Module.png
                  Zuerst müssen noch zusätzliche Instanzen im Javamodul geladen werden. (Einfach nur die Namen eingeben).
                  So sieht dann mein (total rudimentäres) Blockly aus:
                  Abfrage Solarwatt Blockly.png
                  und so mein Java Code:

                  // Neue Module für die Cookie-Verwaltung MÜSSEN im JS-Adapter installiert sein:
                  // 'axios', 'axios-cookiejar-support', 'tough-cookie'
                  const axios = require('axios');
                  // Korrigierter Import: Importiert die Wrapper-Funktion explizit
                  const { wrapper } = require('axios-cookiejar-support'); 
                  const tough = require('tough-cookie');
                  
                  // WICHTIG: Verwende die explizit importierte 'wrapper'-Funktion, um Axios zu konfigurieren.
                  wrapper(axios); 
                  
                  // ******************************************************
                  // !!! STEUERUNG FÜR DEBUG-MELDUNGEN HIER ANPASSEN !!!
                  const DEBUG_MODE = true; 
                  // ******************************************************
                  
                  
                  // !!! HIER ANPASSEN: BASISDATEN !!!
                  const BASIS_URL = 'http://HIER_DIE_IP';
                  const LOGIN_POST_URL = `${BASIS_URL}/auth/login`; 
                  const PASSWORT = 'DeinPW'; 
                  const BENUTZERNAME = 'installer'; 
                  // !!! HIER ANPASSEN ENDE !!!
                  
                  // Hilfsfunktion für Debug-Ausgaben
                  function debugLog(message) {
                      if (DEBUG_MODE) {
                          log(`[DEBUG] ${message}`, 'info');
                      }
                  }
                  
                  // Globaler Cookie-Speicher, der automatisch Cookies speichert und mitschickt
                  const cookieJar = new tough.CookieJar(); 
                  
                  // ----------------------------------------------------
                  // HELFERFUNKTION ZUM ABFRUFEN UND SPEICHERN EINES WERTES
                  // ----------------------------------------------------
                  
                  /**
                   * Ruft einen Wert von der angegebenen URL ab, parst ihn und speichert ihn in ioBroker.
                   * @param {string} url - Die REST-URL des abzufragenden Items.
                   * @param {string} dataPointId - Die ioBroker ID, in die der Wert geschrieben wird.
                   * @param {string} debugName - Ein beschreibender Name für die Logs.
                   */
                  async function fetchAndSaveValue(url, dataPointId, debugName) {
                      debugLog(`Starte Abruf für: ${debugName} an URL: ${url}`);
                      
                      // KORRIGIERTE LOGIK: Einheit (W/%) für das Log bestimmen.
                      // Prüft, ob der Name (kleingeschrieben) "füllung" enthält.
                      const isFilling = debugName.toLowerCase().includes('füllung');
                      const unit = isFilling ? '%' : ' W'; // <-- Jetzt sollte % sicher erkannt werden.
                      
                      try {
                          const response = await axios.get(url, {
                              jar: cookieJar, 
                              withCredentials: true 
                          });
                  
                          if (response.status !== 200) {
                              log(`Fehler beim Abruf von ${debugName}: HTTP Status ${response.status}`, 'error');
                              return;
                          }
                  
                          let rohwertString = response.data.state;
                  
                          if (!rohwertString || typeof rohwertString !== 'string') {
                              log(`Fehler beim Parsen von ${debugName}: Unerwartetes Format oder leer. Rohdaten: ${JSON.stringify(response.data)}`, 'error');
                              return;
                          }
                  
                          let zuParsenderWert;
                          
                          // Logik: Unterscheidung nach Trennzeichen '|'
                          if (rohwertString.includes('|')) {
                              // STANDARD-LOGIK (Werte mit Pipe-Trenner)
                              zuParsenderWert = rohwertString.split('|')[1].trim(); 
                          } else {
                              // SPEZIAL-LOGIK (Werte ohne Pipe-Trenner, wie Speicherfüllung)
                              zuParsenderWert = rohwertString;
                              debugLog(`Spezial-Parsing für ${debugName} angewendet (kein '|' gefunden).`);
                          }
                          
                          // Konsolidierte Bereinigung und Umwandlung: Entfernt alle Zeichen außer Ziffern und Punkt.
                          let gereinigterWert = zuParsenderWert.replace(/[^\d.]/g, ''); 
                          let dezimalZahl = parseFloat(gereinigterWert);
                          let leistungGanzzahl = Math.round(dezimalZahl);
                          
                          if (isNaN(leistungGanzzahl)) {
                               log(`Fehler beim Parsen von ${debugName}: Wert konnte nicht in Zahl umgewandelt werden. Ursprünglicher String: "${zuParsenderWert}"`, 'error');
                               return;
                          }
                  
                          // KORREKT: Verwendet die oben definierte Variable 'unit'
                          debugLog(`Wert für ${debugName} ausgelesen: ${leistungGanzzahl}${unit}`);
                  
                          // Speicherung in ioBroker
                          if (typeof setState === 'function') { 
                              setState(dataPointId, leistungGanzzahl, true);
                          }
                  
                          // KORREKT: Verwendet die oben definierte Variable 'unit'
                          log(`ERFOLG: ${debugName} (${leistungGanzzahl}${unit}) erfolgreich in Datenpunkt ${dataPointId} geschrieben.`, 'info');
                  
                      } catch (error) {
                          log(`Kritischer Fehler beim Abruf von ${debugName}: ${error.message}`, 'error');
                          if (error.response && error.response.status) {
                               log(`HTTP-Status beim Abruf von ${debugName}: ${error.response.status}`, 'error');
                          }
                      }
                  }
                  
                  
                  // ----------------------------------------------------
                  // AUTHENTIFIZIERUNG (Syntaxfehler-bereinigt)
                  // ----------------------------------------------------
                  
                  /**
                   * Führt den Authentifizierungsprozess durch. Das Cookie wird automatisch gespeichert.
                   */
                  async function authenticate() {
                      log('Starte Authentifizierungs-Prozess (POST Login)...', 'info');
                  
                      const postData = `username=${BENUTZERNAME}&url=%2F&password=${PASSWORT}&submit=Login`;
                      
                      debugLog(`Versuche Login an: ${LOGIN_POST_URL}`);
                  
                      const loginHeaders = { 
                          'Content-Type': 'application/x-www-form-urlencoded',
                          'Referer': `${BASIS_URL}/logon.html` 
                      };
                      
                      try {
                          await axios.post(LOGIN_POST_URL, 
                              postData, 
                              {
                                  headers: loginHeaders,
                                  jar: cookieJar, 
                                  withCredentials: true, 
                                  maxRedirects: 0, 
                                  validateStatus: (status) => status >= 200 && status < 400 
                              }
                          );
                          
                          debugLog(`Login-POST erfolgreich beendet (Status 200). Prüfe Cookies im Jar.`);
                  
                      } catch (error) {
                          if (error.response && error.response.status >= 300 && error.response.status < 400) {
                              debugLog(`Login-POST erfolgreich (Status ${error.response.status} Redirect). Cookie sollte im Jar gespeichert sein.`);
                          } else if (error.response && error.response.status === 401) {
                               throw new Error('Login fehlgeschlagen. Status 401 (Unauthorized). Zugangsdaten falsch?');
                          } else {
                              const status = error.response ? error.response.status : 'N/A';
                              throw new Error(`Kritischer Fehler beim Login. Status: ${status}. Fehlermeldung: ${error.message}`);
                          }
                      }
                      
                      // Nach dem Login den Erfolg prüfen und ggf. mit Folge-GET erzwingen
                      const finalCookies = await cookieJar.getCookies(BASIS_URL);
                      if (finalCookies.length === 0) {
                           debugLog('Kein Cookie nach POST gefunden. Versuche Folge-GET auf Startseite, um das Cookie zu erzwingen...');
                          try {
                              await axios.get(BASIS_URL, { jar: cookieJar, withCredentials: true });
                              const secondCookieCheck = await cookieJar.getCookies(BASIS_URL);
                              if (secondCookieCheck.length === 0) {
                                  throw new Error('Kein Session-Cookie im Jar gespeichert.');
                              }
                          } catch (e) {
                               throw new Error(`Fataler Fehler beim Cookie-Check: ${e.message}`);
                          }
                      }
                      
                      debugLog(`Authentifizierung erfolgreich. ${finalCookies.length} Cookies im Jar gefunden.`);
                  }
                  
                  // ----------------------------------------------------
                  // HAUPTFUNKTION
                  // ----------------------------------------------------
                  
                  async function abfrageUndSpeichern() {
                      
                      // SCHRITT 1: Authentifizierung
                      try {
                          await authenticate();
                      } catch (e) {
                          log(`Fataler Fehler beim Authentifizierungsprozess: ${e.message}`, 'error');
                          return;
                      }
                  
                      // SCHRITT 2: Datenabruf (Alle 6 Werte nacheinander)
                      
                      // 1. Netzbezug (W)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_in`,
                          '0_userdata.0.Solaranlage.Batterie.Netzbezug',
                          'Netzbezug'
                      );
                      
                      // 2. Netzeinspeisung (W)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_out`,
                          '0_userdata.0.Solaranlage.Batterie.Netzeinspeisung',
                          'Netzeinspeisung'
                      );
                      
                      // 3. Solarproduktion (W)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/modbus_sunspec_sma_inverter_3016028132_acGeneral_ac_power`,
                          '0_userdata.0.Solaranlage.Batterie.Solarproduktion+', 
                          'Solarproduktion'
                      );
                  
                      // 4. Speicherladung (W)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_in`,
                          '0_userdata.0.Solaranlage.Batterie.Speicherladung',
                          'Speicherladung'
                      );
                  
                      // 5. Speicherentladung (W)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_out`,
                          '0_userdata.0.Solaranlage.Batterie.Speicherentladung',
                          'Speicherentladung'
                      );
                      
                      // 6. Speicherfüllung (%)
                      await fetchAndSaveValue(
                          `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_batteryChannelGroup_batteryStateOfCharge`,
                          '0_userdata.0.Solaranlage.Batterie.Speicherfüllung',
                          'Speicherfüllung' // <-- Hier wird der debugName gesetzt
                      );
                  
                      log('INFO: Alle Abfragen abgeschlossen.', 'info');
                  }
                  
                  // Startet den Prozess einmalig beim Start des Skripts
                  abfrageUndSpeichern();
                  

                  Ist auch ein kleiner Debug Mode integriert.

                  Die Datenpunkte müssen natürlich noch angepasst werden....

                  Viel Spaß damit, über Rückmeldungen freue ich mich.
                  LG

                  mcBirneM 1 Antwort Letzte Antwort
                  0
                  • D DerAngler

                    @mcbirne
                    Moin, also bei mir scheint es zu laufen. Wie gesagt, das ist eine Coproduktion von Gemini und mir, da ich eigentlich zu wenig Ahnung habe. Falls Du oder jemand Tips hat, immer her damit.
                    Instanzen Java Module.png
                    Zuerst müssen noch zusätzliche Instanzen im Javamodul geladen werden. (Einfach nur die Namen eingeben).
                    So sieht dann mein (total rudimentäres) Blockly aus:
                    Abfrage Solarwatt Blockly.png
                    und so mein Java Code:

                    // Neue Module für die Cookie-Verwaltung MÜSSEN im JS-Adapter installiert sein:
                    // 'axios', 'axios-cookiejar-support', 'tough-cookie'
                    const axios = require('axios');
                    // Korrigierter Import: Importiert die Wrapper-Funktion explizit
                    const { wrapper } = require('axios-cookiejar-support'); 
                    const tough = require('tough-cookie');
                    
                    // WICHTIG: Verwende die explizit importierte 'wrapper'-Funktion, um Axios zu konfigurieren.
                    wrapper(axios); 
                    
                    // ******************************************************
                    // !!! STEUERUNG FÜR DEBUG-MELDUNGEN HIER ANPASSEN !!!
                    const DEBUG_MODE = true; 
                    // ******************************************************
                    
                    
                    // !!! HIER ANPASSEN: BASISDATEN !!!
                    const BASIS_URL = 'http://HIER_DIE_IP';
                    const LOGIN_POST_URL = `${BASIS_URL}/auth/login`; 
                    const PASSWORT = 'DeinPW'; 
                    const BENUTZERNAME = 'installer'; 
                    // !!! HIER ANPASSEN ENDE !!!
                    
                    // Hilfsfunktion für Debug-Ausgaben
                    function debugLog(message) {
                        if (DEBUG_MODE) {
                            log(`[DEBUG] ${message}`, 'info');
                        }
                    }
                    
                    // Globaler Cookie-Speicher, der automatisch Cookies speichert und mitschickt
                    const cookieJar = new tough.CookieJar(); 
                    
                    // ----------------------------------------------------
                    // HELFERFUNKTION ZUM ABFRUFEN UND SPEICHERN EINES WERTES
                    // ----------------------------------------------------
                    
                    /**
                     * Ruft einen Wert von der angegebenen URL ab, parst ihn und speichert ihn in ioBroker.
                     * @param {string} url - Die REST-URL des abzufragenden Items.
                     * @param {string} dataPointId - Die ioBroker ID, in die der Wert geschrieben wird.
                     * @param {string} debugName - Ein beschreibender Name für die Logs.
                     */
                    async function fetchAndSaveValue(url, dataPointId, debugName) {
                        debugLog(`Starte Abruf für: ${debugName} an URL: ${url}`);
                        
                        // KORRIGIERTE LOGIK: Einheit (W/%) für das Log bestimmen.
                        // Prüft, ob der Name (kleingeschrieben) "füllung" enthält.
                        const isFilling = debugName.toLowerCase().includes('füllung');
                        const unit = isFilling ? '%' : ' W'; // <-- Jetzt sollte % sicher erkannt werden.
                        
                        try {
                            const response = await axios.get(url, {
                                jar: cookieJar, 
                                withCredentials: true 
                            });
                    
                            if (response.status !== 200) {
                                log(`Fehler beim Abruf von ${debugName}: HTTP Status ${response.status}`, 'error');
                                return;
                            }
                    
                            let rohwertString = response.data.state;
                    
                            if (!rohwertString || typeof rohwertString !== 'string') {
                                log(`Fehler beim Parsen von ${debugName}: Unerwartetes Format oder leer. Rohdaten: ${JSON.stringify(response.data)}`, 'error');
                                return;
                            }
                    
                            let zuParsenderWert;
                            
                            // Logik: Unterscheidung nach Trennzeichen '|'
                            if (rohwertString.includes('|')) {
                                // STANDARD-LOGIK (Werte mit Pipe-Trenner)
                                zuParsenderWert = rohwertString.split('|')[1].trim(); 
                            } else {
                                // SPEZIAL-LOGIK (Werte ohne Pipe-Trenner, wie Speicherfüllung)
                                zuParsenderWert = rohwertString;
                                debugLog(`Spezial-Parsing für ${debugName} angewendet (kein '|' gefunden).`);
                            }
                            
                            // Konsolidierte Bereinigung und Umwandlung: Entfernt alle Zeichen außer Ziffern und Punkt.
                            let gereinigterWert = zuParsenderWert.replace(/[^\d.]/g, ''); 
                            let dezimalZahl = parseFloat(gereinigterWert);
                            let leistungGanzzahl = Math.round(dezimalZahl);
                            
                            if (isNaN(leistungGanzzahl)) {
                                 log(`Fehler beim Parsen von ${debugName}: Wert konnte nicht in Zahl umgewandelt werden. Ursprünglicher String: "${zuParsenderWert}"`, 'error');
                                 return;
                            }
                    
                            // KORREKT: Verwendet die oben definierte Variable 'unit'
                            debugLog(`Wert für ${debugName} ausgelesen: ${leistungGanzzahl}${unit}`);
                    
                            // Speicherung in ioBroker
                            if (typeof setState === 'function') { 
                                setState(dataPointId, leistungGanzzahl, true);
                            }
                    
                            // KORREKT: Verwendet die oben definierte Variable 'unit'
                            log(`ERFOLG: ${debugName} (${leistungGanzzahl}${unit}) erfolgreich in Datenpunkt ${dataPointId} geschrieben.`, 'info');
                    
                        } catch (error) {
                            log(`Kritischer Fehler beim Abruf von ${debugName}: ${error.message}`, 'error');
                            if (error.response && error.response.status) {
                                 log(`HTTP-Status beim Abruf von ${debugName}: ${error.response.status}`, 'error');
                            }
                        }
                    }
                    
                    
                    // ----------------------------------------------------
                    // AUTHENTIFIZIERUNG (Syntaxfehler-bereinigt)
                    // ----------------------------------------------------
                    
                    /**
                     * Führt den Authentifizierungsprozess durch. Das Cookie wird automatisch gespeichert.
                     */
                    async function authenticate() {
                        log('Starte Authentifizierungs-Prozess (POST Login)...', 'info');
                    
                        const postData = `username=${BENUTZERNAME}&url=%2F&password=${PASSWORT}&submit=Login`;
                        
                        debugLog(`Versuche Login an: ${LOGIN_POST_URL}`);
                    
                        const loginHeaders = { 
                            'Content-Type': 'application/x-www-form-urlencoded',
                            'Referer': `${BASIS_URL}/logon.html` 
                        };
                        
                        try {
                            await axios.post(LOGIN_POST_URL, 
                                postData, 
                                {
                                    headers: loginHeaders,
                                    jar: cookieJar, 
                                    withCredentials: true, 
                                    maxRedirects: 0, 
                                    validateStatus: (status) => status >= 200 && status < 400 
                                }
                            );
                            
                            debugLog(`Login-POST erfolgreich beendet (Status 200). Prüfe Cookies im Jar.`);
                    
                        } catch (error) {
                            if (error.response && error.response.status >= 300 && error.response.status < 400) {
                                debugLog(`Login-POST erfolgreich (Status ${error.response.status} Redirect). Cookie sollte im Jar gespeichert sein.`);
                            } else if (error.response && error.response.status === 401) {
                                 throw new Error('Login fehlgeschlagen. Status 401 (Unauthorized). Zugangsdaten falsch?');
                            } else {
                                const status = error.response ? error.response.status : 'N/A';
                                throw new Error(`Kritischer Fehler beim Login. Status: ${status}. Fehlermeldung: ${error.message}`);
                            }
                        }
                        
                        // Nach dem Login den Erfolg prüfen und ggf. mit Folge-GET erzwingen
                        const finalCookies = await cookieJar.getCookies(BASIS_URL);
                        if (finalCookies.length === 0) {
                             debugLog('Kein Cookie nach POST gefunden. Versuche Folge-GET auf Startseite, um das Cookie zu erzwingen...');
                            try {
                                await axios.get(BASIS_URL, { jar: cookieJar, withCredentials: true });
                                const secondCookieCheck = await cookieJar.getCookies(BASIS_URL);
                                if (secondCookieCheck.length === 0) {
                                    throw new Error('Kein Session-Cookie im Jar gespeichert.');
                                }
                            } catch (e) {
                                 throw new Error(`Fataler Fehler beim Cookie-Check: ${e.message}`);
                            }
                        }
                        
                        debugLog(`Authentifizierung erfolgreich. ${finalCookies.length} Cookies im Jar gefunden.`);
                    }
                    
                    // ----------------------------------------------------
                    // HAUPTFUNKTION
                    // ----------------------------------------------------
                    
                    async function abfrageUndSpeichern() {
                        
                        // SCHRITT 1: Authentifizierung
                        try {
                            await authenticate();
                        } catch (e) {
                            log(`Fataler Fehler beim Authentifizierungsprozess: ${e.message}`, 'error');
                            return;
                        }
                    
                        // SCHRITT 2: Datenabruf (Alle 6 Werte nacheinander)
                        
                        // 1. Netzbezug (W)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_in`,
                            '0_userdata.0.Solaranlage.Batterie.Netzbezug',
                            'Netzbezug'
                        );
                        
                        // 2. Netzeinspeisung (W)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_out`,
                            '0_userdata.0.Solaranlage.Batterie.Netzeinspeisung',
                            'Netzeinspeisung'
                        );
                        
                        // 3. Solarproduktion (W)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/modbus_sunspec_sma_inverter_3016028132_acGeneral_ac_power`,
                            '0_userdata.0.Solaranlage.Batterie.Solarproduktion+', 
                            'Solarproduktion'
                        );
                    
                        // 4. Speicherladung (W)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_in`,
                            '0_userdata.0.Solaranlage.Batterie.Speicherladung',
                            'Speicherladung'
                        );
                    
                        // 5. Speicherentladung (W)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_out`,
                            '0_userdata.0.Solaranlage.Batterie.Speicherentladung',
                            'Speicherentladung'
                        );
                        
                        // 6. Speicherfüllung (%)
                        await fetchAndSaveValue(
                            `${BASIS_URL}/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_batteryChannelGroup_batteryStateOfCharge`,
                            '0_userdata.0.Solaranlage.Batterie.Speicherfüllung',
                            'Speicherfüllung' // <-- Hier wird der debugName gesetzt
                        );
                    
                        log('INFO: Alle Abfragen abgeschlossen.', 'info');
                    }
                    
                    // Startet den Prozess einmalig beim Start des Skripts
                    abfrageUndSpeichern();
                    

                    Ist auch ein kleiner Debug Mode integriert.

                    Die Datenpunkte müssen natürlich noch angepasst werden....

                    Viel Spaß damit, über Rückmeldungen freue ich mich.
                    LG

                    mcBirneM Offline
                    mcBirneM Offline
                    mcBirne
                    schrieb am zuletzt editiert von
                    #13

                    @derangler
                    Vielen Dank!
                    ich habe meine URL eingatagen und mein Passwort eingegeben sowie die Variablen erstellt und deren Speicehrort angepasst.
                    Leider erhalte ich immer folgende Meldungen

                    javascript.0	14:58:29.281	info	
                    Start JavaScript script.js.Strom.Werte_aus_Energimanager_abfragen (Blockly)
                    javascript.0	14:58:29.294	info	
                    Starte Authentifizierungs-Prozess (POST Login)...
                    javascript.0	14:58:29.295	info	
                    [DEBUG] Versuche Login an: http://192.168.178.xxx/auth/login
                    javascript.0	14:58:29.296	info	
                    registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    javascript.0	14:58:29.377	info	
                    [DEBUG] Login-POST erfolgreich beendet (Status 200). Prüfe Cookies im Jar.
                    javascript.0	14:58:29.377	info	
                    [DEBUG] Authentifizierung erfolgreich. 1 Cookies im Jar gefunden.
                    javascript.0	14:58:29.378	info	
                    [DEBUG] Starte Abruf für: Netzbezug an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_in
                    javascript.0	14:58:29.413	error	
                    Kritischer Fehler beim Abruf von Netzbezug: Request failed with status code 400
                    javascript.0	14:58:29.414	error	
                    HTTP-Status beim Abruf von Netzbezug: 400
                    javascript.0	14:58:29.415	info	
                    [DEBUG] Starte Abruf für: Netzeinspeisung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_out
                    javascript.0	14:58:29.449	error	
                    Kritischer Fehler beim Abruf von Netzeinspeisung: Request failed with status code 400
                    javascript.0	14:58:29.449	error	
                    HTTP-Status beim Abruf von Netzeinspeisung: 400
                    javascript.0	14:58:29.449	info	
                    [DEBUG] Starte Abruf für: Solarproduktion an URL: http://192.168.178.xxx/rest/items/modbus_sunspec_sma_inverter_3016028132_acGeneral_ac_power
                    javascript.0	14:58:29.481	error	
                    Kritischer Fehler beim Abruf von Solarproduktion: Request failed with status code 400
                    javascript.0	14:58:29.481	error	
                    HTTP-Status beim Abruf von Solarproduktion: 400
                    javascript.0	14:58:29.481	info	
                    [DEBUG] Starte Abruf für: Speicherladung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_in
                    javascript.0	14:58:29.516	error	
                    Kritischer Fehler beim Abruf von Speicherladung: Request failed with status code 400
                    javascript.0	14:58:29.516	error	
                    HTTP-Status beim Abruf von Speicherladung: 400
                    javascript.0	14:58:29.516	info	
                    [DEBUG] Starte Abruf für: Speicherentladung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_out
                    javascript.0	14:58:29.543	error	
                    Kritischer Fehler beim Abruf von Speicherentladung: Request failed with status code 400
                    javascript.0	14:58:29.543	error	
                    HTTP-Status beim Abruf von Speicherentladung: 400
                    javascript.0	14:58:29.543	info	
                    [DEBUG] Starte Abruf für: Speicherfüllung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_batteryChannelGroup_batteryStateOfCharge
                    javascript.0	14:58:29.572	error	
                    Kritischer Fehler beim Abruf von Speicherfüllung: Request failed with status code 400
                    javascript.0	14:58:29.572	error	
                    HTTP-Status beim Abruf von Speicherfüllung: 400
                    javascript.0	14:58:29.572	info	
                    INFO: Alle Abfragen abgeschlossen.
                    

                    Ich glaube, er hat das Passwort samt Cookie, kann dann aber die Werte nicht finden oder rausschreiben oder speichern. Ich habe die Werte als Zahl angelegt. Ist das korrekt?

                    D 1 Antwort Letzte Antwort
                    0
                    • D Offline
                      D Offline
                      DerAngler
                      schrieb am zuletzt editiert von DerAngler
                      #14

                      Nachtrag:
                      Ich hatte gerade gesehen, dass ich meine Steampunkanzeige noch gar nicht im fertigen Zustand gepostet habe.
                      Hier isse:
                      20251024_145618.jpg
                      Bei roter Hintergrundbeleuchtung wird kein Strom erzeugt bzw. ist die Batterie leer....

                      1 Antwort Letzte Antwort
                      1
                      • mcBirneM mcBirne

                        @derangler
                        Vielen Dank!
                        ich habe meine URL eingatagen und mein Passwort eingegeben sowie die Variablen erstellt und deren Speicehrort angepasst.
                        Leider erhalte ich immer folgende Meldungen

                        javascript.0	14:58:29.281	info	
                        Start JavaScript script.js.Strom.Werte_aus_Energimanager_abfragen (Blockly)
                        javascript.0	14:58:29.294	info	
                        Starte Authentifizierungs-Prozess (POST Login)...
                        javascript.0	14:58:29.295	info	
                        [DEBUG] Versuche Login an: http://192.168.178.xxx/auth/login
                        javascript.0	14:58:29.296	info	
                        registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                        javascript.0	14:58:29.377	info	
                        [DEBUG] Login-POST erfolgreich beendet (Status 200). Prüfe Cookies im Jar.
                        javascript.0	14:58:29.377	info	
                        [DEBUG] Authentifizierung erfolgreich. 1 Cookies im Jar gefunden.
                        javascript.0	14:58:29.378	info	
                        [DEBUG] Starte Abruf für: Netzbezug an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_in
                        javascript.0	14:58:29.413	error	
                        Kritischer Fehler beim Abruf von Netzbezug: Request failed with status code 400
                        javascript.0	14:58:29.414	error	
                        HTTP-Status beim Abruf von Netzbezug: 400
                        javascript.0	14:58:29.415	info	
                        [DEBUG] Starte Abruf für: Netzeinspeisung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_net_power_out
                        javascript.0	14:58:29.449	error	
                        Kritischer Fehler beim Abruf von Netzeinspeisung: Request failed with status code 400
                        javascript.0	14:58:29.449	error	
                        HTTP-Status beim Abruf von Netzeinspeisung: 400
                        javascript.0	14:58:29.449	info	
                        [DEBUG] Starte Abruf für: Solarproduktion an URL: http://192.168.178.xxx/rest/items/modbus_sunspec_sma_inverter_3016028132_acGeneral_ac_power
                        javascript.0	14:58:29.481	error	
                        Kritischer Fehler beim Abruf von Solarproduktion: Request failed with status code 400
                        javascript.0	14:58:29.481	error	
                        HTTP-Status beim Abruf von Solarproduktion: 400
                        javascript.0	14:58:29.481	info	
                        [DEBUG] Starte Abruf für: Speicherladung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_in
                        javascript.0	14:58:29.516	error	
                        Kritischer Fehler beim Abruf von Speicherladung: Request failed with status code 400
                        javascript.0	14:58:29.516	error	
                        HTTP-Status beim Abruf von Speicherladung: 400
                        javascript.0	14:58:29.516	info	
                        [DEBUG] Starte Abruf für: Speicherentladung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_harmonized_bat_power_out
                        javascript.0	14:58:29.543	error	
                        Kritischer Fehler beim Abruf von Speicherentladung: Request failed with status code 400
                        javascript.0	14:58:29.543	error	
                        HTTP-Status beim Abruf von Speicherentladung: 400
                        javascript.0	14:58:29.543	info	
                        [DEBUG] Starte Abruf für: Speicherfüllung an URL: http://192.168.178.xxx/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BB8F3_batteryChannelGroup_batteryStateOfCharge
                        javascript.0	14:58:29.572	error	
                        Kritischer Fehler beim Abruf von Speicherfüllung: Request failed with status code 400
                        javascript.0	14:58:29.572	error	
                        HTTP-Status beim Abruf von Speicherfüllung: 400
                        javascript.0	14:58:29.572	info	
                        INFO: Alle Abfragen abgeschlossen.
                        

                        Ich glaube, er hat das Passwort samt Cookie, kann dann aber die Werte nicht finden oder rausschreiben oder speichern. Ich habe die Werte als Zahl angelegt. Ist das korrekt?

                        D Offline
                        D Offline
                        DerAngler
                        schrieb am zuletzt editiert von DerAngler
                        #15

                        @mcbirne
                        Hallo,
                        ja Authentifizierung scheint ok zu sein,
                        Cookie scheint er zu haben,
                        Werte als Zahlen sind Richtig.

                        Was bei Dir noch anders sein könnte als bei mir: "0BB8F3"
                        Da weiß ich nicht, ob das bei allen "Solarwatts" gleich ist.

                        Muss jetzt leider los.
                        Viel Erfolg!

                        VG
                        DerAngler

                        mcBirneM 1 Antwort Letzte Antwort
                        0
                        • D DerAngler

                          @mcbirne
                          Hallo,
                          ja Authentifizierung scheint ok zu sein,
                          Cookie scheint er zu haben,
                          Werte als Zahlen sind Richtig.

                          Was bei Dir noch anders sein könnte als bei mir: "0BB8F3"
                          Da weiß ich nicht, ob das bei allen "Solarwatts" gleich ist.

                          Muss jetzt leider los.
                          Viel Erfolg!

                          VG
                          DerAngler

                          mcBirneM Offline
                          mcBirneM Offline
                          mcBirne
                          schrieb am zuletzt editiert von
                          #16

                          @derangler
                          Daran lag es tatsächlich. Bei mir ist der Wert 0BEC85. Nun funktioniert es.
                          Vielen Dank dafür!

                          Weist du zufällig auch, wie man damit das laden des Speichers triggern kann? Laut meinem Solarteur wird das laden des Speichers wohl über die Box getriggert (keine Ahnung ob das stimmt). Aber eigentlich wäre es ja super, wenn man den Speicher mit günstigem Netzstrom laden kann. Technisch müsste das ja möglich sein. Auf der Homepage kann man den Speicher auch für bis zu 4 Stunden ausschalten (kein Laden und Entladen). Leider bekomme ich das auf der Box auch nicht hin.

                          D 1 Antwort Letzte Antwort
                          0
                          • mcBirneM mcBirne

                            @derangler
                            Daran lag es tatsächlich. Bei mir ist der Wert 0BEC85. Nun funktioniert es.
                            Vielen Dank dafür!

                            Weist du zufällig auch, wie man damit das laden des Speichers triggern kann? Laut meinem Solarteur wird das laden des Speichers wohl über die Box getriggert (keine Ahnung ob das stimmt). Aber eigentlich wäre es ja super, wenn man den Speicher mit günstigem Netzstrom laden kann. Technisch müsste das ja möglich sein. Auf der Homepage kann man den Speicher auch für bis zu 4 Stunden ausschalten (kein Laden und Entladen). Leider bekomme ich das auf der Box auch nicht hin.

                            D Offline
                            D Offline
                            DerAngler
                            schrieb am zuletzt editiert von
                            #17

                            @mcbirne
                            Sorry, da bin ich raus. Die Wollen ja gerade irgendwelche Extrafeatures und Pro Versionen für Geld an den Mann/Frau bringen. evtl. geht das damit....
                            Schön dass es bei Dir geklappt hat.
                            DA

                            mcBirneM 1 Antwort Letzte Antwort
                            0
                            • D DerAngler

                              @mcbirne
                              Sorry, da bin ich raus. Die Wollen ja gerade irgendwelche Extrafeatures und Pro Versionen für Geld an den Mann/Frau bringen. evtl. geht das damit....
                              Schön dass es bei Dir geklappt hat.
                              DA

                              mcBirneM Offline
                              mcBirneM Offline
                              mcBirne
                              schrieb am zuletzt editiert von
                              #18

                              @derangler Schade. Ich ärgere mich etwas über meinen Solarwatt-Speicher. Es gibt andere, die man über Modbus ansteuern kann und damit auch das Laden anstößt. Technisch geht das mit dem von Solarwatt auch. Aber leider gibt Solarwatt keine Schnittstellenbeschreibung raus. Ganz im Gegenteil führen sie noch Hürden ein, um Daten auszulesen.
                              Leider scheint es auch bei irgendwelchen Profis nicht verbreitet zu sein. Sonst würde es bestimmt jemand hinbekommen.

                              Aber nochmal danke für deine Unterstützung.

                              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

                              401

                              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
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe