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. Entwicklung
  4. [Neuer Adapter] Senec Home Adapter

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    11
    1
    534

  • Neuer ioBroker-Blog online: MonatsrĂŒckblick MĂ€rz/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.9k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    856

[Neuer Adapter] Senec Home Adapter

Geplant Angeheftet Gesperrt Verschoben Entwicklung
photovoltaiksenecadapter
450 BeitrÀge 72 Kommentatoren 112.9k Aufrufe 68 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.
  • icebearI icebear

    @musicnrw

    Ich benutze diese Scripte nicht mehr, weil ich die in einem Script zusammengefasst habe.

    Hier das Script welches ich jetzt verwende, du mußt dort halt die Datenpunkte evtl. auf deine Gegebenheiten anpassen. Beim ersten Start sollten vom Script alle erforderlichen Datenpunkte, wenn sie nicht vorhanden sind, erstellt werden.

    Wichtig!!! Das ist ein TypeScript. Also beim erstellen nicht JS nehmen sondern ganz rechts TS

    Kannst ja mal schauen.

    // -----------------------------------------------------------------------------------
    // 1. KONFIGURATION
    // -----------------------------------------------------------------------------------
    
    // Basis-Pfad fĂŒr eigene Datenpunkte (muss in ioBroker unter 0_userdata.0.Energie.Senec. konsolidiert werden)
    const BASE_DP_PATH = '0_userdata.0.Energie.Senec';
    
    // Senec Quell-Datenpunkte (Leistung in Watt)
    // WICHTIG: PrĂŒfen, ob die IDs in Ihrer Installation korrekt sind!
    const PowerSourceIds = {
        // Skript 1: Negativ = Einspeisung, Positiv = Netzbezug
        GRID_POWER: "senec.0.ENERGY.GUI_GRID_POW",
        // Skript 2: Hausverbrauch (immer positiv)
        HOUSE_CONSUMPTION_POWER: "senec.0.ENERGY.GUI_HOUSE_POW",
        // Skript 3: Positiv = Laden (In), Negativ = Entladen (Out)
        BAT_POWER: "senec.0.ENERGY.GUI_BAT_DATA_POWER",
        // Skript 4: PV-Produktion (immer positiv)
        PV_POWER: "senec.0.ENERGY.GUI_INVERTER_POWER",
    };
    
    // Ziel-Datenpunkte (Tagesenergie in Wh und kWh)
    const TargetStateIds = {
        // Skript 1
        DAILY_FEED_IN_WH: `${BASE_DP_PATH}.Tages_Einspeisung_Wh`,
        DAILY_FEED_IN_KWH: `${BASE_DP_PATH}.Tages_Einspeisung_kWh`,
        DAILY_GRID_PURCHASE_WH: `${BASE_DP_PATH}.Tages_Netzbezug_Wh`,
        DAILY_GRID_PURCHASE_KWH: `${BASE_DP_PATH}.Tages_Netzbezug_kWh`,
    
        // Skript 2
        DAILY_HOUSE_CONSUMPTION_WH: `${BASE_DP_PATH}.Tages_Hausverbrauch_Wh`,
        DAILY_HOUSE_CONSUMPTION_KWH: `${BASE_DP_PATH}.Tages_Hausverbrauch_kWh`,
    
        // Skript 3 (Bat_Out = Entladen, Bat_In = Laden)
        DAILY_BAT_OUT_WH: `${BASE_DP_PATH}.Bat_Out_Wh`,
        DAILY_BAT_OUT_KWH: `${BASE_DP_PATH}.Bat_Out_kWh`,
        DAILY_BAT_IN_WH: `${BASE_DP_PATH}.Bat_In_Wh`,
        DAILY_BAT_IN_KWH: `${BASE_DP_PATH}.Bat_In_kWh`,
    
        // Skript 4 (ZusÀtzliche PV- und Bilanz-Werte)
        DAILY_PV_WH: `${BASE_DP_PATH}.Tageswerte.pv_wh`,
        DAILY_PV_KWH: `${BASE_DP_PATH}.Tageswerte.pv_kwh`,
        DAILY_BILANZ_KWH: `${BASE_DP_PATH}.Tageswerte.bilanz_kwh`,
        DAILY_GRID_WH_S4: `${BASE_DP_PATH}.Tageswerte.netz_wh`, // Duplikat von DAILY_GRID_PURCHASE_WH
        DAILY_FEED_IN_WH_S4: `${BASE_DP_PATH}.Tageswerte.einspeisung_wh`, // Duplikat von DAILY_FEED_IN_WH
    };
    
    // -----------------------------------------------------------------------------------
    // 2. TYPEN, GLOBALE VARIABLEN UND HILFSFUNKTIONEN
    // -----------------------------------------------------------------------------------
    
    // Typsichere Definition der globalen Variablen fĂŒr die Integration
    // Der SchlĂŒssel ist die PowerSourceId, der Wert speichert den letzten Zustand.
    interface LastState {
        lastPower: number;
        lastTime: number; // Zeitstempel in Millisekunden
    }
    
    // Speichert den letzten Zustand fĂŒr jede Quelle separat
    const lastStates: { [key: string]: LastState } = {};
    
    // Typsichere Definition fĂŒr die Erstellung der States
    interface CommonStateOptions {
        name: string;
        type: "number";
        read: boolean;
        write: boolean;
        role: string;
        unit: "Wh" | "kWh";
        desc?: string;
    }
    
    // Definiert alle zu erstellenden Datenpunkte
    const stateDefinitions: { id: string; initialValue: number; common: CommonStateOptions }[] = [
        // Skript 1
        { id: TargetStateIds.DAILY_FEED_IN_WH, initialValue: 0, common: { name: 'TĂ€gliche Einspeisung (Wh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_FEED_IN_KWH, initialValue: 0, common: { name: 'TĂ€gliche Einspeisung (kWh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'kWh' } },
        { id: TargetStateIds.DAILY_GRID_PURCHASE_WH, initialValue: 0, common: { name: 'TĂ€glicher Netzbezug (Wh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_GRID_PURCHASE_KWH, initialValue: 0, common: { name: 'TĂ€glicher Netzbezug (kWh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'kWh' } },
    
        // Skript 2
        { id: TargetStateIds.DAILY_HOUSE_CONSUMPTION_WH, initialValue: 0, common: { name: 'TĂ€glicher Hausverbrauch (Wh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'Wh', desc: 'Summierter Hausverbrauch fĂŒr den aktuellen Tag in Wattstunden' } },
        { id: TargetStateIds.DAILY_HOUSE_CONSUMPTION_KWH, initialValue: 0, common: { name: 'TĂ€glicher Hausverbrauch (kWh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'kWh', desc: 'Summierter Hausverbrauch fĂŒr den aktuellen Tag in Kilowattstunden' } },
    
        // Skript 3
        { id: TargetStateIds.DAILY_BAT_OUT_WH, initialValue: 0, common: { name: 'Daily BatOut (Wh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_BAT_OUT_KWH, initialValue: 0, common: { name: 'Daily BatOut (kWh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'kWh' } },
        { id: TargetStateIds.DAILY_BAT_IN_WH, initialValue: 0, common: { name: 'Daily BatIn (Wh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_BAT_IN_KWH, initialValue: 0, common: { name: 'Daily BatIn (kWh)', type: 'number', read: true, write: false, role: 'value.power.consumption', unit: 'kWh' } },
        
        // Skript 4
        { id: TargetStateIds.DAILY_PV_WH, initialValue: 0, common: { name: 'Tageswert PV in Wh', type: 'number', read: true, write: false, role: 'value.power', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_PV_KWH, initialValue: 0, common: { name: 'Tageswert PV in kWh', type: 'number', read: true, write: false, role: 'value.power', unit: 'kWh' } },
        { id: TargetStateIds.DAILY_BILANZ_KWH, initialValue: 0, common: { name: 'Bilanz kWh (PV - Netzbezug)', type: 'number', read: true, write: false, role: 'value.power', unit: 'kWh' } },
        // Die folgenden sind Duplikate aus Skript 4, die wir beibehalten, um Skript 4 vollstÀndig abzubilden
        { id: TargetStateIds.DAILY_GRID_WH_S4, initialValue: 0, common: { name: 'Tages-Wh Netzbezug (S4)', type: 'number', read: true, write: false, role: 'value.power', unit: 'Wh' } },
        { id: TargetStateIds.DAILY_FEED_IN_WH_S4, initialValue: 0, common: { name: 'Tages-Wh Einspeisung (S4)', type: 'number', read: true, write: false, role: 'value.power', unit: 'Wh' } }
    ];
    
    /**
     * Erstellt einen Datenpunkt, falls er noch nicht existiert.
     * @param id ID des zu erstellenden States.
     * @param initialValue Initialer Wert.
     * @param common Common-Objekt Definition.
     */
    function createStateIfNotExists(id: string, initialValue: number, common: CommonStateOptions): void {
        if (!existsState(id)) {
            createState(id, initialValue, common, (err) => {
                if (err) {
                    log(`Fehler beim Erstellen des Datenpunkts ${id}: ${err}`, 'error');
                } else {
                    log(`Datenpunkt ${id} erfolgreich erstellt.`, 'info');
                }
            });
        }
    }
    
    /**
     * Liest den Wert eines States sicher und gibt 0 zurĂŒck, falls ungĂŒltig.
     * @param id ID des States.
     * @returns Der Wert als Zahl oder 0.
     */
    async function getStateSafeAsync(id: string): Promise<number> {
        const state = await getStateAsync(id);
        if (state && typeof state.val === 'number') {
            return state.val;
        }
        // Float-Parsing fĂŒr den Fall, dass der Wert als String gespeichert wurde (trotz Type 'number')
        if (state && state.val !== null && state.val !== undefined) {
            const parsed = parseFloat(state.val.toString());
            return isNaN(parsed) ? 0 : parsed;
        }
        return 0;
    }
    
    /**
     * Setzt einen Wert in Wh und berechnet und setzt automatisch den zugehörigen kWh-Wert.
     * @param whId ID des Wh-Datenpunkts.
     * @param kwhId ID des kWh-Datenpunkts.
     * @param whValue Wert in Wh.
     */
    function setEnergyStates(whId: string, kwhId: string, whValue: number): void {
        // Wh als echte Zahl speichern (mit 2 Nachkommastellen runden, um Rundungsfehler zu minimieren, aber als NUMBER)
        // Wir verwenden Math.round, um Rundungsfehler zu kontrollieren, bevor wir die Zahl speichern.
        const roundedWh = Math.round(whValue * 100) / 100; 
        setState(whId, roundedWh, true); // **HIER: Übergabe einer Zahl (roundedWh)**
    
        // kWh auf 3 Nachkommastellen formatieren (als String)
        const kwhString = (roundedWh / 1000).toFixed(3);
        setState(kwhId, +kwhString, true); // **KORREKTUR: Verwende +kwhString**
    }
    
    // -----------------------------------------------------------------------------------
    // 3. INITIALISIERUNG UND HAUPTLOGIK (INTEGRATION)
    // -----------------------------------------------------------------------------------
    
    /**
     * Erstellt alle benötigten Datenpunkte und initialisiert die globalen Last-State-Variablen.
     */
    async function initializeScript(): Promise<void> {
        log("Starte Initialisierung des Energie-Bilanz-Skripts.");
    
        // Erstellen des Basisordners, falls nicht vorhanden (fĂŒr Skript 4 relevant)
        if (!existsObject(`${BASE_DP_PATH}.Tageswerte`)) {
            createState(`${BASE_DP_PATH}.Tageswerte`, 'Ordner fĂŒr zusĂ€tzliche Energie-Tagesdatenpunkte', (err) => {
                if (err) log(`Fehler beim Erstellen des Ordners: ${err}`, 'error');
                else log(`Ordner ${BASE_DP_PATH}.Tageswerte erfolgreich erstellt`, 'info');
            });
        }
    
        // Erstellen/PrĂŒfen aller Datenpunkte
        for (const definition of stateDefinitions) {
            createStateIfNotExists(definition.id, definition.initialValue, definition.common);
        }
    
        // Initialisierung der Last-States fĂŒr jede Quelle
        const allSourceIds = Object.values(PowerSourceIds);
        const currentTime = Date.now();
    
        for (const id of allSourceIds) {
            // Versucht, den aktuellen Wert des Power-States zu lesen
            const powerState = await getStateSafeAsync(id);
            
            lastStates[id] = {
                lastPower: powerState,
                lastTime: currentTime
            };
            log(`Initialisiere ${id} mit Leistung: ${powerState} W und Zeit: ${currentTime}.`);
        }
    
        log("Initialisierung abgeschlossen.");
    }
    
    /**
     * Generische Funktion zur Berechnung der Delta-Energie und Aktualisierung der Ziel-States.
     * @param sourceId Die ID des Power-Quell-States (z.B. GRID_POWER).
     * @param currentPower Der aktuelle Leistungswert.
     * @param currentTime Der aktuelle Zeitstempel.
     */
    async function processPowerUpdate(sourceId: string, currentPower: number, currentTime: number): Promise<void> {
        const lastState = lastStates[sourceId];
    
        // Sicherstellen der Initialisierung
        if (!lastState || lastState.lastTime === currentTime) {
            // Sollte nicht passieren, da initializeScript aufgerufen wird, aber als Fallback
            lastStates[sourceId] = { lastPower: currentPower, lastTime: currentTime };
            return;
        }
    
        const timeDiffSeconds = (currentTime - lastState.lastTime) / 1000;
    
        if (timeDiffSeconds <= 0) {
            return; // Keine Zeit vergangen oder ungĂŒltige Messung
        }
    
        // Berechnung der Energie: E [Wh] = P [W] * t [s] / 3600
        // WICHTIG: Hier verwenden wir den aktuellen Power-Wert fĂŒr eine einfache Trapez-AnnĂ€herung
        // Die meisten Skripte verwenden nur den aktuellen Wert. Um die KomplexitĂ€t des ursprĂŒnglichen Codes beizubehalten, 
        // verwenden wir den aktuellen Wert * deltaT, obwohl oft (lastPower + currentPower) / 2 * deltaT genauer ist.
        const energyWs = currentPower * timeDiffSeconds; 
        const energyWh = energyWs / 3600;
    
        // Aktuellen summierten Tageswert lesen (Wh)
    let currentWhValue = 0;
        
        switch (sourceId) {
            case PowerSourceIds.GRID_POWER:
                // Einspeisung (Negativ) vs. Netzbezug (Positiv)
                if (currentPower < 0) { // Einspeisung
                    const absEnergyWh = Math.abs(energyWh);
                    currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_FEED_IN_WH)) + absEnergyWh;
                    setEnergyStates(TargetStateIds.DAILY_FEED_IN_WH, TargetStateIds.DAILY_FEED_IN_KWH, currentWhValue);
                    
                    // Skript 4 Duplikat aktualisieren: Verwenden Sie hier auch eine Zahl
                    const roundedFeedInWhS4 = Math.round(currentWhValue * 100) / 100;
                    setState(TargetStateIds.DAILY_FEED_IN_WH_S4, roundedFeedInWhS4, true); // **HIER: Übergabe einer Zahl**
                    
                } else { // Netzbezug
                    currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_GRID_PURCHASE_WH)) + energyWh;
                    setEnergyStates(TargetStateIds.DAILY_GRID_PURCHASE_WH, TargetStateIds.DAILY_GRID_PURCHASE_KWH, currentWhValue);
                    
                    // Skript 4 Duplikat aktualisieren: Verwenden Sie hier auch eine Zahl
                    const roundedGridWhS4 = Math.round(currentWhValue * 100) / 100;
                    setState(TargetStateIds.DAILY_GRID_WH_S4, roundedGridWhS4, true); // **HIER: Übergabe einer Zahl**
                }
                break;
    
            case PowerSourceIds.HOUSE_CONSUMPTION_POWER:
                // Hausverbrauch (immer positiv)
                currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_HOUSE_CONSUMPTION_WH)) + energyWh;
                setEnergyStates(TargetStateIds.DAILY_HOUSE_CONSUMPTION_WH, TargetStateIds.DAILY_HOUSE_CONSUMPTION_KWH, currentWhValue);
                break;
                
            case PowerSourceIds.BAT_POWER:
                // Batterie: Laden (Positiv) vs. Entladen (Negativ)
                if (currentPower < 0) { // Entladen (Out)
                    const absEnergyWh = Math.abs(energyWh);
                    currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_BAT_OUT_WH)) + absEnergyWh;
                    setEnergyStates(TargetStateIds.DAILY_BAT_OUT_WH, TargetStateIds.DAILY_BAT_OUT_KWH, currentWhValue);
                } else { // Laden (In)
                    currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_BAT_IN_WH)) + energyWh;
                    setEnergyStates(TargetStateIds.DAILY_BAT_IN_WH, TargetStateIds.DAILY_BAT_IN_KWH, currentWhValue);
                }
                break;
    
            case PowerSourceIds.PV_POWER:
                // PV-Produktion (immer positiv)
                currentWhValue = (await getStateSafeAsync(TargetStateIds.DAILY_PV_WH)) + energyWh;
                setEnergyStates(TargetStateIds.DAILY_PV_WH, TargetStateIds.DAILY_PV_KWH, currentWhValue);
                break;
        }
    
        // Bilanz-KWh (Skript 4 Logik) nur berechnen, wenn einer der relevanten Werte aktualisiert wird
        if (sourceId === PowerSourceIds.PV_POWER || sourceId === PowerSourceIds.GRID_POWER) {
            const pvWh = await getStateSafeAsync(TargetStateIds.DAILY_PV_WH);
            const gridWh = await getStateSafeAsync(TargetStateIds.DAILY_GRID_PURCHASE_WH);
            const bilanzKWh = (pvWh - gridWh) / 1000;
    
            // Der Unary Plus Operator (+) konvertiert den toFixed()-String zurĂŒck in eine Zahl.
            setState(TargetStateIds.DAILY_BILANZ_KWH, +bilanzKWh.toFixed(3), true); 
        }
        
        // Werte fĂŒr die nĂ€chste Iteration speichern
        lastState.lastPower = currentPower;
        lastState.lastTime = currentTime;
    }
    
    // -----------------------------------------------------------------------------------
    // 4. TRIGGGER UND SCHEDULER
    // -----------------------------------------------------------------------------------
    
    // 1. Initialisierung beim Skriptstart
    initializeScript();
    
    // 2. Trigger bei Änderung eines Leistungsdatenpunkts (Einspeisung/Bezug, Haus, Batterie, PV)
    on({ id: Object.values(PowerSourceIds), change: 'ne' }, async function (obj) {
        const sourceId = obj.id as string;
        const currentPower = parseFloat(obj.state.val);
        const currentTime = Date.now();
    
        if (isNaN(currentPower)) {
            log(`UngĂŒltiger Leistungswert fĂŒr ${sourceId}: ${obj.state.val}. Berechnung ĂŒbersprungen.`, 'warn');
            return;
        }
    
        await processPowerUpdate(sourceId, currentPower, currentTime);
    });
    
    // 3. Reset der Tagessummen um Mitternacht
    schedule('0 0 * * *', async function () {
        log("Mitternacht erreicht, setze Tagessummen zurĂŒck.");
        
        // Setze alle Ziel-Datenpunkte auf 0
        for (const id of Object.values(TargetStateIds)) {
            setState(id, 0, true);
        }
    
        // Reset der Last-States fĂŒr korrekte Berechnung am neuen Tag
        const allSourceIds = Object.values(PowerSourceIds);
        const currentTime = Date.now();
    
        for (const id of allSourceIds) {
            // Aktuellen Power-Wert erneut holen, um als 'lastPower' fĂŒr den neuen Tag zu dienen
            const currentPower = await getStateSafeAsync(id);
            lastStates[id] = { lastPower: currentPower, lastTime: currentTime };
        }
    
        log("Alle Tagessummen und ZĂ€hler wurden zurĂŒckgesetzt.");
    });
    
    
    
    M Offline
    M Offline
    musicnrw
    schrieb am zuletzt editiert von
    #382

    @icebear, vielen Dank fĂŒr Deine schnelle Antwort.
    Ich denke, ich kann das neue Gesamtscript, ohne an den alten was zu Ă€ndern oder diese zu deaktivieren, parallel installieren und die damit erzeugten Datenpunkte zumindest erstmal testweise fĂŒr Visulaisierungen mit Grafana verwenden?

    icebearI 1 Antwort Letzte Antwort
    0
    • M musicnrw

      @icebear, vielen Dank fĂŒr Deine schnelle Antwort.
      Ich denke, ich kann das neue Gesamtscript, ohne an den alten was zu Ă€ndern oder diese zu deaktivieren, parallel installieren und die damit erzeugten Datenpunkte zumindest erstmal testweise fĂŒr Visulaisierungen mit Grafana verwenden?

      icebearI Online
      icebearI Online
      icebear
      schrieb am zuletzt editiert von
      #383

      @musicnrw

      Das wÀre ein guter Plan, und wenn alles lÀuft, dann einfach die alten deaktivieren.

      M 1 Antwort Letzte Antwort
      0
      • icebearI icebear

        @musicnrw

        Das wÀre ein guter Plan, und wenn alles lÀuft, dann einfach die alten deaktivieren.

        M Offline
        M Offline
        musicnrw
        schrieb am zuletzt editiert von
        #384

        @icebear, Du schreibst ja "...du mußt dort halt die Datenpunkte evtl. auf deine Gegebenheiten anpassen....". Meinst Du mit diesen Datenpunkten die, deren Werte ich spĂ€ter in Grafana zur Visualisierung heranziehe?
        Und wie kann ich es erreichen, dass ich fĂŒr Auswertungen (z.B. PV-Ertrag letzte Woche, letzter Monat, letztes Jahr) sowohl auf die Daten zurĂŒckgreifen kann, die mit den alten Scripts generiert und in die InfluxDB geschrieben wurden, wie auch auf die Daten, die ab Tag X mit Deinem neuen Script in die InfluxDB wandern? Reicht dazu die identische Benennung der Datenpunkte bzw. ist es ĂŒberhaupt möglich, dass Daten vom alten und neuen Script in gleich benannte Datenpunkte geschrieben werden (Konsistenz?)?

        icebearI 1 Antwort Letzte Antwort
        0
        • M musicnrw

          @icebear, Du schreibst ja "...du mußt dort halt die Datenpunkte evtl. auf deine Gegebenheiten anpassen....". Meinst Du mit diesen Datenpunkten die, deren Werte ich spĂ€ter in Grafana zur Visualisierung heranziehe?
          Und wie kann ich es erreichen, dass ich fĂŒr Auswertungen (z.B. PV-Ertrag letzte Woche, letzter Monat, letztes Jahr) sowohl auf die Daten zurĂŒckgreifen kann, die mit den alten Scripts generiert und in die InfluxDB geschrieben wurden, wie auch auf die Daten, die ab Tag X mit Deinem neuen Script in die InfluxDB wandern? Reicht dazu die identische Benennung der Datenpunkte bzw. ist es ĂŒberhaupt möglich, dass Daten vom alten und neuen Script in gleich benannte Datenpunkte geschrieben werden (Konsistenz?)?

          icebearI Online
          icebearI Online
          icebear
          schrieb am zuletzt editiert von
          #385

          @musicnrw

          Du kannst doch die Tageswerte in der InfluxDB speichern und dann in der Abfrage mit der 'aggregation' (day, week, month) festlegen wie diese in Grafana dargestellt werden. oder du machst es so wie es @haus-automatisierung in diesem Video mal erklÀrt hat.

          M 1 Antwort Letzte Antwort
          0
          • icebearI icebear

            @musicnrw

            Du kannst doch die Tageswerte in der InfluxDB speichern und dann in der Abfrage mit der 'aggregation' (day, week, month) festlegen wie diese in Grafana dargestellt werden. oder du machst es so wie es @haus-automatisierung in diesem Video mal erklÀrt hat.

            M Offline
            M Offline
            musicnrw
            schrieb am zuletzt editiert von
            #386

            @icebear , die Aggregierung ist schon klar, mache ich ja heute schon. Ich sehe nur die Schwierigkeit, dass die Datenpunkte nach altem Script z.B. in Datenpunkt "AAA" landen in der InfluxDB und die nach neuem Script in Datenpunkt "BBB". Wenn ich jetzt eine Auswertung ĂŒber zurĂŒckliegende ZeitrĂ€ume mache (z.B. Jahresauswertung), in die sowohl Daten aus "AAA" (z.B. bis Okt. 2025) wie auch welche aus "BBB" (z.B. ab Nov. 25) einfließen mĂŒssen, mĂŒsste ich ja beide berĂŒcksichtigen und aggregieren.

            1 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              nobl
              schrieb am zuletzt editiert von
              #387

              Hallo zusammen,

              nachdem mein Speicher jetzt wieder lÀuft, konnte ich endlich die (neue) API integrieren.
              Ich wĂŒrde das Release 2.2.2 auch möglichst schnell in Stable verschieben wollen, um die volle FunktionalitĂ€t wiederherzustellen - dazu mĂŒssten aber bitte möglichst viele erstmal von latest aus updaten.

              Die GrundfunktionalitĂ€t fĂŒr die lokalen Abfragen sind quasi unverĂ€ndert (bis auf notwendiges Housekeeping) - daher erwarte ich dort keine Ungemach.
              Die API FunktionalitÀt ist jedoch komplett neu - funktioniert bei mir inzwischen sehr stabil - aber ein paar mehr Freiwillige hÀtte ich schon gerne noch :)

              Ich will noch weitere Features integrieren - wichtiger ist mir aber vorerst, eine funktionierende Version in Stable zu bekommen.

              1 Antwort Letzte Antwort
              2
              • H Offline
                H Offline
                HansJochen
                schrieb am zuletzt editiert von
                #388

                Hallo @nobl ,

                super, danke fĂŒr die neue Beta!
                Ich habe sie gerade installiert und sie funktioniert auf den ersten Blick problemlos.

                Folgende Kleinigkeiten sind mir aufgefallen:

                • nach dem Update standen in den Anmeldedaten fĂŒr den API Zugriff unsinnige Werte, ließen sich aber problemlos korrigieren.
                • Zwischen den ganzen alten API Werten hatte ich MĂŒhe, die aktuellen zu finden (hier haben sich ja ĂŒber die Lebensdauer des Adapters ein paar Mal Bezeichnungen geĂ€ndert). Ich habe dann den kompletten Senec.0.* Datenpunkt Baum gelöscht und den Adapter neu gestartet.

                Jetzt sieht alles gut aus.

                N 1 Antwort Letzte Antwort
                1
                • H HansJochen

                  Hallo @nobl ,

                  super, danke fĂŒr die neue Beta!
                  Ich habe sie gerade installiert und sie funktioniert auf den ersten Blick problemlos.

                  Folgende Kleinigkeiten sind mir aufgefallen:

                  • nach dem Update standen in den Anmeldedaten fĂŒr den API Zugriff unsinnige Werte, ließen sich aber problemlos korrigieren.
                  • Zwischen den ganzen alten API Werten hatte ich MĂŒhe, die aktuellen zu finden (hier haben sich ja ĂŒber die Lebensdauer des Adapters ein paar Mal Bezeichnungen geĂ€ndert). Ich habe dann den kompletten Senec.0.* Datenpunkt Baum gelöscht und den Adapter neu gestartet.

                  Jetzt sieht alles gut aus.

                  N Offline
                  N Offline
                  nobl
                  schrieb am zuletzt editiert von
                  #389

                  @HansJochen ja - das mit den logindaten hatte ich im entsprechenden release vergessen, zu erwÀhnen :)
                  Die Art, wie das auf iobroker Seite verschlĂŒsselt gespeichert wird, hat sich leider etwas geĂ€ndert, weshalb hier dann beim EntschlĂŒsseln KĂ€se rauskommt. Einmal neu eintragen und dann passt das :)

                  Wegen der Pfade:
                  Die Pfade der Daten ĂŒber den lokalen Zugriff Ă€ndern sich nicht (was nicht heißt, dass Datenpunkte inaktiv werden, wenn sie bei einem Appliance Update entfernt werden).
                  Die API - nunja :) Hier bin ich stark abhÀngig von dem, was geliefert wird.

                  GrundsĂ€tzlich: unter _api.* liegt all das, was ĂŒber die API kommt. Die konkreten Pfade haben sich leider geĂ€ndert.
                  Mir selbst fĂ€llt das zB gar nicht nennenswert auf, da ich eine komplett neue Anlage bekommen habe. Theoretisch wĂŒrde es also reichen, den _api Baum zu putzen.

                  Die Datenpunkte, die ĂŒber die neue API kommen sind alle Englisch - daran kann man es meist schon gut unterscheiden.

                  Als Hilfestellung fĂŒr andere:
                  Von der neuen API werden folgende Pfade gelesen:

                  Senec.x._api.Anlagen.12345.
                  1e0f3016-b72c-4463-9eb3-963e3cd45c29-grafik.png

                  Ich biege das inzwischen alles nicht mehr um auf Pfade, die vermeintlich sinnvoll sein könnten - kaum Àndert sich dann was in der API, ist eh wieder alles falsch :(

                  "Dashboard" dĂŒrfte nahezu 1:1 das sein, was senec auf der Website listet.
                  Unter "Measurements" grundsÀtzlich auch - allerdings ruft der Adapter die Daten dann etwas kreativ ab, um sie passend abzulegen.

                  1 Antwort Letzte Antwort
                  2
                  • N Offline
                    N Offline
                    nobl
                    schrieb am zuletzt editiert von
                    #390

                    Ich habe vorhin eine neue Version (2.3.0) ins latest gepackt.
                    Das dĂŒrfte diejenigen freuen, die gerne die Daten noch feingranularer haben möchten (z. B. die Messungen des Tages auch noch aufgeteilt in die Stunden) :)

                    1 Antwort Letzte Antwort
                    2
                    • FreunderNachtF Offline
                      FreunderNachtF Offline
                      FreunderNacht
                      schrieb am zuletzt editiert von
                      #391

                      @nobl
                      Besten dank fĂŒr deine Arbeit an dem Adapter 👍

                      Intel NUC mit Proxmox
                      IO Broker (Homematic IP / CCU3 / Shelly / Tasmota / Zigbee)
                      Influx DB
                      Grafana
                      PiHole
                      PiVPN

                      N 1 Antwort Letzte Antwort
                      0
                      • FreunderNachtF FreunderNacht

                        @nobl
                        Besten dank fĂŒr deine Arbeit an dem Adapter 👍

                        N Offline
                        N Offline
                        nobl
                        schrieb am zuletzt editiert von
                        #392

                        @FreunderNacht sagte in [Neuer Adapter] Senec Home Adapter:

                        @nobl
                        Besten dank fĂŒr deine Arbeit an dem Adapter 👍

                        Danke fĂŒrs Feedback!

                        Nachdem bei mir wieder vieles funktioniert kann ich mir jetzt vielleicht endlich die Steuerung der "Steckdosen" vornehmen :)

                        1 Antwort Letzte Antwort
                        0
                        • T Offline
                          T Offline
                          toto68
                          schrieb am zuletzt editiert von Samson71
                          #393

                          Hallo,
                          Ich habe hier bei mir seit dem 24.02.2026 das Problem das der Adapter keine API-Daten mehr abruft. Im IOB-Log finde ich "Login Error: Login fehlgeschlagen (Kein Redirect)".Auch nach dem Update des Adapters auf v2.3.0 bleibt der Fehler bestehen.Die Login-Daten habe ich ĂŒberprĂŒft.
                          Hat sonst noch jemand diesen Fehler?

                          toto

                          M N 2 Antworten Letzte Antwort
                          0
                          • T toto68

                            Hallo,
                            Ich habe hier bei mir seit dem 24.02.2026 das Problem das der Adapter keine API-Daten mehr abruft. Im IOB-Log finde ich "Login Error: Login fehlgeschlagen (Kein Redirect)".Auch nach dem Update des Adapters auf v2.3.0 bleibt der Fehler bestehen.Die Login-Daten habe ich ĂŒberprĂŒft.
                            Hat sonst noch jemand diesen Fehler?

                            toto

                            M Offline
                            M Offline
                            Master77
                            schrieb am zuletzt editiert von Master77
                            #394

                            @toto68 Hatte ich auch. Du musst die Login Daten nochmal neu im den Adapter eintragen. Das was dort eingetragen war habe ich gelöscht und die korrekten Daten eingetragen. Nachdem speichern lief wieder alles wie gewohnt.

                            Danke an der Stelle fĂŒr die Arbeit an dem Adapter. đŸ‘đŸ»

                            T 1 Antwort Letzte Antwort
                            0
                            • M Master77

                              @toto68 Hatte ich auch. Du musst die Login Daten nochmal neu im den Adapter eintragen. Das was dort eingetragen war habe ich gelöscht und die korrekten Daten eingetragen. Nachdem speichern lief wieder alles wie gewohnt.

                              Danke an der Stelle fĂŒr die Arbeit an dem Adapter. đŸ‘đŸ»

                              T Offline
                              T Offline
                              toto68
                              schrieb am zuletzt editiert von
                              #395

                              @Master77 Ja das mit dem neueintragen der Login-Daten habe ich schon versucht,leider bleibt der Fehler "kein Redirect" bestehen.
                              Ich hatte letzte Woche den Adapter v1.6.17 auf v2.2.0 geupdatet.Danach hat der Abruf der API-Daten funktioniert , aber ab dem 24.02. hat der Adapter keine neuen Daten empfangen.

                              toto

                              Thomas BraunT 1 Antwort Letzte Antwort
                              0
                              • T toto68

                                @Master77 Ja das mit dem neueintragen der Login-Daten habe ich schon versucht,leider bleibt der Fehler "kein Redirect" bestehen.
                                Ich hatte letzte Woche den Adapter v1.6.17 auf v2.2.0 geupdatet.Danach hat der Abruf der API-Daten funktioniert , aber ab dem 24.02. hat der Adapter keine neuen Daten empfangen.

                                toto

                                Thomas BraunT Online
                                Thomas BraunT Online
                                Thomas Braun
                                Most Active
                                schrieb am zuletzt editiert von
                                #396

                                @toto68

                                Rest vom System ist auf Stand?
                                Wo bist du denn da insgesamt unterwegs?
                                Schau dir die Ausgabe von

                                iob diag
                                

                                an.

                                Linux-Werkzeugkasten:
                                https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                                NodeJS Fixer Skript:
                                https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                                iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                                T 1 Antwort Letzte Antwort
                                0
                                • Thomas BraunT Thomas Braun

                                  @toto68

                                  Rest vom System ist auf Stand?
                                  Wo bist du denn da insgesamt unterwegs?
                                  Schau dir die Ausgabe von

                                  iob diag
                                  

                                  an.

                                  T Offline
                                  T Offline
                                  toto68
                                  schrieb am zuletzt editiert von
                                  #397

                                  @Thomas-Braun
                                  Raspi-4

                                  Operating System: Raspbian GNU/Linux 11 (bullseye)
                                     Static hostname: raspberrypi
                                           Icon name: computer
                                              Kernel: Linux 6.1.21-v8+
                                        Architecture: arm64
                                  OS is similar to: debian
                                  
                                  Model           : Raspberry Pi 4 Model B Rev 1.4
                                  Docker          : false
                                  Virtualization  : none
                                  Kernel          : aarch64
                                  Userland        : 32 bit
                                  
                                  Outdated 32Bit architecture detected. Only a pure 64Bit-System will be supported in the future. You will have to reinstall your operating system with full 64Bit support or upgrade to more modern hardware soon.
                                  

                                  Ich update erstmal .

                                  Auf einem Testsystem im Docker bekomme ich allerdings den gleichen Fehler.

                                  toto

                                  Thomas BraunT 1 Antwort Letzte Antwort
                                  0
                                  • T toto68

                                    @Thomas-Braun
                                    Raspi-4

                                    Operating System: Raspbian GNU/Linux 11 (bullseye)
                                       Static hostname: raspberrypi
                                             Icon name: computer
                                                Kernel: Linux 6.1.21-v8+
                                          Architecture: arm64
                                    OS is similar to: debian
                                    
                                    Model           : Raspberry Pi 4 Model B Rev 1.4
                                    Docker          : false
                                    Virtualization  : none
                                    Kernel          : aarch64
                                    Userland        : 32 bit
                                    
                                    Outdated 32Bit architecture detected. Only a pure 64Bit-System will be supported in the future. You will have to reinstall your operating system with full 64Bit support or upgrade to more modern hardware soon.
                                    

                                    Ich update erstmal .

                                    Auf einem Testsystem im Docker bekomme ich allerdings den gleichen Fehler.

                                    toto

                                    Thomas BraunT Online
                                    Thomas BraunT Online
                                    Thomas Braun
                                    Most Active
                                    schrieb am zuletzt editiert von Thomas Braun
                                    #398

                                    @toto68 sagte in [Neuer Adapter] Senec Home Adapter:

                                    Raspbian GNU/Linux 11 (bullseye)

                                    Dann fang damit an. Raspbian 11 hat das EndOfLife mehr als ĂŒberschritten.
                                    Installier da NEU! RaspberryOS 13 'Trixie', diesmal direkt in der 64Bit-Version.

                                    Und der Rest schaut wie aus?

                                    Linux-Werkzeugkasten:
                                    https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                                    NodeJS Fixer Skript:
                                    https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                                    iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • Thomas BraunT Thomas Braun

                                      @toto68 sagte in [Neuer Adapter] Senec Home Adapter:

                                      Raspbian GNU/Linux 11 (bullseye)

                                      Dann fang damit an. Raspbian 11 hat das EndOfLife mehr als ĂŒberschritten.
                                      Installier da NEU! RaspberryOS 13 'Trixie', diesmal direkt in der 64Bit-Version.

                                      Und der Rest schaut wie aus?

                                      T Offline
                                      T Offline
                                      toto68
                                      schrieb am zuletzt editiert von
                                      #399

                                      @Thomas-Braun
                                      Ich bringe mein system jetzt erstmal auf den aktuellen Stand.
                                      Aber wie in meinem letzten Post geschrieben ,das Testsystem im Docker ist aktueller Stand mit dem gleichen Login-Fehler.

                                      toto

                                      Thomas BraunT 1 Antwort Letzte Antwort
                                      0
                                      • T toto68

                                        @Thomas-Braun
                                        Ich bringe mein system jetzt erstmal auf den aktuellen Stand.
                                        Aber wie in meinem letzten Post geschrieben ,das Testsystem im Docker ist aktueller Stand mit dem gleichen Login-Fehler.

                                        toto

                                        Thomas BraunT Online
                                        Thomas BraunT Online
                                        Thomas Braun
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #400

                                        @toto68 sagte in [Neuer Adapter] Senec Home Adapter:

                                        Ich bringe mein system jetzt erstmal auf den aktuellen Stand.

                                        Geht nur per Neuinstallation.

                                        Linux-Werkzeugkasten:
                                        https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                                        NodeJS Fixer Skript:
                                        https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                                        iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                                        1 Antwort Letzte Antwort
                                        0
                                        • T toto68

                                          Hallo,
                                          Ich habe hier bei mir seit dem 24.02.2026 das Problem das der Adapter keine API-Daten mehr abruft. Im IOB-Log finde ich "Login Error: Login fehlgeschlagen (Kein Redirect)".Auch nach dem Update des Adapters auf v2.3.0 bleibt der Fehler bestehen.Die Login-Daten habe ich ĂŒberprĂŒft.
                                          Hat sonst noch jemand diesen Fehler?

                                          toto

                                          N Offline
                                          N Offline
                                          nobl
                                          schrieb am zuletzt editiert von nobl
                                          #401

                                          @toto68 sagte in [Neuer Adapter] Senec Home Adapter:

                                          Hallo,
                                          Ich habe hier bei mir seit dem 24.02.2026 das Problem das der Adapter keine API-Daten mehr abruft. Im IOB-Log finde ich "Login Error: Login fehlgeschlagen (Kein Redirect)".Auch nach dem Update des Adapters auf v2.3.0 bleibt der Fehler bestehen.Die Login-Daten habe ich ĂŒberprĂŒft.
                                          Hat sonst noch jemand diesen Fehler?

                                          toto

                                          das ist ein relativ neuer "Fehler".
                                          Senec hat (mal wieder) die Login-Routine umgebaut :(
                                          Ich bin gerade dabei, eine Versions ins latest zu schieben, die das beheben sollte.

                                          Habe das selbst auch erst heute bei mir bemerkt - und kurzfristig war ich mir nicht sicher, ob ich das Problem auf die Schnelle gelöst bekomme - könnte aber geklappt haben :)

                                          FĂŒr sowas bitte gerne auch ein Issue auf GitHub eröffnen. Dann bekomme ich das schneller mit.

                                          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

                                          427

                                          Online

                                          32.9k

                                          Benutzer

                                          83.0k

                                          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