Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Neuer Adapter] Senec Home Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Neuer Adapter] Senec Home Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • apollon77
      apollon77 @oxident last edited by

      @oxident Naja ist schon ein mal getauscht worden 🙂

      O 1 Reply Last reply Reply Quote 1
      • O
        oxident @apollon77 last edited by

        @apollon77 Als ob da (außer der Firmwarefehler) irgendwas kaputt wäre...

        1 Reply Last reply Reply Quote 0
        • T
          ToniTL last edited by ToniTL

          Hallo, seit ein paar Tagen (14.07.) aktualisiert er die Daten von der _api/.../Statistik nicht mehr.
          Kann da bitte überprüft werden, ob sich etwas verändert hat (zB: wegen Update etc.)
          Die Objekte im Ordner _api/.../Dashboard werden aktualisiert.
          Habe den V3 mit LFP
          Danke!
          Bildschirmfoto vom 2025-07-17 07-04-05.png

          O M 2 Replies Last reply Reply Quote 1
          • O
            oxident @ToniTL last edited by oxident

            @tonitl Hier ebenfalls. Dachte schon, es hat mit meiner Installation zu tun.

            1 Reply Last reply Reply Quote 0
            • M
              musicnrw @ToniTL last edited by

              @tonitl, ich habe das gleiche Problem. Aber wenn es nicht nur mich betrifft hoffen wir mal, dass der geniale Admin des entsprechenden Adapter-Codes das Phenomen aus der Welt bringt....

              1 Reply Last reply Reply Quote 0
              • J
                jack071177 last edited by

                bei mir ebenfalls. der Zeitstempel von den Werten der Statistiken ist ebenfalls der 14.7. und ungefähr die gleiche Uhrzeit

                sambaole 1 Reply Last reply Reply Quote 0
                • sambaole
                  sambaole @jack071177 last edited by

                  @jack071177 Bei mir ebenfalls und Adapter auf gelb. Bei Anmeldung in der Senec App kam kurz die Mitteilung das demnächst ein neues Login kommen soll...

                  1 Reply Last reply Reply Quote 0
                  • S
                    Semmy last edited by

                    Hallo

                    Gibt es irgendwelche Alternativen, um die Statistiken zu erzeugen? Ein anderer Adapter z.B. und wie wäre das dann zu bewerkstelligen

                    Viele Grüße
                    Semmy

                    O 1 Reply Last reply Reply Quote 0
                    • O
                      oxident @Semmy last edited by

                      @semmy Hab jetzt vieles versucht: Home Assistant oder auch Summieren verfügbarer Werte mit SourceAnalytix ... aber es scheint erstmal nichts zu funktionieren.

                      Wir können nur hoffen, dass sich nach morgiger Umstellung der UI bei Senec jemand findet, der die Herausforderung annimmt 🙂

                      D 1 Reply Last reply Reply Quote 0
                      • D
                        dispo112 @oxident last edited by

                        @oxident
                        Ich habe mir überlegt, die PV-Tagesproduktion lokal zu berechnen, indem ich alle 10 Sekunden die Leistung in Watt in Wh umrechne (Leistung × 10s ÷ 3600) und aufsummiere. Zusätzlich berücksichtige ich Speicher-SOC-Änderungen sowie Netzbezug und Einspeisung, um die Energieflüsse besser abzubilden und eine genaue Tagesbilanz zu erhalten. Reset erfolgt um Mitternacht.

                        Mal sehen was dabei rauskommt.

                        O 1 Reply Last reply Reply Quote 0
                        • O
                          oxident @dispo112 last edited by

                          @dispo112 Ja, das wäre auf jeden Fall ein Anfang. Ich meine aber, dass SourceAnalytix das auch kann und dann halt bei jeder Änderung des Datenpunkts berechnet. Dürfte aber so oder so ungenau sein.

                          Sieht mir auch leider danach aus, dass es wohl länger dauert, bis wir wieder an die offiziellen Daten kommen.

                          D 1 Reply Last reply Reply Quote 0
                          • icebear
                            icebear last edited by

                            @dispo112
                            @oxident

                            Für diejenigen, die nebenbei auch noch HA nutzen und den Senec auch in HA integriert haben, wäre vielleicht auch noch interessant, das es für HA eine Integration gibt, die die Werte umrechnet .

                            Siehe Riemann Integral.

                            D 1 Reply Last reply Reply Quote 0
                            • D
                              dispo112 @oxident last edited by

                              @oxident
                              auf der Github Solectrus Seite ist ja faktisch schon ein Lösungsweg aufgeführt...
                              https://github.com/solectrus/senec-collector/issues/639

                              Denke das bekommt man auch mittels Iobroker hin, bin jedenfalls dabei mir den gleichen Workaround nachzubauen.

                              koreolis845 created this issue in solectrus/senec-collector

                              open Verwendung der App-API nicht mehr möglich #639

                              1 Reply Last reply Reply Quote 1
                              • D
                                dispo112 @icebear last edited by

                                @icebear danke für den Hinweis. Aber zunächst versuche ich den Solectrus Workaround im Iobroker nachzubauen.

                                icebear 1 Reply Last reply Reply Quote 0
                                • icebear
                                  icebear @dispo112 last edited by icebear

                                  @dispo112 said in [Neuer Adapter] Senec Home Adapter:

                                  Aber zunächst versuche ich den Solectrus Workaround im Iobroker nachzubauen.

                                  Ah, ich sehe du liest auch quer wie es da weitergeht, wäre super wenn du uns auf dem laufenden halten könntest wie man das in IOB nachbauen kann. (evtl auch mir Node-Red)

                                  Leider fehlt mir hier das programmiertechnische Know-How.

                                  D 1 Reply Last reply Reply Quote 0
                                  • D
                                    dispo112 @icebear last edited by

                                    @icebear @oxident
                                    Das mache ich auf jeden Fall.
                                    Was schon mal sehr erfreulich ist:
                                    Mein Skript, das die 10-Sekunden-Erzeugungswerte im ioBroker aufsummiert, läuft ziemlich genau – trotz der teils sehr unregelmäßigen PV Erzeugungskurve.
                                    Ich beobachte das jetzt ein paar Tage weiter.
                                    Wenn jemand Interesse an dem Skript hat: einfach kurz Bescheid sagen, dann stelle ich es hier gerne zur Verfügung.

                                    Screenshot_20250724-222850.png Screenshot_20250724-222828.png

                                    O S 2 Replies Last reply Reply Quote 1
                                    • O
                                      oxident @dispo112 last edited by

                                      @dispo112 Mega! ... und: Bescheid 😁

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        Semmy @dispo112 last edited by

                                        @dispo112 Ich auch bitte: Bescheid😊

                                        1 Reply Last reply Reply Quote 0
                                        • icebear
                                          icebear last edited by icebear

                                          Ich auch Bescheid, bitte 😊

                                          D 1 Reply Last reply Reply Quote 0
                                          • D
                                            dispo112 @icebear last edited by

                                            @icebear @oxident @Semmy
                                            So, bitte schön. Die Ordnerpfade sind alle standard. Theoretisch könnt ihr das Skript importieren und starten, fertig. Alle neuen Datenpunkte werden im Userdata erzeugt und können dann via Lovelace / VIS abgegriffen werden.

                                            /**
                                            * Skript: PV-Tagesproduktion aus Senec-Datenpunkten
                                            * Erstellt und summiert Wh- und kWh-Werte aus Live-Daten.
                                            * Berücksichtigt PV-Leistung, Netzbezug/-einspeisung und Batterie-Laden/Entladen.
                                            * 
                                            * Erstellt nötige Datenpunkte automatisch, um Messwerte persistent zu speichern.
                                            * 
                                            * Letzte Anpassung: 23.07.2025
                                            */
                                            
                                            // --- Konfiguration ---
                                            
                                            // Basis-Pfad für eigene Datenpunkte
                                            const BASE_DP_PATH = '0_userdata.0.energy';
                                            
                                            // Datenpunkte vom Senec Adapter
                                            const SENEC_PV_POWER = 'senec.0.ENERGY.GUI_INVERTER_POWER';       // Aktuelle PV-Leistung in Watt (alle 10s)
                                            const SENEC_BAT_POWER = 'senec.0.ENERGY.GUI_BAT_DATA_POWER';       // Batterie Lade-/Entladeleistung in Watt (alle 10s), positiv = Laden, negativ = Entladen
                                            const SENEC_GRID_POWER = 'senec.0.ENERGY.GUI_GRID_POW';            // Netzleistung in Watt (alle 10s), positiv = Netzbezug, negativ = Einspeisung
                                            
                                            // Datenpunkte zur Speicherung
                                            const DP_PV_WH = `${BASE_DP_PATH}.pv_wh`;          // Tages-Wh PV
                                            const DP_BAT_WH = `${BASE_DP_PATH}.bat_wh`;        // Tages-Wh Batterie (Netto Laden)
                                            const DP_GRID_WH = `${BASE_DP_PATH}.netz_wh`;      // Tages-Wh Netzbezug
                                            const DP_EINSPEISUNG_WH = `${BASE_DP_PATH}.einspeisung_wh`;  // Tages-Wh Einspeisung
                                            
                                            const DP_PV_KWH = `${BASE_DP_PATH}.pv_kwh`;        // Tages-kWh PV
                                            const DP_BILANZ_KWH = `${BASE_DP_PATH}.bilanz_kwh`; // Bilanz kWh (PV - Netzbezug)
                                            
                                            // --- Variablen ---
                                            let lastTimestamp = null;   // Timestamp letzte Messung
                                            let lastPVPower = 0;        // Letzte gemessene PV-Leistung in Watt
                                            let lastBatPower = 0;       // Letzte gemessene Batterieleistung in Watt
                                            let lastGridPower = 0;      // Letzte gemessene Netzleistung in Watt
                                            
                                            // --- Hilfsfunktion: Sicherer State-Lesezugriff ---
                                            function getStateSafe(id, defaultValue = 0) {
                                               const state = getState(id);
                                               if (state && state.val !== null && state.val !== undefined) {
                                                   return state.val;
                                               }
                                               return defaultValue;
                                            }
                                            
                                            // --- Ordner (Channel) anlegen, falls nicht vorhanden ---
                                            if (!existsObject(BASE_DP_PATH)) {
                                               createChannel(BASE_DP_PATH, 'Ordner für Energie-Datenpunkte', (err) => {
                                                   if (err) {
                                                       log(`Fehler beim Erstellen des Ordners ${BASE_DP_PATH}: ${err}`, 'error');
                                                   } else {
                                                       log(`Ordner ${BASE_DP_PATH} erfolgreich erstellt`, 'info');
                                                   }
                                               });
                                            }
                                            
                                            // --- Datenpunkte anlegen, falls nicht vorhanden ---
                                            function createStateIfNotExists(id, common, initialValue = 0) {
                                               if (!existsState(id)) {
                                                   createState(id, initialValue, common, (err) => {
                                                       if (err) {
                                                           log(`Fehler beim Erstellen des Datenpunkts ${id}: ${err}`, 'error');
                                                       } else {
                                                           log(`Datenpunkt ${id} erstellt mit Initialwert ${initialValue}`, 'info');
                                                       }
                                                   });
                                               }
                                            }
                                            
                                            // Definieren der Common-Objekte (Typ, Rolle usw.)
                                            const commonWH = { name: 'Tageswert in Wattstunden (Wh)', type: 'number', role: 'value.power', unit: 'Wh', read: true, write: false };
                                            const commonKWH = { name: 'Tageswert in Kilowattstunden (kWh)', type: 'number', role: 'value.power', unit: 'kWh', read: true, write: false };
                                            
                                            // Erstellen aller nötigen Datenpunkte
                                            createStateIfNotExists(DP_PV_WH, commonWH);
                                            createStateIfNotExists(DP_BAT_WH, commonWH);
                                            createStateIfNotExists(DP_GRID_WH, commonWH);
                                            createStateIfNotExists(DP_EINSPEISUNG_WH, commonWH);
                                            createStateIfNotExists(DP_PV_KWH, commonKWH);
                                            createStateIfNotExists(DP_BILANZ_KWH, commonKWH);
                                            
                                            // --- Hauptlogik: Verarbeitung der Messwerte und Integration in Wh ---
                                            
                                            // Funktion zum Verarbeiten neuer Messwerte
                                            function processNewData(pvPower, batPower, gridPower) {
                                               const jetzt = Date.now();
                                            
                                               if (lastTimestamp !== null) {
                                                   const deltaT = (jetzt - lastTimestamp) / 1000; // Zeitdifferenz in Sekunden
                                            
                                                   // Energie (Wh) = Leistung (W) * Zeit (h)
                                                   // deltaWh = W * (s / 3600)
                                                   const deltaWhPV = lastPVPower * (deltaT / 3600);
                                                   const deltaWhBat = lastBatPower * (deltaT / 3600);
                                                   const deltaWhGrid = lastGridPower * (deltaT / 3600);
                                            
                                                   // Update der Tageswerte
                                                   let pvWh = getStateSafe(DP_PV_WH);
                                                   let batWh = getStateSafe(DP_BAT_WH);
                                                   let gridWh = getStateSafe(DP_GRID_WH);
                                                   let einspeisungWh = getStateSafe(DP_EINSPEISUNG_WH);
                                            
                                                   pvWh += deltaWhPV;
                                            
                                                   // Batterie: Nur Netto-Ladung (positive Leistung)
                                                   if (deltaWhBat > 0) {
                                                       batWh += deltaWhBat;
                                                   } else {
                                                       // Entladen wird nicht addiert, könnte separat behandelt werden
                                                   }
                                            
                                                   // Netzbezug vs Einspeisung trennen:
                                                   if (deltaWhGrid > 0) {
                                                       gridWh += deltaWhGrid; // Netzbezug
                                                   } else {
                                                       einspeisungWh += Math.abs(deltaWhGrid); // Einspeisung
                                                   }
                                            
                                                   // Datenpunkte aktualisieren
                                                   setState(DP_PV_WH, pvWh, true);
                                                   setState(DP_BAT_WH, batWh, true);
                                                   setState(DP_GRID_WH, gridWh, true);
                                                   setState(DP_EINSPEISUNG_WH, einspeisungWh, true);
                                            
                                                   // kWh berechnen und speichern
                                                   setState(DP_PV_KWH, +(pvWh / 1000).toFixed(3), true);
                                            
                                                   // Bilanz: PV-Produktion minus Netzbezug (kWh)
                                                   const bilanzKWh = (pvWh - gridWh) / 1000;
                                                   setState(DP_BILANZ_KWH, +bilanzKWh.toFixed(3), true);
                                               }
                                            
                                               // Update letzte Werte und Timestamp für nächste Berechnung
                                               lastPVPower = pvPower;
                                               lastBatPower = batPower;
                                               lastGridPower = gridPower;
                                               lastTimestamp = jetzt;
                                            }
                                            
                                            // --- Event-Listener: Trigger bei Änderung eines relevanten Datenpunkts ---
                                            
                                            // Abonnieren aller 3 relevanten Datenpunkte, um schnell reagieren zu können
                                            on({ id: [SENEC_PV_POWER, SENEC_BAT_POWER, SENEC_GRID_POWER], change: 'ne' }, () => {
                                               const pvPower = getStateSafe(SENEC_PV_POWER);
                                               const batPower = getStateSafe(SENEC_BAT_POWER);
                                               const gridPower = getStateSafe(SENEC_GRID_POWER);
                                            
                                               processNewData(pvPower, batPower, gridPower);
                                            });
                                            
                                            // --- Täglicher Reset der Tageswerte um Mitternacht ---
                                            schedule('0 0 * * *', () => {
                                               log('Tagesreset: Tageswerte auf 0 setzen.');
                                               setState(DP_PV_WH, 0, true);
                                               setState(DP_BAT_WH, 0, true);
                                               setState(DP_GRID_WH, 0, true);
                                               setState(DP_EINSPEISUNG_WH, 0, true);
                                               setState(DP_PV_KWH, 0, true);
                                               setState(DP_BILANZ_KWH, 0, true);
                                            
                                               // Reset lokale Variablen ebenfalls
                                               lastTimestamp = null;
                                               lastPVPower = 0;
                                               lastBatPower = 0;
                                               lastGridPower = 0;
                                            });
                                            
                                            // --- Skriptstart ---
                                            log('PV-Tagesproduktion mit Senec Datenpunkten gestartet.');
                                            
                                            

                                            icebear 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            458
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            adapter photovoltaik senec
                                            69
                                            365
                                            69739
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo