Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Neuer Adapter] Senec Home Adapter

NEWS

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

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

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

[Neuer Adapter] Senec Home Adapter

Geplant Angeheftet Gesperrt Verschoben Entwicklung
photovoltaiksenecadapter
386 Beiträge 70 Kommentatoren 92.4k Aufrufe 67 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • O oxident

    @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 Offline
    D Offline
    dispo112
    schrieb am zuletzt editiert von
    #346

    @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 Antwort Letzte Antwort
    0
    • D dispo112

      @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 Online
      O Online
      oxident
      schrieb am zuletzt editiert von
      #347

      @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 Antwort Letzte Antwort
      0
      • icebearI Offline
        icebearI Offline
        icebear
        schrieb am zuletzt editiert von
        #348

        @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 Antwort Letzte Antwort
        0
        • O oxident

          @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 Offline
          D Offline
          dispo112
          schrieb am zuletzt editiert von
          #349

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

          1 Antwort Letzte Antwort
          1
          • icebearI icebear

            @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 Offline
            D Offline
            dispo112
            schrieb am zuletzt editiert von
            #350

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

            icebearI 1 Antwort Letzte Antwort
            0
            • D dispo112

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

              icebearI Offline
              icebearI Offline
              icebear
              schrieb am zuletzt editiert von icebear
              #351

              @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 Antwort Letzte Antwort
              0
              • icebearI 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 Offline
                D Offline
                dispo112
                schrieb am zuletzt editiert von
                #352

                @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 Antworten Letzte Antwort
                1
                • D dispo112

                  @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 Online
                  O Online
                  oxident
                  schrieb am zuletzt editiert von
                  #353

                  @dispo112 Mega! ... und: Bescheid :grin:

                  1 Antwort Letzte Antwort
                  0
                  • D dispo112

                    @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

                    S Offline
                    S Offline
                    Semmy
                    schrieb am zuletzt editiert von
                    #354

                    @dispo112 Ich auch bitte: Bescheid:blush:

                    1 Antwort Letzte Antwort
                    0
                    • icebearI Offline
                      icebearI Offline
                      icebear
                      schrieb am zuletzt editiert von icebear
                      #355

                      Ich auch Bescheid, bitte 😊

                      D 1 Antwort Letzte Antwort
                      0
                      • icebearI icebear

                        Ich auch Bescheid, bitte 😊

                        D Offline
                        D Offline
                        dispo112
                        schrieb am zuletzt editiert von
                        #356

                        @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.');
                        
                        

                        icebearI 1 Antwort Letzte Antwort
                        1
                        • D dispo112

                          @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.');
                          
                          

                          icebearI Offline
                          icebearI Offline
                          icebear
                          schrieb am zuletzt editiert von
                          #357

                          @dispo112

                          Erst einmal vielen Dank für das Script.

                          Leider bekomme ich einen Fehler beim Starten vom Script.

                          javascript.0	08:39:18.506	info	
                          Start JavaScript script.js.Energie_Strom.Senec.senec_tageswerte (Javascript/js)
                          javascript.0	08:39:18.543	error	
                          ReferenceError: createChannel is not defined
                          javascript.0	08:39:18.543	error	
                              at script.js.Energie_Strom.Senec.senec_tageswerte:48:4
                          javascript.0	08:39:18.544	error	
                              at script.js.Energie_Strom.Senec.senec_tageswerte:174:3
                          
                          S 1 Antwort Letzte Antwort
                          0
                          • icebearI icebear

                            @dispo112

                            Erst einmal vielen Dank für das Script.

                            Leider bekomme ich einen Fehler beim Starten vom Script.

                            javascript.0	08:39:18.506	info	
                            Start JavaScript script.js.Energie_Strom.Senec.senec_tageswerte (Javascript/js)
                            javascript.0	08:39:18.543	error	
                            ReferenceError: createChannel is not defined
                            javascript.0	08:39:18.543	error	
                                at script.js.Energie_Strom.Senec.senec_tageswerte:48:4
                            javascript.0	08:39:18.544	error	
                                at script.js.Energie_Strom.Senec.senec_tageswerte:174:3
                            
                            S Offline
                            S Offline
                            Semmy
                            schrieb am zuletzt editiert von
                            #358

                            @icebear Ich bekomme den gleichen Fehler.

                            D 1 Antwort Letzte Antwort
                            0
                            • S Semmy

                              @icebear Ich bekomme den gleichen Fehler.

                              D Offline
                              D Offline
                              dispo112
                              schrieb am zuletzt editiert von
                              #359

                              @oxident
                              Wenn ihr das Skript nochmal startet - taucht der Fehler dann wieder auf? Oder nur beim Initial Start?

                              icebearI S 2 Antworten Letzte Antwort
                              0
                              • D dispo112

                                @oxident
                                Wenn ihr das Skript nochmal startet - taucht der Fehler dann wieder auf? Oder nur beim Initial Start?

                                icebearI Offline
                                icebearI Offline
                                icebear
                                schrieb am zuletzt editiert von
                                #360

                                @dispo112

                                Der Fehler kommt auch nach einem erneuten Start des Script.

                                1 Antwort Letzte Antwort
                                0
                                • D dispo112

                                  @oxident
                                  Wenn ihr das Skript nochmal startet - taucht der Fehler dann wieder auf? Oder nur beim Initial Start?

                                  S Offline
                                  S Offline
                                  Semmy
                                  schrieb am zuletzt editiert von
                                  #361

                                  @dispo112 Der Fehler kommt immer wieder.

                                  D 1 Antwort Letzte Antwort
                                  0
                                  • S Semmy

                                    @dispo112 Der Fehler kommt immer wieder.

                                    D Offline
                                    D Offline
                                    dispo112
                                    schrieb am zuletzt editiert von
                                    #362

                                    @semmy Seltsam, hatte alle Fehler behoben und es jetzt 1:1 bei mir herauskopiert. 🤔

                                    Schaue ich mir nachher an!

                                    icebearI 1 Antwort Letzte Antwort
                                    0
                                    • D dispo112

                                      @semmy Seltsam, hatte alle Fehler behoben und es jetzt 1:1 bei mir herauskopiert. 🤔

                                      Schaue ich mir nachher an!

                                      icebearI Offline
                                      icebearI Offline
                                      icebear
                                      schrieb am zuletzt editiert von
                                      #363

                                      @dispo112

                                      Ich glaub es reicht wenn du 'createChannel' durch 'createState' ersetzt.

                                      // --- Ordner (Channel) anlegen, falls nicht vorhanden ---
                                      if (!existsObject(BASE_DP_PATH)) {
                                         createState(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');
                                             }
                                         });
                                      }
                                      
                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        Semmy
                                        schrieb am zuletzt editiert von
                                        #364

                                        Ok, funktioniert jetzt. Wie bekommt man die Datenpunkte in Home Assistant?

                                        Viele Grüße
                                        Semmy

                                        icebearI 1 Antwort Letzte Antwort
                                        0
                                        • S Semmy

                                          Ok, funktioniert jetzt. Wie bekommt man die Datenpunkte in Home Assistant?

                                          Viele Grüße
                                          Semmy

                                          icebearI Offline
                                          icebearI Offline
                                          icebear
                                          schrieb am zuletzt editiert von
                                          #365

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

                                          Wie bekommt man die Datenpunkte in Home Assistant?

                                          Also ich mach das bei einem anderen Projekt mit MQTT.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          449

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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