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. Solarwatt Energymanager flex Daten auslesen die Zweite

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    2
    1
    72

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    7
    1
    127

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

Solarwatt Energymanager flex Daten auslesen die Zweite

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
solarwattenergymanager flexregex
25 Beiträge 4 Kommentatoren 1.1k Aufrufe 3 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.
  • 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
                • P Online
                  P Online
                  Peter60
                  schrieb am zuletzt editiert von
                  #19

                  Hallo DerAngler und mcBirne, ich bin seit Ende März 26 stolzer Besitzer einer Solaranlage mit Speicher von Solarwatt. Soweit bin ich erst einmal zufrieden, jetzt möchte ich die Solaranlage in meine Hausautomatisierung einbinden und habe Probleme die Daten vom Solarwatt Manager Flex auszulesen.
                  Ich nutze Openhab auf einem RasperryPi und der Großteil meiner Hausautomatisierungsbaugruppen sind von HomeMatic und Shelly.
                  Nun habe ich schon herausgefunden, dass das Openhab Binding „Solarwatt Binding“ nur für ältere Manager nutzbar ist, nicht für den Flex Manager. Hierfür sollte das Remote openHAB Binding genutzt werden. Dort habe ich alle Werte vom Solarwatt Mager eingetragen,also Server Adresse 192.168.180.72 in meinem Fall, HTTPS verwenden, Server HTTP Port 443, REST-API-Pfad /rest/, Token: nichts eingetragen, Benutzername und PW wie bei der Solarwatt Smartphone App.
                  Ergebnis vom Remote openHAB Server: Status offline, Ausführung der Root-REST-API fehlgeschlagen.
                  Da ihr ja die Experten seid, vielleicht könnt ihr mir helfen? Ich bin blutiger Anfänger, daher wäre mir eine idiotensichere Anleitung am Liebsten. Danke schon mal im voraus.
                  Peter60 PS: Muß ich mich bei Solarwatt Home plus anmelden um an die Daten zu kommen? Das würde ja 4,99 Euro/ Monat kosten :-(

                  1 Antwort Letzte Antwort
                  0
                  • mcBirneM Offline
                    mcBirneM Offline
                    mcBirne
                    schrieb am zuletzt editiert von
                    #20

                    Hallo, ich nutze das Skript von derAngler (siehe weiter oben). Es funktioniert sehr zuverlässig. Ich habe auch den Energiemanager Felx. Daher sollte es bei dir auch funktionieren.
                    Was man leider nicht machen kann, ist die Anlage zu steuern, also so etwas wie: "Lade den Speicher jetzt mit x kW."

                    1 Antwort Letzte Antwort
                    0
                    • P Online
                      P Online
                      Peter60
                      schrieb am zuletzt editiert von
                      #21

                      Hallo mcBirne, es freut mich zu hören das es eine Lösung gibt. Dann werd ich mich mal durchwursteln. Mir reicht es momentan wenn ich die Daten auslesen kann und dann z.B. festlegen kann: Wenn Solarstrom mehr als 2kW und Speicher > 90% dann Elektroheizung an.
                      Vielen Dank für die schnelle Antwort und einen schönen Restsonntag, Peter60

                      1 Antwort Letzte Antwort
                      0
                      • P Online
                        P Online
                        Peter60
                        schrieb zuletzt editiert von
                        #22

                        Hallo DerAngler, am 29.02.24 hattest Du in Deinem Beitrag geschrieben: „Auch ich kann die Seite http://IPSolarmanager/rest/items aufrufen, jedoch verstehe ich nicht, was ich da sehe.“
                        An dieser Stelle scheitere ich schon. Firefox Ausgabe (http://192.168.180.72/rest/items) ist bei mir: 401 Authorization Required nginx.
                        Muß ich mich kostenpflichtig bei Solarwatt Home plus anmelden um hier authotisiert zu sein? Viele Grüße Peter60

                        1 Antwort Letzte Antwort
                        0
                        • mcBirneM Offline
                          mcBirneM Offline
                          mcBirne
                          schrieb zuletzt editiert von
                          #23

                          Kannst du dich bei der IP vom Energimanager einloggen? Also hier http://192.168.180.72?

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

                            Hallo zusammen,
                            ich bin aus dem Thema lange raus und meine Doku ist ein graus bzw. gar nicht vorhanden.
                            Aber das:

                            DerAngler sagte:

                            @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.

                            sollte die Lösung für folgendes sein:

                            @Peter60 sagte:

                            Hallo DerAngler, am 29.02.24 hattest Du in Deinem Beitrag geschrieben: „Auch ich kann die Seite http://IPSolarmanager/rest/items aufrufen, jedoch verstehe ich nicht, was ich da sehe.“
                            An dieser Stelle scheitere ich schon. Firefox Ausgabe (http://192.168.180.72/rest/items) ist bei mir: 401 Authorization Required nginx.
                            Muß ich mich kostenpflichtig bei Solarwatt Home plus anmelden um hier authotisiert zu sein? Viele Grüße Peter60

                            Du loggst dich auf dem energymanager ein wie von McBirne beschrieben.
                            Danach kommst Du auch unter rest/items rein (Session Cookie).
                            Du brauchst keine Pro-Version.
                            Ich mache alles unter Chrome

                            Sorry, ich kann Dich leider nicht mehr supporten, bin im Moment zeitlich recht knapp.
                            Versuch bitte die hier aufgeführten Schritte nachzuvollziehen.

                            Alles Gute, Viel Erfolg

                            DerAngler

                            1 Antwort Letzte Antwort
                            0
                            • P Online
                              P Online
                              Peter60
                              schrieb zuletzt editiert von
                              #25

                              Hallo DerAngler und mcBirne, vielen, vielen Dank für Eure Hilfe. So bin ich wieder ein Schritt weiter:
                              Mit http://192.168.180.72 komme ich auf http://192.168.180.72/em-setup/login und kann ich mich hier mit dem PW welches auf dem Solarwatt Manager flex aufgedruckt ist einloggen. Dann gelange ich auf http://192.168.180.72/em-setup/dashboard und kann auch http://192.168.180.72/rest/items erfolgreich öffnen. Unter Tab json sehe ich jetzt 2 Ordner (0 … 99) und (100 … 150) mit logischerweise 150 Zeilen in Summe. Bei mir sieht z.B. Zeile 17 so aus: link: "http://karaf/rest/items/foxesshybrid_battery_2RHD123055DM049_battery_bms_soc", state: "100.00000000000001 %", editable: false, … }. Das ist der Akku Ladestand in Prozent. Als nächstes versuche ich das Script anzupassen. In welchen Pfad sollte das Script installiert werden? Viele Grüße Peter

                              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

                              542

                              Online

                              32.8k

                              Benutzer

                              82.7k

                              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