ioBroker.senec icon indicating copy to clipboard operation
ioBroker.senec copied to clipboard

Warnmeldung und anschließend teilweise Adapter auf gelb.

Open hj-hefer opened this issue 6 months ago • 15 comments

Bekomme seit einiger Zeit diese Warnung

(Poll) received error 404 response from SENEC with content: {"timestamp":"2025-07-18T05:27:02.089+00:00","status":404,"error":"Not Found","message":"","path":"/v1/senec/monitor/76304/data"}

Danach schaltet sich der Adapter teilweise auf gelb sodass Werte nicht mehr geholt werden und für die Bearbeitung zur Verfügung stehen.

Hab einen Senec V3 Speicher mit den neuen Akkus die aber schon seit über einem halben Jahr eingebaut sind.

hj-hefer avatar Jul 18 '25 05:07 hj-hefer

Hallo @hj-hefer schau mal in https://github.com/nobl/ioBroker.senec/issues/336 ,der letzte Eintrag vor deinem ;-) Ein Teil der Struktur hat sich geändert und kurzfristig könnte da nur das Stillegen der Abfrage dieses Segments helfen. Teilweise sind die Daten nun an anderer Stelle zu finden. Bin mir eigentlich sicher dass @nobl da schon dran ist

MHoeller avatar Jul 18 '25 06:07 MHoeller

Seit Heute 21.07 bleibt der Adapter permanent auf "gelb".

Log Entry:

`

enec.0 | 2025-07-21 13:36:50.085 | error | Error: Error connecting to Senec AppAPI. Exiting! (401). -- | -- | -- | -- senec.0 | 2025-07-21 13:36:50.083 | warn | (Poll) received error 401 response from SENEC with content: "" senec.0 | 2025-07-21 13:36:49.584 | info | connecting to Senec App API: https://app-gateway.prod.senec.dev/v1/senec/login senec.0 | 2025-07-21 13:36:49.583 | info | Usage of SENEC App API configured. `

Login in 'mein-Senec' zeigt folgende Info

Image

StoniHome avatar Jul 21 '25 11:07 StoniHome

@nobl is there any update regarding this issue?

leipolF87 avatar Jul 24 '25 08:07 leipolF87

Schaut mal im u. g. Forum da wird die Problematik durch den Entwickler sehr gut erläutert, SENEC hat den Zugang zur Api scheinbar deaktiviert bzw. die Anmeldung an "größere Hürden" gekoppelt.

https://github.com/solectrus/senec-collector/issues/639

Es wird auch zumindest mal ein Workaround diskutiert, dass man via "mein-senec.de" an viele Daten rankommt, vielleicht ist das ja eine mögliche Idee für @nobl

Ansonsten bleibt für die V2.1 / v3.0 User noch sich die Satistik Daten mittels Source Analytics selber aufzubereiten.

Dette70 avatar Jul 25 '25 09:07 Dette70

Die Verbindung zu mein-senec.de ist dort schon implementiert und wird aktiv benutzt.

Zumindest für die now, today und total Daten des Speichers ist mein-senec.de auch immer eine Lösung gewesen. Auch vor der Umstellung auf SSO.

Funktioniert auch für P4 Nutzer, die beim Login auf mein-senec.de nur angezeigt bekommen, dass sie dei App runterladen sollen. Die php Skripte kann man aber dann trotzdem nutzen.

bobthebuilder4711 avatar Jul 25 '25 10:07 bobthebuilder4711

Die Verbindung zu mein-senec.de ist dort schon implementiert und wird aktiv benutzt.

Zumindest für die now, today und total Daten des Speichers ist mein-senec.de auch immer eine Lösung gewesen. Auch vor der Umstellung auf SSO.

Funktioniert auch für P4 Nutzer, die beim Login auf mein-senec.de nur angezeigt bekommen, dass sie dei App runterladen sollen. Die php Skripte kann man aber dann trotzdem nutzen.

Ok, nur funktioniert das aktuell auch nicht mehr wie bisher, bei mir wird nichts mehr an Datenpunkten unter _api aktualisiert. Lt. dem o. g. Post muss es aber via mein-senec.de eine Lösung geben, die weiter geht.

Dette70 avatar Jul 25 '25 11:07 Dette70

Ich habe ja auch geschrieben, dass das dort schon implementiert ist und genutzt wird mit mein-senec.de. Hier das ioBroker Plugin muss natürlich noch angepasst werden...

bobthebuilder4711 avatar Jul 25 '25 12:07 bobthebuilder4711

@Dette70: Ja bei mir auch so, Glaube es war letzte Woche irgendwann, da kam in _api/Statistik nichts mehr. Seit Montag früh dann auch _Api/Dashboard current und today.

Ich hatte heute morgen Zeit und hab mir parallel scripte geschrieben, in denen ich von der Momentan_Leistung in kw bzw. W (also den laga.cgi Daten aus dem Ordner ENERGY) in kwh umrechnen und mir die Daten für Heute, Gestern, Diesen Montag, Dieses Jahr und Gesamt wegschreibe und dann visualisieren wie gehabt. Um die Daten dann auch als History zu haben, schreib ich mir das jetzt alles gleich mal in meine eigene SQL-Datenbank.

Wenn dann der Abruf über _Api wieder möglich ist, kann ich immer noch überlegen, sollten die Daten zu arg abweichen, welche Datenquelle ich verwende.

Mal die nächsten Tage beobachten, wenn ich in den Scripten anständig gearbeitet habe, sollte es passen.

Grüße Fabian

leipolF87 avatar Jul 25 '25 12:07 leipolF87

Ich hatte heute morgen Zeit und hab mir parallel scripte geschrieben, in denen ich von der Momentan_Leistung in kw bzw. W (also den laga.cgi Daten aus dem Ordner ENERGY) in kwh umrechnen und mir die Daten für Heute, Gestern, Diesen Montag, Dieses Jahr und Gesamt wegschreibe und dann visualisieren wie gehabt. Um die Daten dann auch als History zu haben, schreib ich mir das jetzt alles gleich mal in meine eigene SQL-Datenbank.

Cool. Habe gerade festgestellt, dass der Source Analytics kein Integral bilden kann. Passt zwar hier nicht ganz zum Thema, aber wie bildest Du das Integral?

Dette70 avatar Jul 25 '25 12:07 Dette70

Ich hab die letzten Tage damit zugebracht, erst mal eine Lösung zu finden, das ich meine Tageswerte wieder irgendwie in mein MySQL Datenbank bekomme. Hab mich dazu erstmal an diesem Script orientiert: https://github.com/marq24/ha-senec-v3/discussions/155

Mein Ergebnis in Python:

# -*- coding: utf-8 -*-
import requests
import json
import logging
import mysql.connector
import time
from datetime import datetime
import sys
import argparse

# Logindaten für die Datenbank
db_config = {
    'host': 'your-host-domain-or-ip',
    'user': 'DB_USER',  			# DB-Benutzernamen
    'password': 'DB_PASSWORD',  	# DB-Passwort
    'database': 'DATABSE_NAME'  	# DB-Namen
}

# Anmeldedaten für die API
_SENEC_USERNAME = '[email protected]'  # Ersetze mit deinem API-Benutzernamen
_SENEC_PASSWORD = 'SENEC_PASSWORD'  # Ersetze mit deinem API-Passwort

# API-URLs
_SENEC_OAUTH2_URL = 'https://mein-senec.de/endkunde/oauth2/authorization/endkunde-portal'
STATUS_URL = 'https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0'

# Logging konfigurieren
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)

# Prüfe, ob das Debug-Flag (--debug) gesetzt ist
is_debug_mode = '--debug' in sys.argv

def debug_log(message, color=None):
    if is_debug_mode:
        if color == 'cyan':
            print '\033[36m' + message + '\033[0m'
        elif color == 'green':
            print '\033[32m' + message + '\033[0m'
        elif color == 'yellow':
            print '\033[33m' + message + '\033[0m'
        elif color == 'red':
            print '\033[31m' + message + '\033[0m'
        else:
            print message

def debug_log_cyan(message):
    debug_log(message, 'cyan')

def debug_log_green(message):
    debug_log(message, 'green')

def debug_log_yellow(message):
    debug_log(message, 'yellow')

def debug_log_red(message):
    debug_log(message, 'red')

# Initiale Log-Ausgabe
debug_log_cyan('############################ Senec API-to-SQL-merge-script ######################################')

def login_and_get_session():
    try:
        session = requests.Session()
        # Schritt 1: OAuth2-URL aufrufen
        r = session.post(_SENEC_OAUTH2_URL, timeout=10)
        if r.status_code != 200:
            raise Exception('OAuth2-Anfrage fehlgeschlagen: Status %d' % r.status_code)
        debug_log_green('OAuth2-Anfrage erfolgreich: Status %d' % r.status_code)

        # Schritt 2: Login-Formular-URL extrahieren
        s = r.text[r.text.find('kc-form-login'):]
        s = s[s.find('action="')+8:]
        s = s[:s.find('" method=')]
        debug_log('Login-Formular-URL: %s' % s)

        # Schritt 3: Login durchführen
        auth_payload = {
            'username': _SENEC_USERNAME,
            'password': _SENEC_PASSWORD
        }
        r = session.post(s, data=auth_payload, timeout=10)
        if r.status_code != 200:
            raise Exception('Login fehlgeschlagen: Status %d' % r.status_code)
        debug_log_green('Login erfolgreich: Status %d' % r.status_code)

        return session
    except Exception as e:
        logger.error('Fehler bei der Anmeldung: %s' % str(e))
        raise

def fetch_status_and_store_in_database(session):
    db_connection = None
    try:
        # Datenbankverbindung herstellen
        db_connection = mysql.connector.connect(**db_config)
        cursor = db_connection.cursor()
        debug_log_green('Datenbank verbunden.')

        # Statusdaten abrufen
        response = session.get(STATUS_URL, timeout=10)
        if response.status_code != 200:
            raise Exception('Statusabfrage fehlgeschlagen: Status %d' % response.status_code)
        data = response.json()

        # Aktuelles Datum (für den heutigen Tag)
        current_date = datetime.now().strftime('%Y-%m-%d %H:%M')

        # Daten extrahieren (in kWh umrechnen, auf 2 Dezimalstellen runden)
        grid_import = round(float(data['gridimport']['today']), 2) if data['gridimport']['today'] is not None else 0.0
        grid_export = round(float(data['gridexport']['today']), 2) if data['gridexport']['today'] is not None else 0.0
        consumption = round(float(data['consumption']['today']), 2) if data['consumption']['today'] is not None else 0.0
        production = round(float(data['powergenerated']['today']), 2) if data['powergenerated']['today'] is not None else 0.0

        debug_log('Datum: ------------------------------------------- %s -------------------------------------------' % current_date)
        debug_log_yellow('API-Werte: | Hausverbrauch: %s kWh | Export: %s kWh | Netzbezug: %s kWh | PV Produktion: %s kWh' % (consumption, grid_export, grid_import, production))

        current_date = datetime.now().strftime('%Y-%m-%d')
		
        # Überprüfen, ob ein Datensatz für das Datum existiert
        cursor.execute('SELECT senec_hausverbrauch, senec_export, senec_bezug, senec_produktion FROM senec_daily WHERE date = %s', (current_date,))
        rows = cursor.fetchall()

        if rows:
            # Datensatz existiert, Werte vergleichen und aktualisieren
            existing_data = rows[0]
            sql_hausverbrauch = round(float(existing_data[0]), 2)
            sql_export = round(float(existing_data[1]), 2)
            sql_bezug = round(float(existing_data[2]), 2)
            sql_produktion = round(float(existing_data[3]), 2)
            debug_log_yellow('SQL-Werte: | Hausverbrauch: %s kWh | Export: %s kWh | Netzbezug: %s kWh | PV Produktion: %s kWh' % (sql_hausverbrauch, sql_export, sql_bezug, sql_produktion))

            updated_values = []
            if abs(consumption - sql_hausverbrauch) > 0.001:
                updated_values.append('senec_hausverbrauch = %s' % consumption)
            if abs(grid_export - sql_export) > 0.001:
                updated_values.append('senec_export = %s' % grid_export)
            if abs(grid_import - sql_bezug) > 0.001:
                updated_values.append('senec_bezug = %s' % grid_import)
            if abs(production - sql_produktion) > 0.001:
                updated_values.append('senec_produktion = %s' % production)

            if updated_values:
                query = 'UPDATE senec_daily SET %s WHERE date = %%s' % ', '.join(updated_values)
                cursor.execute(query, (current_date,))
                db_connection.commit()
                debug_log_green('Daten für %s aktualisiert (%s)' % (current_date, ', '.join(updated_values)))
            else:
                debug_log_red('Daten für %s nicht aktualisiert, da neue Werte nicht unterschiedlich sind.' % current_date)
        else:
            # Kein Datensatz vorhanden, neuen einfügen
            cursor.execute(
                'INSERT INTO senec_daily (date, senec_hausverbrauch, senec_export, senec_bezug, senec_produktion) VALUES (%s, %s, %s, %s, %s)',
                (current_date, consumption, grid_export, grid_import, production)
            )
            db_connection.commit()
            debug_log_green('Daten für Datum: %s eingefügt' % current_date)

    except Exception as e:
        debug_log_red('Fehler bei der Datenabfrage oder Datenbankoperation: %s' % str(e))
    finally:
        if db_connection and db_connection.is_connected():
            cursor.close()
            db_connection.close()
            debug_log_green('Datenbankverbindung geschlossen.')

def main():
    try:
        session = login_and_get_session()
        while True:
            fetch_status_and_store_in_database(session)
            debug_log('Warte 5 Minute(n) bis zur nächsten Abfrage...')
            time.sleep(5 * 60)  # Warte 5 Minute(n)
    except Exception as e:
        logger.error('Fehler bei der Verarbeitung: %s' % str(e))
        sys.exit(1)

if __name__ == '__main__':
    main()

Vielleicht hilft es dem ein oder anderen, dem genau das erst mal reicht.

Inzwischen habe ich dann versucht das ganze in Node.js (hinsichtlich des Adapters) zum laufen zu bekommen. Da war es etwas schwieriger wie in Python und hat mich den letzten Nerv gekostet. :) Der Login und der Abruf funktioniert damit soweit. Nur glaube ich nicht, das ich das ohne @nobl in den Adapter bekomme.

const axios = require('axios');
const tough = require('tough-cookie');
const cheerio = require('cheerio');

(async () => {
  // Dynamisch das ESM-Modul importieren
  const { wrapper } = await import('axios-cookiejar-support');

  // ── DEINE ZUGANGSDATEN ────────────────────────────────────────────
  const SENEC_USERNAME = '[email protected]'; // Ersetze mit deinem Benutzernamen
  const SENEC_PASSWORD = 'SENEC_PASSWORD'; // Ersetze mit deinem Passwort

  // ── ENDPOINTS ────────────────────────────────────
  const LOGIN_PORTAL_URL = 'https://mein-senec.de/endkunde/oauth2/authorization/endkunde-portal';
  const API_URL           = 'https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0';

  // 1) CookieJar und axios-Client mit Wrapper
  const jar = new tough.CookieJar();
  const client = wrapper(axios.create({ jar, headers: { 'User-Agent': 'Mozilla/5.0' } }));

  try {
    // ── STEP 1: Login-Formular holen ─────────────────────
    console.log('STEP 1: Hole Login-Formular…');
    const resp1 = await client.get(LOGIN_PORTAL_URL, { validateStatus: () => true });
    console.log('FORM-Status:', resp1.status);
    console.log('Cookies nach GET:', (await jar.getCookies(LOGIN_PORTAL_URL)).join('; '));

    // Formular parsen
    const $ = cheerio.load(resp1.data);
    const form = $('form#kc-form-login');
    if (!form.length) throw new Error('Login-Formular nicht gefunden');

    // Action-URL ermitteln
    const actionUrl = new URL(form.attr('action'), resp1.request.res.responseUrl).href;

    // FormData inkl. Hidden-Fields + Credentials
    const formData = {};
    form.find('input').each((i, el) => {
      const name  = $(el).attr('name');
      const value = $(el).attr('value') || '';
      if (name) formData[name] = value;
    });
    formData.username = SENEC_USERNAME;
    formData.password = SENEC_PASSWORD;

    console.log('FormData-Payload:', formData);

    // ── STEP 2: Login absetzen ───────────────────────────
    console.log('STEP 2: Poste Login an Keycloak…');
    const resp2 = await client.post(actionUrl, new URLSearchParams(formData).toString(), {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Referer': resp1.request.res.responseUrl
      },
      maxRedirects: 5,
      validateStatus: () => true
    });
    console.log('LOGIN-Status:', resp2.status);
    console.log('Cookies nach Login:', (await jar.getCookies('https://mein-senec.de')).join('; '));

    if (resp2.status >= 400) {
      throw new Error(`Login fehlgeschlagen: ${resp2.status}`);
    }

    // ── STEP 3: API aufrufen ─────────────────────────────
    console.log('STEP 3: Rufe API-Daten ab…');
    const resp3 = await client.get(API_URL, { validateStatus: () => true });
    console.log('API-Status:', resp3.status);

    if (resp3.status === 200) {
      console.log('API-Daten:\n', JSON.stringify(resp3.data, null, 2));
    } else {
      console.error('API-Fehler:', resp3.data);
    }

  } catch (err) {
    console.error('Exception:', err.message);
    if (err.response) {
      console.error('Response-Status:', err.response.status);
      console.error('Response-Body:', err.response.data);
    }
  }
})();

Evtl. hilft es ja dem ein oder anderen weiter, der momentan nach Wegen des Abrufs sucht.

Falls ich das doch widererwartend in den Adapter bekomme, schieb ich es an @nobl zur Prüfung und Freigabe rüber. Darauf hoffen würde ich allerdings in naher Zukunft nicht ;) weiß auch nicht ob @nobl derzeit die Zeit und Lust findet.

Die größte Frage die ich mir derzeit stelle: Wieviel Zeit fliesst hier wieder rein und wie lange läufts dann wieder, bis Senec wieder auf die nächste tolle Idee kommt ...

Ist wenn dann ja eh nur eine Notlösung über die mein-senec.de API. Die Werte was wir vorher bekommen haben, gibt es hier ja gar nicht mehr in diesem Umfang.

Nach dem Login über mein-senec.de sind mir bisher folgende Abrufe der API bekannt, welche ihr auch selber (nach erfolgtem Login im Browser) dann hierüber einsehen könnt: _SENEC_API_URL_STATUSOVERVIEW="https://mein-senec.de/endkunde/api/status/getstatusoverview.php?anlageNummer=0" _SENEC_API_URL_TECHNISCHEDATEN="https://mein-senec.de/endkunde/api/status/technischeDaten?anlageNummer=0" _SENEC_API_URL_STATS24="https://mein-senec.de/endkunde/api/status/getstatus24.php?anlageNummer=0" _SENEC_API_URL_STATUS="https://mein-senec.de/endkunde/api/status/getstatus.php?anlageNummer=0&period=all&type=" _SENEC_API_URL_AUTARKY="https://mein-senec.de/endkunde/api/status/getautarky.php?anlageNummer=0" _SENEC_API_URL_ACCUSTATE="https://mein-senec.de/endkunde/api/status/getaccustate.php?anlageNummer=0" _SENEC_API_URL_ACCUSAVINGS="https://mein-senec.de/endkunde/api/status/getaccusavings.php?anlageNummer=0"

Pr1smBr34k3r avatar Jul 25 '25 20:07 Pr1smBr34k3r

Na dann bin ich ja happy, dass jemand mein Script gebrauchen konnte.

Für die total values nimmst Du diese Links:

https://mein-senec.de/endkunde/api/status/getstatus.php?type=accuexport&period=all&anlageNummer=0

https://mein-senec.de/endkunde/api/status/getstatus.php?type=accuimport&period=all&anlageNummer=0

https://mein-senec.de/endkunde/api/status/getstatus.php?type=gridexport&period=all&anlageNummer=0

https://mein-senec.de/endkunde/api/status/getstatus.php?type=gridimport&period=all&anlageNummer=0

https://mein-senec.de/endkunde/api/status/getstatus.php?type=powergenerated&period=all&anlageNummer=0

https://mein-senec.de/endkunde/api/status/getstatus.php?type=consumption&period=all&anlageNummer=0

Wichtig dabei: Das Haus steht im Mittelpunkt. "gridexport" heißt natürlich, dass Strom vom Haus ins Netz exportiert wird. "accuexport" heißt deswegen, dass Strom vom Haus in den Akku exportiert wird. Und umgekehrt "accuimport", dass Strom vom Akku ins Haus fließt.

Also "accuexport"="Akkubeladung" und "accuimport"="Akkuentladung".

Diese Links müssen auch nicht so wahnsinnig oft abgerufen werden. Für V2.1 und V3 Benutzer werden die Werte nur alle 5 Minuten aktualisiert. Für 4/P4 Benutzer sind es irgendwie 20 oder 30 Sekunden, wenn ich mich richtig erinnere, aber habe selber keinen davon.

Und dann kann es auch sein, dass die anlageNummer einstellbar sein muss. Besonders bei Leuten, die wegen dem LFP-Tausch einen neuen Speicher bekommen haben, wird das nicht mehr 0 sein.

Die größte Frage die ich mir derzeit stelle: Wieviel Zeit fliesst hier wieder rein und wie lange läufts dann wieder, bis Senec wieder auf die nächste tolle Idee kommt ...

Bisher war die mein-senec.de Api immer gleich. Nur der Login hat sich halt jetzt geändert. Ich mache mir da, solange es noch V2.1 und V3 Benutzer gibt, eher weniger Sorgen drum.

Ist wenn dann ja eh nur eine Notlösung über die mein-senec.de API. Die Werte was wir vorher bekommen haben, gibt es hier ja gar nicht mehr in diesem Umfang.

Es gibt seit 3 Stunden für Home Assistant auch wieder eine neue Version, die auf die neue App Api zugreifen kann, auch wenn die schon gut komplizierter zu implementieren ist: https://github.com/marq24/ha-senec-v3/releases/tag/2025.7.13

Aber auch da steht, dass so Dinge wie "Battery voltage, current or battery module temperatures" nicht mehr abrufbar sind.

bobthebuilder4711 avatar Jul 25 '25 21:07 bobthebuilder4711

Ich hatte heute morgen Zeit und hab mir parallel scripte geschrieben, in denen ich von der Momentan_Leistung in kw bzw. W (also den laga.cgi Daten aus dem Ordner ENERGY) in kwh umrechnen und mir die Daten für Heute, Gestern, Diesen Montag, Dieses Jahr und Gesamt wegschreibe und dann visualisieren wie gehabt. Um die Daten dann auch als History zu haben, schreib ich mir das jetzt alles gleich mal in meine eigene SQL-Datenbank.

Cool. Habe gerade festgestellt, dass der Source Analytics kein Integral bilden kann. Passt zwar hier nicht ganz zum Thema, aber wie bildest Du das Integral?

@Dette70: Sorry für die Verspätung. Ich habe das jetzt mal die Tage kontrolliert und ich bekomme die gleichen Werte für täglich, Gestern usw. wie in der Senec App. Das mit Integral hab wegen dem Aufwand erstmal nicht gemacht, sondern ganz easy gemacht. Alle 10 Sekunden rufe ich die Werte ab, diese teile ich durch 360 und dann zähle ich diese ganzen Werte zusammen. Je nachdem Welche Werte es nicht (Täglich, Monatlich usw.) setzte ich die Stände z.B. um 23:59:55 wieder zurück. Oder eben am ersten eines Monats um 00:01:05. Bei den Werte für Speicherfüllstand und Autarkie, diese sind ja in %, zähle ich einen Faktor mit, den ich mit jedem Wert um +1 erhöhe und teile dann durch diesen. (Autarkie rechne ich z.B. schon immer selbst aus, da habe ich die Werte vom Speicher nie hergenommen).

leipolF87 avatar Jul 28 '25 12:07 leipolF87

Moin zusammen.

Ich habe leider aktuell keine Zeit, mich um das Problem zu kümmern :( Dank der Vorarbeiten hier, könnte das "Problem" aber ggf. lösbar sein.

Muss ich mich selbst darum kümmern, dann dauert das leider noch - ansonsten sind natürlich (funktionierende) Pull-Requests immer gerne gesehen :)

nobl avatar Aug 14 '25 06:08 nobl

@nobl: Da hier seit 2 Monaten nichts mehr passiert ist und scheinbar leider niemand die Skills hat, hier am Adapter die nötigen Änderungen durchzuführen die Frage, welcher Zeithorizont hier realistisch ist, den Adapter wieder vollumfänglich ans Laufen zu bringen? Vielen Dank im Vorab.

Dette70 avatar Oct 20 '25 08:10 Dette70

ich kann mich damit erst befassen, wenn ich endlich irgendwann meinen Speicher getauscht bekommen habe. Leider scheint das ein "Großprojekt" zu sein.

nobl avatar Nov 11 '25 11:11 nobl

Hallo zusammen in die Runde, ich befasse mich erst seit Kurzem mit iobroker und dem Senec Adapter. Ich hab hier mal die eingebrachten Lösungsansätze von @Pr1smBr34k3r und @bobthebuilder4711 zusammen gefasst und versucht in JS zu bringen. Bei mir läuft aktuell der Adapter mit aktivierter (Web-)API und bekommt eine Verbindung. Die angezeigten Daten stimmen bisher aber nicht mit den Werten, die ich in der App oder auch im Browser angezeigt bekomme. Da muss ich oder @nobl nochmal ran.

Image Image Image

maett81 avatar Dec 05 '25 11:12 maett81

Siehst Du denn in deinem Debug Protokoll, dass die Daten richtig an kommen?


Wie ich von anderen gehört habe, muss man auch aufpassen, wenn man einen Akkuwechsel gehabt hat. Also gegen die neuen LFP Akkus. Da kann es dann sein, dass das "Anlagennummer=0" nicht mehr stimmt. Wobei es bei mir persönlich weiterhin die 0 ist, nachdem ich auf mein-senec.de oben links unter "Meine Anlagen" den neuen Speicher ausgewählt hatte.

Der neue Speicher fängt dann aber definitiv wieder bei 0kWh auf allen Sensoren an zu zählen.

bobthebuilder4711 avatar Dec 05 '25 13:12 bobthebuilder4711

Mein Speicher ist zwischenzeitlich getauscht (nach zig Absagen nahezu am Tag vorher). Ich kann mich jetzt dann (sofern beruflich Zeit bleibt) dem Problem wieder annehmen.

nobl avatar Dec 05 '25 16:12 nobl

@nobl Ich hab meine Änderungen mal commitet. Für das Zerlegen der JSON Antworten in sprechende Stati bin ich noch zu weit weg von JS 🤪

maett81 avatar Dec 05 '25 21:12 maett81