Photovoltaik Eigenverbrauch,Bilanz,Prognose (Kostal Plenticore; KSEM; BYD HV)

Begonnen von ch.eick, 07 Oktober 2020, 16:09:12

Vorheriges Thema - Nächstes Thema

ch.eick

Es gibt beim Stromboerse_connect und beim Stromboerse Device ein neues update im contrib.
Die Devices, die die Trigger Zeiten im uiState mit anzeigen wurden ebenfass aktualisiert.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo zusammen,
ich denke ich führe hier mitlerweile gruppendynamische Selbstgespräche, aber so what...

In Vorbereitung für eventuelle Strafzahlungen für die Einspeisung zu netzundienlichen Zeiten habe ich mich mal mit der Drosselung beschäftigt.
Über den Active_P_Setpoint in Prozent kann man den Wechselrichter WR_1 mit ModBus bis auf 0 W runter regeln.
Einen Steuerkreis um dies automatisch zu machen habe ich noch nicht geschrieben, aber das kann ja noch kommen.

Active_P_Setpoint in Prozent
attr WR_1 obj-h533-len 1
attr WR_1 obj-h533-reading Active_P_Setpoint
attr WR_1 obj-h533-set 1
attr WR_1 obj-h533-unpack n

set WR_1 Active_P_Setpoint 0
Du darfst diesen Dateianhang nicht ansehen.

Dann habe ich nochmal getestet, ob es auch die Speicher Ladung unterbricht, was zum Glück nicht der Fall ist :-)
Du darfst diesen Dateianhang nicht ansehen.

Du darfst diesen Dateianhang nicht ansehen.

Wenn man nun beide WR setzt, so braucht man sich noch nicht einmal um irgend eine Regelung kümmern, das machen die Plenticore komplett alleine.
Der Speicher wird weiter geladen und auch das Haus versorgt. Ich bin begeistert :-)

set WR_1 Active_P_Setpoint 0
set WR_2 Active_P_Setpoint 0
Du darfst diesen Dateianhang nicht ansehen.
Den aktuellen Hausverbrauch sieht man bei mir in der Tabelle darunter, aber es klappt und im KSEM sieht man auch die Produktion.
Du darfst diesen Dateianhang nicht ansehen.


VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Und schon kommt die nächste Info.

Da ich mit Docker Containern arbeite und letztens ein Update durchgeführt wurde fehlt anscheinen eine Funktion im crypto Modul.
Ich bin kein Entwickler und habe das jetzt nicht tief analysiert, aber mein neuer Freund ChatBGT wusste nach einiger Analyse was ich machen konnte :-)

Es geht um die Authentifizierung beim Plenticore, wo die Funktion derive() verwendet wurde. An der Stelle muss jetzt eine Änderung als Ersatz rein.

99_myUtils.pm
###########################################################
## Kostal Plenticore Autentifizierung PV_Anlage_1
###########################################################

use Encode qw(decode encode);
# use PBKDF2::Tiny qw/derive verify/;
use Crypt::PBKDF2;
use Digest::SHA qw(sha256 hmac_sha256);
use Crypt::URandom qw( urandom );
use Crypt::AuthEnc::GCM;

<snip>

   ######### This code is identical for finish and session #################
   my $bitSalt = decode_base64($salt);

#   Durch einen Docker Update ist die derive() Funktion nicht mehr verfügbar
#   my $r = derive( 'SHA-256', $PASSWD, $bitSalt, $rounds );

#   Ersatz für die derive() Funktion

    my $pbkdf2 = Crypt::PBKDF2->new(
        hash_class => 'HMACSHA2',        # SHA-256 wird hier gesetzt
        hash_args  => { sha_size => 256 },# SHA-256 Bits
        iterations => $rounds,            # die Runden
        output_len => 32                  # Länge des Hashes (in Bytes)
    );

    my $r = $pbkdf2->PBKDF2($bitSalt, $PASSWD);

#  Ende für den Ersatz

   my $ck = encode('UTF-8', "Client Key");
   my $s = hmac_sha256($ck, $r);
   my $underscore = sha256($s);
   my $d = "n=".$user.",r=".$randomString.",r=".$nonce.",s=".$salt.",i=".$rounds.",c=biws,r=".$nonce;

<snip>

Danach ein reload 99_myUtils.pm

Und schon kann man sich wieder korrekt am WR mit der API anmelden.
Aufgefallen ist mir das, da ich einiges nicht mehr abfragen konnte, da dafür ein neues Login erforderlich war.

- 04_auth_me                    Zeigt den Anmeldestatus an. Dort sieht man übrigens auch, wenn das Passwort mal gesperrt wurde.

- 50_events_latests_5           Da sieht man schön das Event Log
- 60_01_Reset_Wechselrichter    So kann man mal ein Software Reset machen, was in der GUI nicht verfügbar ist
- 60_update_status              Falls man mal einen Update startet könnte man somit den Fortschritt abfragen


VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo zusammen,
damit Ihr am Wochenende was zum Testen habt kommt hier eine neu Version der MySQL Procedure für die Datensammlung.
Achtung, die Procedure dwd_load_v1 verwendet ebenfalls die dwdfull Tabelle, die für den ersten Lauf besser gelöscht werden sollte.
Im DbRep könnt Ihr dann einfach das "sqlCmd call dwd_load_v5('full',curdate(),'none');" ändern und einfach starten.

Für einen dauerhaften Wechsel entweder im WR_1_ctl diese stelle ändern, oder halt die Procedure umbenennen.
if ($hour == 5) {
    ::CommandSet(undef, "LogDBRep_PV_KI_Prognose sqlCmd call dwd_load_v1('full',curdate(),'none')");
  } else {
    ::CommandSet(undef, "LogDBRep_PV_KI_Prognose sqlCmd call dwd_load_v1('update',curdate(),'none')");
  }

Die Procedure ist auf Oracle MySQL Version > 8.0.32 optimiert.
- Es läuft bei mir ca 4x schneller im Vergleich zur alten Datensammlung (nur der MySQL Teil, nicht das Pyhton Skript)
- Kleinere Fehler mit Zeitstempeln wurden korrigiert
- Zeitstempel werden auf Stunden auf/ab gerundet
- Der Tageswechsel in den Daten wurde korrigiert
- Randbereiche Morgens und Abends wurden auf 0 gesetzt
- Das Coding ist übersichtlicher
- Es wird die Window Technik verwendet, um die unzähligen SELECT zu sparen
- Wiederholte REGEXP wurden reduziert
- Es gibt nur noch ein INSERT und ein UPDATE um die Tabelle zu schreiben
- Beim "update" werden nicht mehr ganze Blöcke separiert sondern direkt die Zeitfilter

DROP PROCEDURE IF EXISTS dwd_load;

DELIMITER \\

CREATE DEFINER=`fhemuser`@`%` PROCEDURE `dwd_load_v1`(
    IN p_step CHAR(20),
    IN p_date DATE,
    IN p_display CHAR(10)
)
BEGIN

-- =========================================================
-- 1. Tabelle vorbereiten
-- =========================================================

IF p_step = 'full' THEN
    CREATE TABLE IF NOT EXISTS dwdfull (
        TIMESTAMP DATETIME PRIMARY KEY,
        year   INT,
        month  INT,
        day    INT,
        hour   INT,

        TTT    FLOAT DEFAULT 0,
        DD     FLOAT DEFAULT 0,
        VV     FLOAT DEFAULT 0,
        N      FLOAT DEFAULT 0,
        Neff   FLOAT DEFAULT 0,
        R101   FLOAT DEFAULT 0,
        RRS1c  FLOAT DEFAULT 0,
        SunD1  FLOAT DEFAULT 0,
        Rad1h  FLOAT DEFAULT 0,
        SunAz  FLOAT DEFAULT 0,
        SunAlt FLOAT DEFAULT 0,

        yield      FLOAT DEFAULT 0,
        yield_max  FLOAT DEFAULT 0,
        forecast   FLOAT DEFAULT 0
    );

    TRUNCATE TABLE dwdfull;
END IF;

-- =========================================================
-- 2. Zeitfenster definieren
-- =========================================================

SET @v_start = NULL;
SET @v_end   = NULL;

IF p_step='update' THEN
    SET @v_start = p_date;
    SET @v_end   = DATE_ADD(p_date, INTERVAL 2 DAY);
END IF;

INSERT INTO dwdfull (
    TIMESTAMP, year, month, day, hour,
    TTT, DD, VV, N, Neff, R101, RRS1c,
    SunD1, Rad1h, SunAz, SunAlt, yield
)

-- =========================================================
-- 2. Forecast + Astro filtern (Zeitfenster + fc0/fc1 + Stunden)
-- =========================================================

WITH forecast_latest AS (
    SELECT *
    FROM (
        SELECT
            CASE
                WHEN READING LIKE 'fc1_%'
                    -- Runden auf die volle Stunde und dann 1 Tag addieren
                    THEN DATE(DATE_ADD(TIMESTAMP, INTERVAL 1470 MINUTE))  -- (24 * 60) + 30 = 1470
                ELSE DATE(DATE_ADD(TIMESTAMP, INTERVAL 30 MINUTE))
            END AS d,

            CAST(TRIM(BOTH '_' FROM REGEXP_SUBSTR(READING, '_[0-9]+_')) AS UNSIGNED) AS h,

            READING,
            VALUE,
            TIMESTAMP,

            ROW_NUMBER() OVER (
                PARTITION BY
                    CASE
                        WHEN READING LIKE 'fc1_%'
                            -- Runden auf die volle Stunde und dann 1 Tag addieren
                            THEN DATE(DATE_ADD(TIMESTAMP, INTERVAL 1470 MINUTE))  -- (24 * 60) + 30 = 1470
                        ELSE DATE(DATE_ADD(TIMESTAMP, INTERVAL 30 MINUTE))
                    END,
                    CAST(TRIM(BOTH '_' FROM REGEXP_SUBSTR(READING, '_[0-9]+_')) AS UNSIGNED),
                    READING
                ORDER BY TIMESTAMP DESC
            ) AS rn

        FROM history
        WHERE DEVICE = 'DWD_Forecast'
          AND READING REGEXP 'fc[01]_([6-9]|1[0-9]|2[0-1])_.*'
          AND (
            (p_step='full' AND (
                  (TIMESTAMP > DATE_ADD(p_date, INTERVAL -30 DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(365-30) DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(2*365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(2*365-30) DAY))
            ))
            OR (p_step='update' AND TIMESTAMP BETWEEN @v_start AND @v_end)
          )
    ) t
    WHERE rn = 1
),

forecast AS (
    SELECT
        d, h,

        MAX(CASE WHEN READING LIKE '%Rad1h' THEN VALUE END) AS Rad1h,
        MAX(CASE WHEN READING LIKE '%TTT'   THEN VALUE END) AS TTT,
        MAX(CASE WHEN READING LIKE '%DD'    THEN VALUE END) AS DD,
        MAX(CASE WHEN READING LIKE '%VV'    THEN VALUE END) AS VV,
        MAX(CASE WHEN READING LIKE '%N'     THEN VALUE END) AS N,
        MAX(CASE WHEN READING LIKE '%Neff'  THEN VALUE END) AS Neff,
        MAX(CASE WHEN READING LIKE '%R101'  THEN VALUE END) AS R101,
        MAX(CASE WHEN READING LIKE '%RRS1c' THEN VALUE END) AS RRS1c,
        MAX(CASE WHEN READING LIKE '%SunD1' THEN VALUE END) AS SunD1

    FROM forecast_latest
    GROUP BY d, h
),

astro_latest AS (
SELECT *
    FROM (
        SELECT
            CASE
                WHEN READING LIKE 'fc1_%'
                    -- Runden auf die volle Stunde und dann 1 Tag addieren
                    THEN DATE(DATE_ADD(TIMESTAMP, INTERVAL 1470 MINUTE))  -- (24 * 60) + 30 = 1470
                ELSE DATE(TIMESTAMP)
            END AS d,

            CASE
                WHEN READING REGEXP 'fc[01]_([6-9]|1[0-9]|2[0-1])_Sun.*'
                    THEN CAST(TRIM(BOTH '_' FROM REGEXP_SUBSTR(READING, '_[0-9]+_')) AS UNSIGNED)
                ELSE HOUR(DATE_ADD(TIMESTAMP, INTERVAL 30 MINUTE))
            END AS h,

            CASE
                WHEN READING LIKE 'fc%_SunAz'
                    THEN 'SunAz'
                WHEN READING LIKE 'fc%_SunAlt'
                    THEN 'SunAlt'
                ELSE READING
            END AS READING,
            VALUE,
            TIMESTAMP,

            ROW_NUMBER() OVER (
                PARTITION BY
                    CASE
                        WHEN READING LIKE 'fc1_%'
                            -- Runden auf die volle Stunde und dann 1 Tag addieren
                            THEN DATE(DATE_ADD(TIMESTAMP, INTERVAL 1470 MINUTE))  -- (24 * 60) + 30 = 1470
                        ELSE DATE(DATE_ADD(TIMESTAMP, INTERVAL 30 MINUTE))
                    END,
                    CASE
                        WHEN READING REGEXP 'fc[01]_([6-9]|1[0-9]|2[0-1])_Sun.*'
                            THEN CAST(TRIM(BOTH '_' FROM REGEXP_SUBSTR(READING, '_[0-9]+_')) AS UNSIGNED)
                        ELSE HOUR(DATE_ADD(TIMESTAMP, INTERVAL 30 MINUTE))
                    END,
                    CASE
                        WHEN READING LIKE 'fc%_SunAz'
                            THEN 'SunAz'
                        WHEN READING LIKE 'fc%_SunAlt'
                            THEN 'SunAlt'
                        ELSE READING
                    END
                ORDER BY TIMESTAMP DESC
            ) AS rn

        FROM history
        WHERE DEVICE = 'Astro'
          AND (
                READING IN ('SunAz','SunAlt')
                AND HOUR(TIMESTAMP) >= 6 AND HOUR(TIMESTAMP) <= 21
                OR READING REGEXP 'fc[01]_([6-9]|1[0-9]|2[0-1])_Sun.*'
          )
          AND (
            (p_step='full' AND (
                  (TIMESTAMP > DATE_ADD(p_date, INTERVAL -30 DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(365-30) DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(2*365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(2*365-30) DAY))
            ))
            OR (p_step='update' AND TIMESTAMP BETWEEN @v_start AND @v_end)
          )
     ) t
    WHERE rn = 1
),

astro AS (
    SELECT
        d, h,
        MAX(CASE WHEN READING = 'SunAz'  THEN VALUE END) AS SunAz,
        MAX(CASE WHEN READING = 'SunAlt' THEN VALUE END) AS SunAlt

    FROM astro_latest
    GROUP BY d, h
),

-- =========================================================
-- 3. Stundenraster nur für vorhandene Forecast-Stunden
-- =========================================================

hour_grid AS (
    SELECT
        d, h,
        TIMESTAMP(DATE_ADD(CONCAT(d,' ',LPAD(h,2,'0'),':00:00'), INTERVAL 0 HOUR)) AS ts

    FROM forecast
    WHERE h BETWEEN 6 AND 21
),

-- =========================================================
-- 4. Energie + Yield + Batterie wie bisher
-- =========================================================

energy_base AS (
    SELECT TIMESTAMP,
           DATE_FORMAT(TIMESTAMP,'%Y-%m-%d %H:00:00') AS ts_hour,
           READING, VALUE
    FROM history
    WHERE DEVICE = 'WR_1'
      AND READING IN (
          'SW_Yield_Daily',
          'Battery_Total_DC_ChargeEnergy_DCsideToBattery',
          'Battery_Total_DC_DischargeEnergy_DCsideFromBattery'
      )
      AND (
            (p_step='full' AND (
                  (TIMESTAMP > DATE_ADD(p_date, INTERVAL -30 DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(365-30) DAY))
               OR (TIMESTAMP > DATE_ADD(p_date, INTERVAL -(2*365+30) DAY)
                   AND TIMESTAMP < DATE_ADD(p_date, INTERVAL -(2*365-30) DAY))
            ))
         OR (p_step='update' AND TIMESTAMP BETWEEN @v_start AND @v_end)
      )
),

wr AS (
    SELECT ts_hour,
           VALUE - LAG(VALUE) OVER (PARTITION BY READING ORDER BY TIMESTAMP) AS diff,
           TIMESTAMPDIFF(HOUR, LAG(TIMESTAMP) OVER (PARTITION BY READING ORDER BY TIMESTAMP), TIMESTAMP) AS delta
    FROM energy_base
    WHERE READING='SW_Yield_Daily'
),

wr_clean AS (
    SELECT ts_hour, IF(delta>6 OR diff<0,0,diff) AS yield
    FROM wr
),

dc_to AS (
    SELECT ts_hour,
           VALUE - LAG(VALUE) OVER (PARTITION BY READING ORDER BY TIMESTAMP) AS diff,
           TIMESTAMPDIFF(HOUR, LAG(TIMESTAMP) OVER (PARTITION BY READING ORDER BY TIMESTAMP), TIMESTAMP) AS delta
    FROM energy_base
    WHERE READING='Battery_Total_DC_ChargeEnergy_DCsideToBattery'
),

dc_to_clean AS (
    SELECT ts_hour, IF(delta>6 OR diff<0,0,diff) AS dc_to
    FROM dc_to
),

dc_from AS (
    SELECT ts_hour,
           VALUE - LAG(VALUE) OVER (PARTITION BY READING ORDER BY TIMESTAMP) AS diff,
           TIMESTAMPDIFF(HOUR, LAG(TIMESTAMP) OVER (PARTITION BY READING ORDER BY TIMESTAMP), TIMESTAMP) AS delta
    FROM energy_base
    WHERE READING='Battery_Total_DC_DischargeEnergy_DCsideFromBattery'
),

dc_from_clean AS (
    SELECT ts_hour, IF(delta>6 OR diff<0,0,diff) AS dc_from
    FROM dc_from
),

yield_union AS (
    SELECT ts_hour, yield, 0 AS dc_to, 0 AS dc_from FROM wr_clean
    UNION ALL
    SELECT ts_hour, 0, dc_to, 0 FROM dc_to_clean
    UNION ALL
    SELECT ts_hour, 0, 0, dc_from FROM dc_from_clean
),

yield_final AS (
    SELECT
        ts_hour,

        CASE
            WHEN ts_hour >= DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00')
                THEN NULL
            ELSE ROUND(SUM(yield) + (SUM(dc_to)-SUM(dc_from))*0.85, 0)
        END AS yield_total

    FROM yield_union
    GROUP BY ts_hour
),

-- =========================================================
-- 5. Final Join
-- =========================================================

final_data AS (
    SELECT
        g.ts AS TIMESTAMP,
        YEAR(g.ts) AS year,
        MONTH(g.ts) AS month,
        DAY(g.ts) AS day,
        g.h AS hour,
        f.TTT, f.DD, f.VV, f.N, f.Neff, f.R101, f.RRS1c, f.SunD1, f.Rad1h,
        a.SunAz, a.SunAlt,
        IF(y.yield_total<10 OR y.yield_total IS NULL,0,y.yield_total) AS yield
    FROM hour_grid g
    LEFT JOIN forecast f ON f.d=g.d AND f.h=g.h
    LEFT JOIN astro a    ON a.d=g.d AND a.h=g.h
    LEFT JOIN yield_final y ON y.ts_hour = DATE_FORMAT(g.ts,'%Y-%m-%d %H:00:00')
)

-- =========================================================
-- 6. INSERT
-- =========================================================

SELECT * FROM final_data
ON DUPLICATE KEY UPDATE
    TTT=VALUES(TTT), DD=VALUES(DD), VV=VALUES(VV), N=VALUES(N), Neff=VALUES(Neff),
    R101=VALUES(R101), RRS1c=VALUES(RRS1c), SunD1=VALUES(SunD1), Rad1h=VALUES(Rad1h),
    SunAz=VALUES(SunAz), SunAlt=VALUES(SunAlt), yield=VALUES(yield);

-- =========================================================
-- 7. yield_max
-- =========================================================

UPDATE dwdfull d
JOIN (
    SELECT
      (hour + 23) % 24 AS hour,   -- entspricht hour - 1 mit Wrap,
      MAX(yield) AS max_y
    FROM dwdfull
    WHERE TIMESTAMP > DATE_SUB(p_date, INTERVAL 30 DAY)
    GROUP BY hour
) x USING(hour)
SET d.yield_max = x.max_y
WHERE d.TIMESTAMP >= p_date;

-- =========================================================
-- 8. Ausgabe
-- =========================================================

IF p_display='show' THEN
    SELECT * FROM dwdfull ORDER BY TIMESTAMP DESC LIMIT 1000;
ELSE
    SELECT NOW();
END IF;


END //

DELIMITER ;

Jetzt aber viel Erfolg beim Testen
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Moin,
ich denke ja schon länger über NILM, bzw einer deterministischen Lastzerlegung nach, also der Erkennung von Verbrauchern aus den Verbrauchsdaten ohne zusätzliche Zähler dazwischen.


Grundprinzip von Non-Intrusive Load Monitoring (NILM) bedeutet:

  Aus einer Gesamtlastkurve (z.B. Hausverbrauch) werden einzelne Geräte erkannt anhand von:
    - typischen Leistungsstufen
    - Ein/Aus-Sprüngen
    - Laufzeitmustern

Realistische Erwartungen

  Gut erkennbar:
    - Wasserkocher
    - Herd
    - Waschmaschine (teilweise, wegen Heizphasen und anschließend recht geringem Verbrauch)
    - Wärmepumpe
    - Wallbox (teilweise, wegen NurPV Laden im Sommer)
    - Pool

  Schwierig:
    - Standby-Verbraucher
    - Geräte mit variabler Leistung
    - Geräte mit geringer Leistung
    - Kühlschrank mit Linearkompressor
    - mehrere (gleiche) Geräte gleichzeitig



Der erste Schritt wäre für mich eine gute Datenbasis mit Korrekturen von nachvollziehbaren Problemen in der Konsistenz der Daten.
Dazu habe ich mal ein MySQL Statement geschrieben, das bereits einiges berechnet. Ich habe mich für MySQL entschieden,
um im nachfolgenden Programm Code die Erkennung zu vereinfachen.

  - pv, bat, grid    Als gerundete Absolutwerte
  - p_total          Kostal gibt da ja separierte Werte aus und in meinem Fall auch noch für den Schwarm (SW_*) berechnete
  - base_load        Ein berechneter Wert, der um Starkverbraucher bereinigt wurde und Tag und Nacht berücksichtigt
  - p_clean          Den um base_load bereinigten Verbrauchswert
  - delta_p          Anstieg oder Abfall von p_clean
  - is_stable        0/1 wenn der Zustand zum vorherigen nicht stabiel geblieben ist
  - jump             an/aus wäre die Erkennung, ob etwas eingeschaltet wurde,
                     oder auch eine Art Regelung der Leistung z.B. bei der WP oder einem Ofen
  - stable_count     Zähler wenn sich die Leistung nicht großartig verändert, also ein gleichmäßiger Verbrauch über längere Zeit
WITH power_data AS (
  SELECT
    DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:00') AS ts_min,
    ABS(ROUND(COALESCE(AVG(CASE WHEN READING='SW_Home_own_consumption_from_PV'      THEN VALUE END), 0), 0)) AS pv,
    ABS(ROUND(COALESCE(AVG(CASE WHEN READING='SW_Home_own_consumption_from_Battery' THEN VALUE END), 0), 0)) AS bat,
    ABS(ROUND(COALESCE(AVG(CASE WHEN READING='SW_Home_own_consumption_from_grid'    THEN VALUE END), 0), 0)) AS grid
  FROM history
  WHERE DEVICE='WR_1'
    AND READING IN ('SW_Home_own_consumption_from_PV', 'SW_Home_own_consumption_from_Battery', 'SW_Home_own_consumption_from_grid')
    AND TIMESTAMP > NOW() - INTERVAL 24 HOUR
  GROUP BY ts_min
),

power_calc AS (
  SELECT
    *,
    ROUND((pv + bat + grid),0) AS p_total_raw,
    LAG(pv + bat + grid) OVER (ORDER BY ts_min) AS p_total_prev
  FROM power_data
),

-- ... (Nacht/Tag Median-Berechnung bleibt gleich) ...
night_ranked AS (SELECT p_total_raw, ROW_NUMBER() OVER (ORDER BY p_total_raw) AS rn, COUNT(*) OVER () AS cnt FROM power_calc WHERE (HOUR(ts_min) >= 22 OR HOUR(ts_min) < 6) AND p_total_raw <= 600 AND p_total_raw > 50),
base_night AS (SELECT AVG(p_total_raw) AS base_night FROM night_ranked WHERE rn IN (FLOOR((cnt + 1)/2), CEIL((cnt + 1)/2))),
day_ranked AS (SELECT p_total_raw, ROW_NUMBER() OVER (ORDER BY p_total_raw) AS rn, COUNT(*) OVER () AS cnt FROM power_calc WHERE HOUR(ts_min) BETWEEN 7 AND 20 AND p_total_raw <= 600 AND p_total_raw > 50),
base_day AS (SELECT AVG(p_total_raw) AS base_day FROM day_ranked WHERE rn = GREATEST(1, FLOOR(cnt * 0.2))),

final_base AS (
  SELECT p.*, ROUND(CASE WHEN HOUR(p.ts_min) >= 22 OR HOUR(p.ts_min) < 6 THEN COALESCE(bn.base_night, 0) ELSE COALESCE(bd.base_day, bn.base_night, 0) END, 0) AS base_load
  FROM power_calc p CROSS JOIN base_night bn LEFT JOIN base_day bd ON 1=1
),

-- Ebene 1: Korrigiertes p_total
p_total_fixed AS (
  SELECT ts_min, pv, bat, grid, base_load,
    CASE WHEN p_total_raw >= base_load THEN p_total_raw WHEN p_total_prev >= base_load THEN p_total_prev ELSE base_load END AS p_total
  FROM final_base
),

-- Ebene 2a: delta_p, is_stable und JUMP_DIRECTION berechnen
p_is_stable_base AS (
  SELECT *,
    GREATEST(p_total - base_load, 0) AS p_clean,
    p_total - LAG(p_total) OVER (ORDER BY ts_min) AS delta_p,
    CASE WHEN ABS(p_total - LAG(p_total) OVER (ORDER BY ts_min)) < 200 THEN 1 ELSE 0 END AS is_stable,
    -- jump_direction: 1 bei Sprung > 200, 0 bei Sprung < -200, sonst NULL
    CASE
      WHEN (p_total - LAG(p_total) OVER (ORDER BY ts_min)) >= 200 THEN 'an'
      WHEN (p_total - LAG(p_total) OVER (ORDER BY ts_min)) <= -200 THEN 'aus'
      ELSE NULL
    END AS jump_direction
  FROM p_total_fixed
),

-- Ebene 2b: group_id für den Streak-Counter (jeder Sprung erhöht die ID)
p_delta_groups AS (
  SELECT *,
    SUM(CASE WHEN is_stable = 0 THEN 1 ELSE 0 END) OVER (ORDER BY ts_min) AS group_id
  FROM p_is_stable_base
)

-- Finale Ausgabe
SELECT
  ts_min, pv, bat, grid, p_total, base_load, p_clean, delta_p, is_stable, jump_direction,
  -- stable_count: Startet bei 1 für den ersten stabilen Wert nach einem Sprung
  CASE
    WHEN is_stable = 0 THEN 0
    ELSE ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY ts_min) - 1
  END AS stable_count
FROM p_delta_groups
ORDER BY ts_min;

Über Rückmeldungen, die durch Eure Datenbasis erkennbar werden würde ich mich sehr freuen.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

Zitat von: ch.eick am 28 März 2026, 17:12:44Über Rückmeldungen, die durch Eure Datenbasis erkennbar werden würde ich mich sehr freuen.

VG   Christian

Hier das Resultat der Abfrage meiner Datenbasis. Wie kann ich das nun interpretieren?

"ts_min" "pv" "bat" "grid" "p_total" "base_load" "p_clean" "delta_p"
"2026-03-27 17:35:00" "362" "5165" "785" "6312" "268" "6044" \N
"2026-03-27 17:40:00" "334" "3817" "0" "4151" "268" "3883" "-2161"
"2026-03-27 17:45:00" "332" "5154" "85" "5571" "268" "5303" "1420"
"2026-03-27 17:50:00" "357" "2621" "1" "2979" "268" "2711" "-2592"
"2026-03-27 17:55:00" "384" "2268" "0" "2652" "268" "2384" "-327"
"2026-03-27 18:00:00" "376" "2175" "0" "2551" "268" "2283" "-101"
"2026-03-27 18:05:00" "285" "966" "33" "1284" "268" "1016" "-1267"
"2026-03-27 18:10:00" "174" "1268" "1" "1443" "268" "1175" "159"
"2026-03-27 18:15:00" "120" "1171" "0" "1291" "268" "1023" "-152"
"2026-03-27 18:20:00" "99" "1251" "0" "1350" "268" "1082" "59"
"2026-03-27 18:25:00" "85" "1367" "0" "1452" "268" "1184" "102"
"2026-03-27 18:30:00" "64" "1245" "0" "1309" "268" "1041" "-143"
"2026-03-27 18:35:00" "58" "1259" "1" "1318" "268" "1050" "9"
"2026-03-27 18:40:00" "47" "1293" "4" "1344" "268" "1076" "26"
"2026-03-27 18:45:00" "47" "1304" "5" "1356" "268" "1088" "12"
"2026-03-27 18:50:00" "31" "1431" "5" "1467" "268" "1199" "111"
"2026-03-27 18:55:00" "23" "1418" "4" "1445" "268" "1177" "-22"
"2026-03-27 19:00:00" "15" "1395" "0" "1410" "268" "1142" "-35"
"2026-03-27 19:05:00" "11" "1403" "0" "1414" "268" "1146" "4"
"2026-03-27 19:10:00" "12" "1430" "1" "1443" "268" "1175" "29"
"2026-03-27 19:15:00" "8" "1458" "1" "1467" "268" "1199" "24"
"2026-03-27 19:20:00" "2" "1449" "1" "1452" "268" "1184" "-15"
"2026-03-27 19:25:00" "7" "2959" "3" "2969" "268" "2701" "1517"
"2026-03-27 19:30:00" "2" "1484" "4" "1490" "268" "1222" "-1479"
"2026-03-27 19:35:00" "0" "1432" "2" "1434" "268" "1166" "-56"
"2026-03-27 19:40:00" "0" "1411" "0" "1411" "268" "1143" "-23"
"2026-03-27 19:45:00" "1" "1383" "2" "1386" "268" "1118" "-25"
"2026-03-27 19:50:00" "13" "1373" "5" "1391" "268" "1123" "5"
"2026-03-27 19:55:00" "4" "1407" "2" "1413" "268" "1145" "22"
"2026-03-27 20:00:00" "4" "1470" "4" "1478" "268" "1210" "65"
"2026-03-27 20:05:00" "3" "1546" "0" "1549" "268" "1281" "71"
"2026-03-27 20:10:00" "0" "1581" "0" "1581" "268" "1313" "32"
"2026-03-27 20:15:00" "0" "1605" "0" "1605" "268" "1337" "24"
"2026-03-27 20:20:00" "2" "1547" "2" "1551" "268" "1283" "-54"
"2026-03-27 20:25:00" "0" "0" "1593" "1593" "268" "1325" "42"
"2026-03-27 20:30:00" "0" "0" "1612" "1612" "268" "1344" "19"
"2026-03-27 20:35:00" "0" "0" "1580" "1580" "268" "1312" "-32"
"2026-03-27 20:40:00" "0" "0" "1528" "1528" "268" "1260" "-52"
"2026-03-27 20:45:00" "0" "0" "1545" "1545" "268" "1277" "17"
"2026-03-27 20:50:00" "0" "0" "1540" "1540" "268" "1272" "-5"
"2026-03-27 20:55:00" "0" "0" "1574" "1574" "268" "1306" "34"
"2026-03-27 21:00:00" "0" "0" "1483" "1483" "268" "1215" "-91"
"2026-03-27 21:05:00" "0" "0" "1481" "1481" "268" "1213" "-2"
"2026-03-27 21:10:00" "0" "0" "1462" "1462" "268" "1194" "-19"
"2026-03-27 21:15:00" "0" "0" "1531" "1531" "268" "1263" "69"
"2026-03-27 21:20:00" "0" "0" "1516" "1516" "268" "1248" "-15"
"2026-03-27 21:25:00" "0" "0" "762" "762" "268" "494" "-754"
"2026-03-27 21:30:00" "0" "0" "2616" "2616" "268" "2348" "1854"
"2026-03-27 21:35:00" "0" "0" "1592" "1592" "268" "1324" "-1024"
"2026-03-27 21:40:00" "0" "0" "1542" "1542" "268" "1274" "-50"
"2026-03-27 21:45:00" "0" "0" "1661" "1661" "268" "1393" "119"
"2026-03-27 21:50:00" "0" "0" "1563" "1563" "268" "1295" "-98"
"2026-03-27 21:55:00" "0" "0" "1592" "1592" "268" "1324" "29"
"2026-03-27 22:00:00" "0" "0" "1597" "1597" "1592" "5" "5"
"2026-03-27 22:05:00" "0" "0" "1565" "1597" "1592" "5" "0"
"2026-03-27 22:10:00" "0" "0" "1627" "1627" "1592" "35" "30"
"2026-03-27 22:15:00" "0" "0" "1648" "1648" "1592" "56" "21"
"2026-03-27 22:20:00" "0" "0" "1624" "1624" "1592" "32" "-24"
"2026-03-27 22:25:00" "0" "0" "3013" "3013" "1592" "1421" "1389"
"2026-03-27 22:30:00" "0" "0" "1564" "3013" "1592" "1421" "0"
"2026-03-27 22:35:00" "0" "0" "1587" "1592" "1592" "0" "-1421"
"2026-03-27 22:40:00" "0" "0" "1735" "1735" "1592" "143" "143"
"2026-03-27 22:45:00" "0" "0" "1714" "1714" "1592" "122" "-21"
"2026-03-27 22:50:00" "0" "0" "1675" "1675" "1592" "83" "-39"
"2026-03-27 22:55:00" "0" "0" "1711" "1711" "1592" "119" "36"
"2026-03-27 23:00:00" "0" "0" "1765" "1765" "1592" "173" "54"
"2026-03-27 23:05:00" "0" "0" "1714" "1714" "1592" "122" "-51"
"2026-03-27 23:10:00" "0" "0" "1479" "1714" "1592" "122" "0"
"2026-03-27 23:15:00" "0" "0" "1392" "1592" "1592" "0" "-122"
"2026-03-27 23:20:00" "0" "0" "1351" "1592" "1592" "0" "0"
"2026-03-27 23:25:00" "0" "0" "1341" "1592" "1592" "0" "0"
"2026-03-27 23:30:00" "0" "0" "317" "1592" "1592" "0" "0"
"2026-03-27 23:35:00" "0" "0" "2262" "2262" "1592" "670" "670"
"2026-03-27 23:40:00" "0" "0" "1513" "2262" "1592" "670" "0"
"2026-03-27 23:45:00" "0" "0" "1538" "1592" "1592" "0" "-670"
"2026-03-27 23:50:00" "0" "0" "1488" "1592" "1592" "0" "0"
"2026-03-27 23:55:00" "0" "0" "1517" "1592" "1592" "0" "0"
"2026-03-28 00:00:00" "0" "0" "1520" "1592" "1592" "0" "0"
"2026-03-28 00:05:00" "0" "0" "1535" "1592" "1592" "0" "0"
"2026-03-28 00:10:00" "0" "0" "1370" "1592" "1592" "0" "0"
"2026-03-28 00:15:00" "0" "0" "1516" "1592" "1592" "0" "0"
"2026-03-28 00:20:00" "0" "0" "1478" "1592" "1592" "0" "0"
"2026-03-28 00:25:00" "0" "0" "1494" "1592" "1592" "0" "0"
"2026-03-28 00:30:00" "0" "0" "1451" "1592" "1592" "0" "0"
"2026-03-28 00:35:00" "0" "0" "1498" "1592" "1592" "0" "0"
"2026-03-28 00:40:00" "0" "0" "1433" "1592" "1592" "0" "0"
"2026-03-28 00:45:00" "0" "0" "1426" "1592" "1592" "0" "0"
"2026-03-28 00:50:00" "0" "0" "1432" "1592" "1592" "0" "0"
"2026-03-28 00:55:00" "0" "0" "2032" "2032" "1592" "440" "440"
"2026-03-28 01:00:00" "0" "0" "1522" "2032" "1592" "440" "0"
"2026-03-28 01:05:00" "0" "0" "1494" "1592" "1592" "0" "-440"
"2026-03-28 01:10:00" "0" "0" "1484" "1592" "1592" "0" "0"
"2026-03-28 01:15:00" "0" "0" "1462" "1592" "1592" "0" "0"
"2026-03-28 01:20:00" "0" "0" "1446" "1592" "1592" "0" "0"
"2026-03-28 01:25:00" "0" "0" "1399" "1592" "1592" "0" "0"
"2026-03-28 01:30:00" "0" "0" "1469" "1592" "1592" "0" "0"
"2026-03-28 01:35:00" "0" "0" "2011" "2011" "1592" "419" "419"
"2026-03-28 01:40:00" "0" "0" "1997" "1997" "1592" "405" "-14"
"2026-03-28 01:45:00" "0" "0" "1555" "1997" "1592" "405" "0"
"2026-03-28 01:50:00" "0" "0" "1654" "1654" "1592" "62" "-343"
"2026-03-28 01:55:00" "0" "0" "1537" "1654" "1592" "62" "0"
"2026-03-28 02:00:00" "0" "0" "1502" "1592" "1592" "0" "-62"
"2026-03-28 02:05:00" "0" "0" "1516" "1592" "1592" "0" "0"
"2026-03-28 02:10:00" "0" "0" "1440" "1592" "1592" "0" "0"
"2026-03-28 02:15:00" "0" "0" "1523" "1592" "1592" "0" "0"
"2026-03-28 02:20:00" "0" "0" "1574" "1592" "1592" "0" "0"
"2026-03-28 02:25:00" "0" "0" "1577" "1592" "1592" "0" "0"
"2026-03-28 02:30:00" "0" "0" "1502" "1592" "1592" "0" "0"
"2026-03-28 02:35:00" "0" "0" "1413" "1592" "1592" "0" "0"
"2026-03-28 02:40:00" "0" "0" "1376" "1592" "1592" "0" "0"
"2026-03-28 02:45:00" "0" "0" "1370" "1592" "1592" "0" "0"
"2026-03-28 02:50:00" "0" "0" "1377" "1592" "1592" "0" "0"
"2026-03-28 02:55:00" "0" "0" "1476" "1592" "1592" "0" "0"
"2026-03-28 03:00:00" "0" "0" "1522" "1592" "1592" "0" "0"
"2026-03-28 03:05:00" "0" "0" "1531" "1592" "1592" "0" "0"
"2026-03-28 03:10:00" "0" "0" "1546" "1592" "1592" "0" "0"
"2026-03-28 03:15:00" "0" "0" "1441" "1592" "1592" "0" "0"
"2026-03-28 03:20:00" "0" "0" "1462" "1592" "1592" "0" "0"
"2026-03-28 03:25:00" "0" "0" "1466" "1592" "1592" "0" "0"
"2026-03-28 03:30:00" "0" "0" "1483" "1592" "1592" "0" "0"
"2026-03-28 03:35:00" "0" "0" "1945" "1945" "1592" "353" "353"
"2026-03-28 03:40:00" "0" "0" "2703" "2703" "1592" "1111" "758"
"2026-03-28 03:45:00" "0" "0" "2027" "2027" "1592" "435" "-676"
"2026-03-28 03:50:00" "0" "0" "1827" "1827" "1592" "235" "-200"
"2026-03-28 03:55:00" "0" "0" "1756" "1756" "1592" "164" "-71"
"2026-03-28 04:00:00" "0" "0" "1605" "1605" "1592" "13" "-151"
"2026-03-28 04:05:00" "0" "0" "1642" "1642" "1592" "50" "37"
"2026-03-28 04:10:00" "0" "0" "1502" "1642" "1592" "50" "0"
"2026-03-28 04:15:00" "0" "0" "1527" "1592" "1592" "0" "-50"
"2026-03-28 04:20:00" "0" "0" "1532" "1592" "1592" "0" "0"
"2026-03-28 04:25:00" "0" "0" "1508" "1592" "1592" "0" "0"
"2026-03-28 04:30:00" "0" "0" "1557" "1592" "1592" "0" "0"
"2026-03-28 04:35:00" "0" "0" "1581" "1592" "1592" "0" "0"
"2026-03-28 04:40:00" "0" "0" "1445" "1592" "1592" "0" "0"
"2026-03-28 04:45:00" "0" "0" "1455" "1592" "1592" "0" "0"
"2026-03-28 04:50:00" "0" "0" "1450" "1592" "1592" "0" "0"
"2026-03-28 04:55:00" "0" "0" "1481" "1592" "1592" "0" "0"
"2026-03-28 05:00:00" "0" "0" "1467" "1592" "1592" "0" "0"
"2026-03-28 05:05:00" "0" "0" "1469" "1592" "1592" "0" "0"
"2026-03-28 05:10:00" "0" "0" "1540" "1592" "1592" "0" "0"
"2026-03-28 05:15:00" "0" "0" "1554" "1592" "1592" "0" "0"
"2026-03-28 05:20:00" "0" "0" "1543" "1592" "1592" "0" "0"
"2026-03-28 05:25:00" "0" "0" "1466" "1592" "1592" "0" "0"
"2026-03-28 05:30:00" "0" "0" "1482" "1592" "1592" "0" "0"
"2026-03-28 05:35:00" "0" "0" "1503" "1592" "1592" "0" "0"
"2026-03-28 05:40:00" "0" "0" "860" "1592" "1592" "0" "0"
"2026-03-28 05:45:00" "0" "0" "2701" "2701" "1592" "1109" "1109"
"2026-03-28 05:50:00" "0" "0" "1888" "1888" "1592" "296" "-813"
"2026-03-28 05:55:00" "0" "0" "1867" "1867" "1592" "275" "-21"
"2026-03-28 06:00:00" "0" "0" "1747" "1747" "268" "1479" "-120"
"2026-03-28 06:05:00" "0" "0" "1655" "1655" "268" "1387" "-92"
"2026-03-28 06:10:00" "0" "0" "1625" "1625" "268" "1357" "-30"
"2026-03-28 06:15:00" "17" "0" "1662" "1679" "268" "1411" "54"
"2026-03-28 06:20:00" "0" "0" "1650" "1650" "268" "1382" "-29"
"2026-03-28 06:25:00" "61" "0" "1493" "1554" "268" "1286" "-96"
"2026-03-28 06:30:00" "0" "0" "1640" "1640" "268" "1372" "86"
"2026-03-28 06:35:00" "0" "0" "1629" "1629" "268" "1361" "-11"
"2026-03-28 06:40:00" "0" "0" "1584" "1584" "268" "1316" "-45"
"2026-03-28 06:45:00" "235" "6" "1313" "1554" "268" "1286" "-30"
"2026-03-28 06:50:00" "267" "6" "4254" "4527" "268" "4259" "2973"
"2026-03-28 06:55:00" "226" "0" "4259" "4485" "268" "4217" "-42"
"2026-03-28 07:00:00" "323" "6" "4064" "4393" "268" "4125" "-92"
"2026-03-28 07:05:00" "338" "6" "1173" "1517" "268" "1249" "-2876"
"2026-03-28 07:10:00" "351" "0" "1155" "1506" "268" "1238" "-11"
"2026-03-28 07:15:00" "375" "6" "1161" "1542" "268" "1274" "36"
"2026-03-28 07:20:00" "394" "6" "1175" "1575" "268" "1307" "33"
"2026-03-28 07:25:00" "391" "6" "1349" "1746" "268" "1478" "171"
"2026-03-28 07:30:00" "419" "6" "2665" "3090" "268" "2822" "1344"
"2026-03-28 07:35:00" "433" "0" "2754" "3187" "268" "2919" "97"
"2026-03-28 07:40:00" "453" "7" "2523" "2983" "268" "2715" "-204"
"2026-03-28 07:45:00" "472" "6" "609" "1087" "268" "819" "-1896"
"2026-03-28 07:50:00" "293" "0" "0" "293" "268" "25" "-794"
"2026-03-28 07:55:00" "604" "6" "2077" "2687" "268" "2419" "2394"
"2026-03-28 08:00:00" "1868" "0" "9" "1877" "268" "1609" "-810"
"2026-03-28 08:05:00" "1505" "0" "35" "1540" "268" "1272" "-337"
"2026-03-28 08:10:00" "1518" "0" "2" "1520" "268" "1252" "-20"
"2026-03-28 08:15:00" "1354" "0" "0" "1354" "268" "1086" "-166"
"2026-03-28 08:20:00" "1256" "0" "7" "1263" "268" "995" "-91"
"2026-03-28 08:25:00" "2637" "730" "19" "3386" "268" "3118" "2123"
"2026-03-28 08:30:00" "1337" "0" "0" "1337" "268" "1069" "-2049"
"2026-03-28 08:35:00" "1410" "0" "3" "1413" "268" "1145" "76"
"2026-03-28 08:40:00" "2954" "334" "0" "3288" "268" "3020" "1875"
"2026-03-28 08:45:00" "3063" "228" "0" "3291" "268" "3023" "3"
"2026-03-28 08:50:00" "3106" "245" "8" "3359" "268" "3091" "68"
"2026-03-28 08:55:00" "3043" "314" "10" "3367" "268" "3099" "8"
"2026-03-28 09:00:00" "1404" "0" "3" "1407" "268" "1139" "-1960"
"2026-03-28 09:05:00" "1371" "0" "0" "1371" "268" "1103" "-36"
"2026-03-28 09:10:00" "1516" "0" "0" "1516" "268" "1248" "145"
"2026-03-28 09:15:00" "1459" "0" "4" "1463" "268" "1195" "-53"
"2026-03-28 09:20:00" "1404" "0" "1" "1405" "268" "1137" "-58"
"2026-03-28 09:25:00" "1425" "0" "0" "1425" "268" "1157" "20"
"2026-03-28 09:30:00" "1406" "0" "0" "1406" "268" "1138" "-19"
"2026-03-28 09:35:00" "1399" "0" "0" "1399" "268" "1131" "-7"
"2026-03-28 09:40:00" "1743" "0" "1" "1744" "268" "1476" "345"
"2026-03-28 09:45:00" "1178" "0" "0" "1178" "268" "910" "-566"
"2026-03-28 09:50:00" "339" "0" "25" "364" "268" "96" "-814"
"2026-03-28 09:55:00" "268" "0" "0" "268" "268" "0" "-96"
"2026-03-28 10:00:00" "280" "0" "0" "280" "268" "12" "12"
"2026-03-28 10:05:00" "723" "0" "60" "783" "268" "515" "503"
"2026-03-28 10:10:00" "1406" "0" "0" "1406" "268" "1138" "623"
"2026-03-28 10:15:00" "1320" "0" "13" "1333" "268" "1065" "-73"
"2026-03-28 10:20:00" "1462" "0" "2" "1464" "268" "1196" "131"
"2026-03-28 10:25:00" "1967" "0" "4" "1971" "268" "1703" "507"
"2026-03-28 10:30:00" "3969" "0" "0" "3969" "268" "3701" "1998"
"2026-03-28 10:35:00" "3408" "0" "0" "3408" "268" "3140" "-561"
"2026-03-28 10:40:00" "3373" "0" "0" "3373" "268" "3105" "-35"
"2026-03-28 10:45:00" "3388" "0" "0" "3388" "268" "3120" "15"
"2026-03-28 10:50:00" "900" "0" "2" "902" "268" "634" "-2486"
"2026-03-28 10:55:00" "2947" "0" "5" "2952" "268" "2684" "2050"
"2026-03-28 11:00:00" "400" "0" "43" "443" "268" "175" "-2509"
"2026-03-28 11:05:00" "456" "0" "0" "456" "268" "188" "13"
"2026-03-28 11:10:00" "3052" "0" "0" "3052" "268" "2784" "2596"
"2026-03-28 11:15:00" "3870" "0" "403" "4273" "268" "4005" "1221"
"2026-03-28 11:20:00" "3230" "0" "172" "3402" "268" "3134" "-871"
"2026-03-28 11:25:00" "1322" "0" "0" "1322" "268" "1054" "-2080"
"2026-03-28 11:30:00" "1407" "0" "0" "1407" "268" "1139" "85"
"2026-03-28 11:35:00" "2833" "0" "51" "2884" "268" "2616" "1477"
"2026-03-28 11:40:00" "2810" "0" "1296" "4106" "268" "3838" "1222"
"2026-03-28 11:45:00" "359" "0" "0" "359" "268" "91" "-3747"
"2026-03-28 11:50:00" "412" "0" "19" "431" "268" "163" "72"
"2026-03-28 11:55:00" "2053" "0" "3" "2056" "268" "1788" "1625"
"2026-03-28 12:00:00" "2464" "0" "1" "2465" "268" "2197" "409"
"2026-03-28 12:05:00" "880" "0" "3" "883" "268" "615" "-1582"
"2026-03-28 12:10:00" "4149" "0" "91" "4240" "268" "3972" "3357"
"2026-03-28 12:15:00" "1246" "0" "0" "1246" "268" "978" "-2994"
"2026-03-28 12:20:00" "1303" "0" "6" "1309" "268" "1041" "63"
"2026-03-28 12:25:00" "1344" "0" "20" "1364" "268" "1096" "55"
"2026-03-28 12:30:00" "1983" "0" "6" "1989" "268" "1721" "625"
"2026-03-28 12:35:00" "2969" "0" "0" "2969" "268" "2701" "980"
"2026-03-28 12:40:00" "2470" "0" "0" "2470" "268" "2202" "-499"
"2026-03-28 12:45:00" "2479" "3" "0" "2482" "268" "2214" "12"
"2026-03-28 12:50:00" "2507" "4" "0" "2511" "268" "2243" "29"
"2026-03-28 12:55:00" "2618" "4" "0" "2622" "268" "2354" "111"
"2026-03-28 13:00:00" "4605" "1405" "91" "6101" "268" "5833" "3479"
"2026-03-28 13:05:00" "4355" "2710" "24" "7089" "268" "6821" "988"
"2026-03-28 13:10:00" "2944" "1126" "59" "4129" "268" "3861" "-2960"
"2026-03-28 13:15:00" "3369" "5" "0" "3374" "268" "3106" "-755"
"2026-03-28 13:20:00" "3955" "972" "0" "4927" "268" "4659" "1553"
"2026-03-28 13:25:00" "4528" "836" "0" "5364" "268" "5096" "437"
"2026-03-28 13:30:00" "2617" "0" "11" "2628" "268" "2360" "-2736"
"2026-03-28 13:35:00" "370" "1" "0" "371" "268" "103" "-2257"
"2026-03-28 13:40:00" "923" "1" "0" "924" "268" "656" "553"
"2026-03-28 13:45:00" "955" "2" "0" "957" "268" "689" "33"
"2026-03-28 13:50:00" "3108" "5" "0" "3113" "268" "2845" "2156"
"2026-03-28 13:55:00" "2636" "5" "0" "2641" "268" "2373" "-472"
"2026-03-28 14:00:00" "2034" "3" "0" "2037" "268" "1769" "-604"
"2026-03-28 14:05:00" "3526" "497" "0" "4023" "268" "3755" "1986"
"2026-03-28 14:10:00" "1891" "4" "0" "1895" "268" "1627" "-2128"
"2026-03-28 14:15:00" "2770" "242" "0" "3012" "268" "2744" "1117"
"2026-03-28 14:20:00" "2005" "4" "0" "2009" "268" "1741" "-1003"
"2026-03-28 14:25:00" "3254" "955" "22" "4231" "268" "3963" "2222"
"2026-03-28 14:30:00" "2950" "1294" "0" "4244" "268" "3976" "13"
"2026-03-28 14:35:00" "2069" "0" "0" "2069" "268" "1801" "-2175"
"2026-03-28 14:40:00" "2585" "1611" "0" "4196" "268" "3928" "2127"
"2026-03-28 14:45:00" "2455" "1731" "6" "4192" "268" "3924" "-4"
"2026-03-28 14:50:00" "2018" "0" "0" "2018" "268" "1750" "-2174"
"2026-03-28 14:55:00" "2103" "0" "4" "2107" "268" "1839" "89"
"2026-03-28 15:00:00" "2421" "403" "2" "2826" "268" "2558" "719"
"2026-03-28 15:05:00" "2158" "626" "0" "2784" "268" "2516" "-42"
"2026-03-28 15:10:00" "2031" "828" "0" "2859" "268" "2591" "75"
"2026-03-28 15:15:00" "1870" "36" "3" "1909" "268" "1641" "-950"
"2026-03-28 15:20:00" "1719" "112" "0" "1831" "268" "1563" "-78"
"2026-03-28 15:25:00" "990" "0" "2" "992" "268" "724" "-839"
"2026-03-28 15:30:00" "1542" "388" "0" "1930" "268" "1662" "938"
"2026-03-28 15:35:00" "1115" "0" "0" "1115" "268" "847" "-815"
"2026-03-28 15:40:00" "1382" "0" "5" "1387" "268" "1119" "272"
"2026-03-28 15:45:00" "1358" "640" "3" "2001" "268" "1733" "614"
"2026-03-28 15:50:00" "1292" "644" "0" "1936" "268" "1668" "-65"
"2026-03-28 15:55:00" "1222" "768" "0" "1990" "268" "1722" "54"
"2026-03-28 16:00:00" "1170" "855" "1" "2026" "268" "1758" "36"
"2026-03-28 16:05:00" "1103" "883" "3" "1989" "268" "1721" "-37"
"2026-03-28 16:10:00" "1047" "930" "0" "1977" "268" "1709" "-12"
"2026-03-28 16:15:00" "948" "1015" "0" "1963" "268" "1695" "-14"
"2026-03-28 16:20:00" "875" "1081" "2" "1958" "268" "1690" "-5"
"2026-03-28 16:25:00" "893" "1109" "0" "2002" "268" "1734" "44"
"2026-03-28 16:30:00" "753" "397" "0" "1150" "268" "882" "-852"
"2026-03-28 16:35:00" "920" "5" "0" "925" "268" "657" "-225"
"2026-03-28 16:40:00" "896" "19" "0" "915" "268" "647" "-10"
"2026-03-28 16:45:00" "893" "16" "1" "910" "268" "642" "-5"
"2026-03-28 16:50:00" "885" "994" "0" "1879" "268" "1611" "969"
"2026-03-28 16:55:00" "801" "964" "6" "1771" "268" "1503" "-108"
"2026-03-28 17:00:00" "700" "1126" "4" "1830" "268" "1562" "59"
"2026-03-28 17:05:00" "623" "1269" "0" "1892" "268" "1624" "62"
"2026-03-28 17:10:00" "553" "1332" "0" "1885" "268" "1617" "-7"
"2026-03-28 17:15:00" "474" "1409" "1" "1884" "268" "1616" "-1"
"2026-03-28 17:20:00" "408" "1495" "2" "1905" "268" "1637" "21"
"2026-03-28 17:25:00" "367" "1515" "16" "1898" "268" "1630" "-7"
"2026-03-28 17:30:00" "349" "1525" "0" "1874" "268" "1606" "-24"

ch.eick

Zitat von: Mumpitz am 28 März 2026, 17:37:39Hier das Resultat der Abfrage meiner Datenbasis.
"ts_min" "pv" "bat" "grid" "p_total" "base_load" "p_clean" "delta_p"
"2026-03-27 17:35:00" "362" "5165" "785" "6312" "268" "6044" \N
"2026-03-27 17:40:00" "334" "3817" "0" "4151" "268" "3883" "-2161"    <<< aus - Das könnte ein E-Herd sein
"2026-03-27 17:45:00" "332" "5154" "85" "5571" "268" "5303" "1420"     <<< an
"2026-03-27 17:50:00" "357" "2621" "1" "2979" "268" "2711" "-2592"    <<< aus
"2026-03-27 17:55:00" "384" "2268" "0" "2652" "268" "2384" "-327"     <<< runter geregelt
"2026-03-27 18:00:00" "376" "2175" "0" "2551" "268" "2283" "-101"     <<< runter geregelt
"2026-03-27 18:05:00" "285" "966" "33" "1284" "268" "1016" "-1267"    <<< aus - => lecker gegessen
"2026-03-27 18:10:00" "174" "1268" "1" "1443" "268" "1175" "159"
"2026-03-27 18:15:00" "120" "1171" "0" "1291" "268" "1023" "-152"
"2026-03-27 18:20:00" "99" "1251" "0" "1350" "268" "1082" "59"
"2026-03-27 18:25:00" "85" "1367" "0" "1452" "268" "1184" "102"
"2026-03-27 18:30:00" "64" "1245" "0" "1309" "268" "1041" "-143"
"2026-03-27 18:35:00" "58" "1259" "1" "1318" "268" "1050" "9"
"2026-03-27 18:40:00" "47" "1293" "4" "1344" "268" "1076" "26"
"2026-03-27 18:45:00" "47" "1304" "5" "1356" "268" "1088" "12"
"2026-03-27 18:50:00" "31" "1431" "5" "1467" "268" "1199" "111"      <<< an  - Da könnte die Multimedia Session begonnen haben
"2026-03-27 18:55:00" "23" "1418" "4" "1445" "268" "1177" "-22"      <<<       Bei geringen Schwankungen wird nichts an/aus geschaltet
"2026-03-27 19:00:00" "15" "1395" "0" "1410" "268" "1142" "-35"
"2026-03-27 19:05:00" "11" "1403" "0" "1414" "268" "1146" "4"
"2026-03-27 19:10:00" "12" "1430" "1" "1443" "268" "1175" "29"
"2026-03-27 19:15:00" "8" "1458" "1" "1467" "268" "1199" "24"
"2026-03-27 19:20:00" "2" "1449" "1" "1452" "268" "1184" "-15"
"2026-03-27 19:25:00" "7" "2959" "3" "2969" "268" "2701" "1517"     <<< an  - irgend ein starker Verbraucher
"2026-03-27 19:30:00" "2" "1484" "4" "1490" "268" "1222" "-1479"    <<< aus - Hier wäre ein feineres Raster ganz gut
"2026-03-27 19:35:00" "0" "1432" "2" "1434" "268" "1166" "-56"
"2026-03-27 19:40:00" "0" "1411" "0" "1411" "268" "1143" "-23"
"2026-03-27 19:45:00" "1" "1383" "2" "1386" "268" "1118" "-25"
"2026-03-27 19:50:00" "13" "1373" "5" "1391" "268" "1123" "5"
"2026-03-27 19:55:00" "4" "1407" "2" "1413" "268" "1145" "22"
"2026-03-27 20:00:00" "4" "1470" "4" "1478" "268" "1210" "65"
"2026-03-27 20:05:00" "3" "1546" "0" "1549" "268" "1281" "71"
"2026-03-27 20:10:00" "0" "1581" "0" "1581" "268" "1313" "32"
"2026-03-27 20:15:00" "0" "1605" "0" "1605" "268" "1337" "24"
"2026-03-27 20:20:00" "2" "1547" "2" "1551" "268" "1283" "-54"
"2026-03-27 20:25:00" "0" "0" "1593" "1593" "268" "1325" "42"      <<< Batterie leer :-(
"2026-03-27 20:30:00" "0" "0" "1612" "1612" "268" "1344" "19"
"2026-03-27 20:35:00" "0" "0" "1580" "1580" "268" "1312" "-32"
"2026-03-27 20:40:00" "0" "0" "1528" "1528" "268" "1260" "-52"
"2026-03-27 20:45:00" "0" "0" "1545" "1545" "268" "1277" "17"
"2026-03-27 20:50:00" "0" "0" "1540" "1540" "268" "1272" "-5"
"2026-03-27 20:55:00" "0" "0" "1574" "1574" "268" "1306" "34"
"2026-03-27 21:00:00" "0" "0" "1483" "1483" "268" "1215" "-91"
"2026-03-27 21:05:00" "0" "0" "1481" "1481" "268" "1213" "-2"
"2026-03-27 21:10:00" "0" "0" "1462" "1462" "268" "1194" "-19"
"2026-03-27 21:15:00" "0" "0" "1531" "1531" "268" "1263" "69"
"2026-03-27 21:20:00" "0" "0" "1516" "1516" "268" "1248" "-15"
"2026-03-27 21:25:00" "0" "0" "762" "762" "268" "494" "-754"    <<< aus - Das waren dann wohl mehrere Geräte
"2026-03-27 21:30:00" "0" "0" "2616" "2616" "268" "2348" "1854"    <<< an  - Hier könnte eventuell die WP starten ???
"2026-03-27 21:35:00" "0" "0" "1592" "1592" "268" "1324" "-1024"   <<< runter geregelt, nach dem Starten kommt erst etwas WP Vorlauf
"2026-03-27 21:40:00" "0" "0" "1542" "1542" "268" "1274" "-50"     <<< WP Vorlauf
"2026-03-27 21:45:00" "0" "0" "1661" "1661" "268" "1393" "119"     <<< an  - Eventuell Licht (mit alten Leuchtmitteln
"2026-03-27 21:50:00" "0" "0" "1563" "1563" "268" "1295" "-98"     <<< aus -
"2026-03-27 21:55:00" "0" "0" "1592" "1592" "268" "1324" "29"      <<< WP läuft
"2026-03-27 22:00:00" "0" "0" "1597" "1597" "1592" "5" "5"       <<< WP hat sich eingespielt und läuft jetzt gleichmäßig
"2026-03-27 22:05:00" "0" "0" "1565" "1597" "1592" "5" "0"
"2026-03-27 22:10:00" "0" "0" "1627" "1627" "1592" "35" "30"
"2026-03-27 22:15:00" "0" "0" "1648" "1648" "1592" "56" "21"
"2026-03-27 22:20:00" "0" "0" "1624" "1624" "1592" "32" "-24"
"2026-03-27 22:25:00" "0" "0" "3013" "3013" "1592" "1421" "1389"
"2026-03-27 22:30:00" "0" "0" "1564" "3013" "1592" "1421" "0"
"2026-03-27 22:35:00" "0" "0" "1587" "1592" "1592" "0" "-1421"
"2026-03-27 22:40:00" "0" "0" "1735" "1735" "1592" "143" "143"
"2026-03-27 22:45:00" "0" "0" "1714" "1714" "1592" "122" "-21"
"2026-03-27 22:50:00" "0" "0" "1675" "1675" "1592" "83" "-39"
"2026-03-27 22:55:00" "0" "0" "1711" "1711" "1592" "119" "36"
"2026-03-27 23:00:00" "0" "0" "1765" "1765" "1592" "173" "54"
"2026-03-27 23:05:00" "0" "0" "1714" "1714" "1592" "122" "-51"
"2026-03-27 23:10:00" "0" "0" "1479" "1714" "1592" "122" "0"
"2026-03-27 23:15:00" "0" "0" "1392" "1592" "1592" "0" "-122"
"2026-03-27 23:20:00" "0" "0" "1351" "1592" "1592" "0" "0"
"2026-03-27 23:25:00" "0" "0" "1341" "1592" "1592" "0" "0"
"2026-03-27 23:30:00" "0" "0" "317" "1592" "1592" "0" "0"
"2026-03-27 23:35:00" "0" "0" "2262" "2262" "1592" "670" "670"
"2026-03-27 23:40:00" "0" "0" "1513" "2262" "1592" "670" "0"
"2026-03-27 23:45:00" "0" "0" "1538" "1592" "1592" "0" "-670"
"2026-03-27 23:50:00" "0" "0" "1488" "1592" "1592" "0" "0"
"2026-03-27 23:55:00" "0" "0" "1517" "1592" "1592" "0" "0"
"2026-03-28 00:00:00" "0" "0" "1520" "1592" "1592" "0" "0"
"2026-03-28 00:05:00" "0" "0" "1535" "1592" "1592" "0" "0"
"2026-03-28 00:10:00" "0" "0" "1370" "1592" "1592" "0" "0"
"2026-03-28 00:15:00" "0" "0" "1516" "1592" "1592" "0" "0"
"2026-03-28 00:20:00" "0" "0" "1478" "1592" "1592" "0" "0"
"2026-03-28 00:25:00" "0" "0" "1494" "1592" "1592" "0" "0"
"2026-03-28 00:30:00" "0" "0" "1451" "1592" "1592" "0" "0"
"2026-03-28 00:35:00" "0" "0" "1498" "1592" "1592" "0" "0"
"2026-03-28 00:40:00" "0" "0" "1433" "1592" "1592" "0" "0"
"2026-03-28 00:45:00" "0" "0" "1426" "1592" "1592" "0" "0"
"2026-03-28 00:50:00" "0" "0" "1432" "1592" "1592" "0" "0"
"2026-03-28 00:55:00" "0" "0" "2032" "2032" "1592" "440" "440"
"2026-03-28 01:00:00" "0" "0" "1522" "2032" "1592" "440" "0"
"2026-03-28 01:05:00" "0" "0" "1494" "1592" "1592" "0" "-440"
"2026-03-28 01:10:00" "0" "0" "1484" "1592" "1592" "0" "0"
"2026-03-28 01:15:00" "0" "0" "1462" "1592" "1592" "0" "0"
"2026-03-28 01:20:00" "0" "0" "1446" "1592" "1592" "0" "0"
"2026-03-28 01:25:00" "0" "0" "1399" "1592" "1592" "0" "0"
"2026-03-28 01:30:00" "0" "0" "1469" "1592" "1592" "0" "0"
"2026-03-28 01:35:00" "0" "0" "2011" "2011" "1592" "419" "419"
"2026-03-28 01:40:00" "0" "0" "1997" "1997" "1592" "405" "-14"
"2026-03-28 01:45:00" "0" "0" "1555" "1997" "1592" "405" "0"
"2026-03-28 01:50:00" "0" "0" "1654" "1654" "1592" "62" "-343"
"2026-03-28 01:55:00" "0" "0" "1537" "1654" "1592" "62" "0"
"2026-03-28 02:00:00" "0" "0" "1502" "1592" "1592" "0" "-62"
"2026-03-28 02:05:00" "0" "0" "1516" "1592" "1592" "0" "0"
"2026-03-28 02:10:00" "0" "0" "1440" "1592" "1592" "0" "0"
"2026-03-28 02:15:00" "0" "0" "1523" "1592" "1592" "0" "0"
"2026-03-28 02:20:00" "0" "0" "1574" "1592" "1592" "0" "0"
"2026-03-28 02:25:00" "0" "0" "1577" "1592" "1592" "0" "0"
"2026-03-28 02:30:00" "0" "0" "1502" "1592" "1592" "0" "0"
"2026-03-28 02:35:00" "0" "0" "1413" "1592" "1592" "0" "0"
"2026-03-28 02:40:00" "0" "0" "1376" "1592" "1592" "0" "0"
"2026-03-28 02:45:00" "0" "0" "1370" "1592" "1592" "0" "0"
"2026-03-28 02:50:00" "0" "0" "1377" "1592" "1592" "0" "0"
"2026-03-28 02:55:00" "0" "0" "1476" "1592" "1592" "0" "0"
"2026-03-28 03:00:00" "0" "0" "1522" "1592" "1592" "0" "0"
"2026-03-28 03:05:00" "0" "0" "1531" "1592" "1592" "0" "0"
"2026-03-28 03:10:00" "0" "0" "1546" "1592" "1592" "0" "0"
"2026-03-28 03:15:00" "0" "0" "1441" "1592" "1592" "0" "0"
"2026-03-28 03:20:00" "0" "0" "1462" "1592" "1592" "0" "0"
"2026-03-28 03:25:00" "0" "0" "1466" "1592" "1592" "0" "0"
"2026-03-28 03:30:00" "0" "0" "1483" "1592" "1592" "0" "0"
"2026-03-28 03:35:00" "0" "0" "1945" "1945" "1592" "353" "353"
"2026-03-28 03:40:00" "0" "0" "2703" "2703" "1592" "1111" "758"
"2026-03-28 03:45:00" "0" "0" "2027" "2027" "1592" "435" "-676"
"2026-03-28 03:50:00" "0" "0" "1827" "1827" "1592" "235" "-200"
"2026-03-28 03:55:00" "0" "0" "1756" "1756" "1592" "164" "-71"
"2026-03-28 04:00:00" "0" "0" "1605" "1605" "1592" "13" "-151"
"2026-03-28 04:05:00" "0" "0" "1642" "1642" "1592" "50" "37"
"2026-03-28 04:10:00" "0" "0" "1502" "1642" "1592" "50" "0"
"2026-03-28 04:15:00" "0" "0" "1527" "1592" "1592" "0" "-50"
"2026-03-28 04:20:00" "0" "0" "1532" "1592" "1592" "0" "0"
"2026-03-28 04:25:00" "0" "0" "1508" "1592" "1592" "0" "0"
"2026-03-28 04:30:00" "0" "0" "1557" "1592" "1592" "0" "0"
"2026-03-28 04:35:00" "0" "0" "1581" "1592" "1592" "0" "0"
"2026-03-28 04:40:00" "0" "0" "1445" "1592" "1592" "0" "0"
"2026-03-28 04:45:00" "0" "0" "1455" "1592" "1592" "0" "0"
"2026-03-28 04:50:00" "0" "0" "1450" "1592" "1592" "0" "0"
"2026-03-28 04:55:00" "0" "0" "1481" "1592" "1592" "0" "0"
"2026-03-28 05:00:00" "0" "0" "1467" "1592" "1592" "0" "0"
"2026-03-28 05:05:00" "0" "0" "1469" "1592" "1592" "0" "0"
"2026-03-28 05:10:00" "0" "0" "1540" "1592" "1592" "0" "0"
"2026-03-28 05:15:00" "0" "0" "1554" "1592" "1592" "0" "0"
"2026-03-28 05:20:00" "0" "0" "1543" "1592" "1592" "0" "0"
"2026-03-28 05:25:00" "0" "0" "1466" "1592" "1592" "0" "0"
"2026-03-28 05:30:00" "0" "0" "1482" "1592" "1592" "0" "0"
"2026-03-28 05:35:00" "0" "0" "1503" "1592" "1592" "0" "0"
"2026-03-28 05:40:00" "0" "0" "860" "1592" "1592" "0" "0"
"2026-03-28 05:45:00" "0" "0" "2701" "2701" "1592" "1109" "1109"   <<< WP schaltet nochmal hoch
"2026-03-28 05:50:00" "0" "0" "1888" "1888" "1592" "296" "-813"
"2026-03-28 05:55:00" "0" "0" "1867" "1867" "1592" "275" "-21"    <<< WP ist fertig, ich denke Ihr wollte um 6:00 Uhr Euer WW haben
"2026-03-28 06:00:00" "0" "0" "1747" "1747" "268" "1479" "-120"
"2026-03-28 06:05:00" "0" "0" "1655" "1655" "268" "1387" "-92"
"2026-03-28 06:10:00" "0" "0" "1625" "1625" "268" "1357" "-30"
"2026-03-28 06:15:00" "17" "0" "1662" "1679" "268" "1411" "54"
"2026-03-28 06:20:00" "0" "0" "1650" "1650" "268" "1382" "-29"
"2026-03-28 06:25:00" "61" "0" "1493" "1554" "268" "1286" "-96"
"2026-03-28 06:30:00" "0" "0" "1640" "1640" "268" "1372" "86"
"2026-03-28 06:35:00" "0" "0" "1629" "1629" "268" "1361" "-11"
"2026-03-28 06:40:00" "0" "0" "1584" "1584" "268" "1316" "-45"
"2026-03-28 06:45:00" "235" "6" "1313" "1554" "268" "1286" "-30"
"2026-03-28 06:50:00" "267" "6" "4254" "4527" "268" "4259" "2973"    <<< an  - Das wird ein Wasserkocher sein
"2026-03-28 06:55:00" "226" "0" "4259" "4485" "268" "4217" "-42"
"2026-03-28 07:00:00" "323" "6" "4064" "4393" "268" "4125" "-92"
"2026-03-28 07:05:00" "338" "6" "1173" "1517" "268" "1249" "-2876"   <<< aus - Wasser ist fertig
"2026-03-28 07:10:00" "351" "0" "1155" "1506" "268" "1238" "-11"
"2026-03-28 07:15:00" "375" "6" "1161" "1542" "268" "1274" "36"
"2026-03-28 07:20:00" "394" "6" "1175" "1575" "268" "1307" "33"
"2026-03-28 07:25:00" "391" "6" "1349" "1746" "268" "1478" "171"
"2026-03-28 07:30:00" "419" "6" "2665" "3090" "268" "2822" "1344"
"2026-03-28 07:35:00" "433" "0" "2754" "3187" "268" "2919" "97"
"2026-03-28 07:40:00" "453" "7" "2523" "2983" "268" "2715" "-204"
"2026-03-28 07:45:00" "472" "6" "609" "1087" "268" "819" "-1896"
"2026-03-28 07:50:00" "293" "0" "0" "293" "268" "25" "-794"
"2026-03-28 07:55:00" "604" "6" "2077" "2687" "268" "2419" "2394"    <<< an  -
"2026-03-28 08:00:00" "1868" "0" "9" "1877" "268" "1609" "-810"    <<< aus -
"2026-03-28 08:05:00" "1505" "0" "35" "1540" "268" "1272" "-337"    <<< aus -
"2026-03-28 08:10:00" "1518" "0" "2" "1520" "268" "1252" "-20"
"2026-03-28 08:15:00" "1354" "0" "0" "1354" "268" "1086" "-166"    <<< aus -
"2026-03-28 08:20:00" "1256" "0" "7" "1263" "268" "995" "-91"
"2026-03-28 08:25:00" "2637" "730" "19" "3386" "268" "3118" "2123"    <<< an  - Wasserkocher? War das Teewasser zu kalt?
"2026-03-28 08:30:00" "1337" "0" "0" "1337" "268" "1069" "-2049"   <<< aus -
"2026-03-28 08:35:00" "1410" "0" "3" "1413" "268" "1145" "76"
"2026-03-28 08:40:00" "2954" "334" "0" "3288" "268" "3020" "1875"    <<< an  -
"2026-03-28 08:45:00" "3063" "228" "0" "3291" "268" "3023" "3"
"2026-03-28 08:50:00" "3106" "245" "8" "3359" "268" "3091" "68"
"2026-03-28 08:55:00" "3043" "314" "10" "3367" "268" "3099" "8"
"2026-03-28 09:00:00" "1404" "0" "3" "1407" "268" "1139" "-1960"   <<< aus -
"2026-03-28 09:05:00" "1371" "0" "0" "1371" "268" "1103" "-36"
"2026-03-28 09:10:00" "1516" "0" "0" "1516" "268" "1248" "145"
"2026-03-28 09:15:00" "1459" "0" "4" "1463" "268" "1195" "-53"
"2026-03-28 09:20:00" "1404" "0" "1" "1405" "268" "1137" "-58"
"2026-03-28 09:25:00" "1425" "0" "0" "1425" "268" "1157" "20"
"2026-03-28 09:30:00" "1406" "0" "0" "1406" "268" "1138" "-19"
"2026-03-28 09:35:00" "1399" "0" "0" "1399" "268" "1131" "-7"
"2026-03-28 09:40:00" "1743" "0" "1" "1744" "268" "1476" "345"
"2026-03-28 09:45:00" "1178" "0" "0" "1178" "268" "910" "-566"
"2026-03-28 09:50:00" "339" "0" "25" "364" "268" "96" "-814"
"2026-03-28 09:55:00" "268" "0" "0" "268" "268" "0" "-96"
"2026-03-28 10:00:00" "280" "0" "0" "280" "268" "12" "12"
"2026-03-28 10:05:00" "723" "0" "60" "783" "268" "515" "503"
"2026-03-28 10:10:00" "1406" "0" "0" "1406" "268" "1138" "623"
"2026-03-28 10:15:00" "1320" "0" "13" "1333" "268" "1065" "-73"
"2026-03-28 10:20:00" "1462" "0" "2" "1464" "268" "1196" "131"
"2026-03-28 10:25:00" "1967" "0" "4" "1971" "268" "1703" "507"
"2026-03-28 10:30:00" "3969" "0" "0" "3969" "268" "3701" "1998"    <<< an  - Ab hier könnte ein E-Auto  im NurPV geladen worden sein
"2026-03-28 10:35:00" "3408" "0" "0" "3408" "268" "3140" "-561"
"2026-03-28 10:40:00" "3373" "0" "0" "3373" "268" "3105" "-35"
"2026-03-28 10:45:00" "3388" "0" "0" "3388" "268" "3120" "15"
"2026-03-28 10:50:00" "900" "0" "2" "902" "268" "634" "-2486"   <<< aus -
"2026-03-28 10:55:00" "2947" "0" "5" "2952" "268" "2684" "2050"    <<< an  -
"2026-03-28 11:00:00" "400" "0" "43" "443" "268" "175" "-2509"   <<< aus -
"2026-03-28 11:05:00" "456" "0" "0" "456" "268" "188" "13"
"2026-03-28 11:10:00" "3052" "0" "0" "3052" "268" "2784" "2596"    <<< an  -
"2026-03-28 11:15:00" "3870" "0" "403" "4273" "268" "4005" "1221"    <<< rauf geregelt
"2026-03-28 11:20:00" "3230" "0" "172" "3402" "268" "3134" "-871"    <<< runter geregelt
"2026-03-28 11:25:00" "1322" "0" "0" "1322" "268" "1054" "-2080"   <<< aus -
"2026-03-28 11:30:00" "1407" "0" "0" "1407" "268" "1139" "85"
"2026-03-28 11:35:00" "2833" "0" "51" "2884" "268" "2616" "1477"
"2026-03-28 11:40:00" "2810" "0" "1296" "4106" "268" "3838" "1222"
"2026-03-28 11:45:00" "359" "0" "0" "359" "268" "91" "-3747"
"2026-03-28 11:50:00" "412" "0" "19" "431" "268" "163" "72"
"2026-03-28 11:55:00" "2053" "0" "3" "2056" "268" "1788" "1625"
"2026-03-28 12:00:00" "2464" "0" "1" "2465" "268" "2197" "409"
"2026-03-28 12:05:00" "880" "0" "3" "883" "268" "615" "-1582"
"2026-03-28 12:10:00" "4149" "0" "91" "4240" "268" "3972" "3357"
"2026-03-28 12:15:00" "1246" "0" "0" "1246" "268" "978" "-2994"
"2026-03-28 12:20:00" "1303" "0" "6" "1309" "268" "1041" "63"
"2026-03-28 12:25:00" "1344" "0" "20" "1364" "268" "1096" "55"
"2026-03-28 12:30:00" "1983" "0" "6" "1989" "268" "1721" "625"
"2026-03-28 12:35:00" "2969" "0" "0" "2969" "268" "2701" "980"
"2026-03-28 12:40:00" "2470" "0" "0" "2470" "268" "2202" "-499"
"2026-03-28 12:45:00" "2479" "3" "0" "2482" "268" "2214" "12"
"2026-03-28 12:50:00" "2507" "4" "0" "2511" "268" "2243" "29"
"2026-03-28 12:55:00" "2618" "4" "0" "2622" "268" "2354" "111"
"2026-03-28 13:00:00" "4605" "1405" "91" "6101" "268" "5833" "3479"
"2026-03-28 13:05:00" "4355" "2710" "24" "7089" "268" "6821" "988"
"2026-03-28 13:10:00" "2944" "1126" "59" "4129" "268" "3861" "-2960"
"2026-03-28 13:15:00" "3369" "5" "0" "3374" "268" "3106" "-755"
"2026-03-28 13:20:00" "3955" "972" "0" "4927" "268" "4659" "1553"
"2026-03-28 13:25:00" "4528" "836" "0" "5364" "268" "5096" "437"
"2026-03-28 13:30:00" "2617" "0" "11" "2628" "268" "2360" "-2736"
"2026-03-28 13:35:00" "370" "1" "0" "371" "268" "103" "-2257"
"2026-03-28 13:40:00" "923" "1" "0" "924" "268" "656" "553"
"2026-03-28 13:45:00" "955" "2" "0" "957" "268" "689" "33"
"2026-03-28 13:50:00" "3108" "5" "0" "3113" "268" "2845" "2156"
"2026-03-28 13:55:00" "2636" "5" "0" "2641" "268" "2373" "-472"
"2026-03-28 14:00:00" "2034" "3" "0" "2037" "268" "1769" "-604"
"2026-03-28 14:05:00" "3526" "497" "0" "4023" "268" "3755" "1986"
"2026-03-28 14:10:00" "1891" "4" "0" "1895" "268" "1627" "-2128"
"2026-03-28 14:15:00" "2770" "242" "0" "3012" "268" "2744" "1117"
"2026-03-28 14:20:00" "2005" "4" "0" "2009" "268" "1741" "-1003"
"2026-03-28 14:25:00" "3254" "955" "22" "4231" "268" "3963" "2222"
"2026-03-28 14:30:00" "2950" "1294" "0" "4244" "268" "3976" "13"
"2026-03-28 14:35:00" "2069" "0" "0" "2069" "268" "1801" "-2175"
"2026-03-28 14:40:00" "2585" "1611" "0" "4196" "268" "3928" "2127"
"2026-03-28 14:45:00" "2455" "1731" "6" "4192" "268" "3924" "-4"
"2026-03-28 14:50:00" "2018" "0" "0" "2018" "268" "1750" "-2174"
"2026-03-28 14:55:00" "2103" "0" "4" "2107" "268" "1839" "89"
"2026-03-28 15:00:00" "2421" "403" "2" "2826" "268" "2558" "719"
"2026-03-28 15:05:00" "2158" "626" "0" "2784" "268" "2516" "-42"
"2026-03-28 15:10:00" "2031" "828" "0" "2859" "268" "2591" "75"
"2026-03-28 15:15:00" "1870" "36" "3" "1909" "268" "1641" "-950"
"2026-03-28 15:20:00" "1719" "112" "0" "1831" "268" "1563" "-78"
"2026-03-28 15:25:00" "990" "0" "2" "992" "268" "724" "-839"
"2026-03-28 15:30:00" "1542" "388" "0" "1930" "268" "1662" "938"
"2026-03-28 15:35:00" "1115" "0" "0" "1115" "268" "847" "-815"
"2026-03-28 15:40:00" "1382" "0" "5" "1387" "268" "1119" "272"
"2026-03-28 15:45:00" "1358" "640" "3" "2001" "268" "1733" "614"
"2026-03-28 15:50:00" "1292" "644" "0" "1936" "268" "1668" "-65"
"2026-03-28 15:55:00" "1222" "768" "0" "1990" "268" "1722" "54"
"2026-03-28 16:00:00" "1170" "855" "1" "2026" "268" "1758" "36"
"2026-03-28 16:05:00" "1103" "883" "3" "1989" "268" "1721" "-37"
"2026-03-28 16:10:00" "1047" "930" "0" "1977" "268" "1709" "-12"
"2026-03-28 16:15:00" "948" "1015" "0" "1963" "268" "1695" "-14"
"2026-03-28 16:20:00" "875" "1081" "2" "1958" "268" "1690" "-5"
"2026-03-28 16:25:00" "893" "1109" "0" "2002" "268" "1734" "44"
"2026-03-28 16:30:00" "753" "397" "0" "1150" "268" "882" "-852"
"2026-03-28 16:35:00" "920" "5" "0" "925" "268" "657" "-225"
"2026-03-28 16:40:00" "896" "19" "0" "915" "268" "647" "-10"
"2026-03-28 16:45:00" "893" "16" "1" "910" "268" "642" "-5"
"2026-03-28 16:50:00" "885" "994" "0" "1879" "268" "1611" "969"
"2026-03-28 16:55:00" "801" "964" "6" "1771" "268" "1503" "-108"
"2026-03-28 17:00:00" "700" "1126" "4" "1830" "268" "1562" "59"
"2026-03-28 17:05:00" "623" "1269" "0" "1892" "268" "1624" "62"
"2026-03-28 17:10:00" "553" "1332" "0" "1885" "268" "1617" "-7"
"2026-03-28 17:15:00" "474" "1409" "1" "1884" "268" "1616" "-1"
"2026-03-28 17:20:00" "408" "1495" "2" "1905" "268" "1637" "21"
"2026-03-28 17:25:00" "367" "1515" "16" "1898" "268" "1630" "-7"
"2026-03-28 17:30:00" "349" "1525" "0" "1874" "268" "1606" "-24"
Wie kann ich das nun interpretieren?
Guten Morgen,

als erstes erkenne ich, dass Du rechte sparsam mit den Daten bist und nur alle 5 Minuten Werte sammelst. Da dachte ich, dass ich mit einer Minute schon wenig sammel :-)

 - Spalte pc, bat, grid sollte klar sein.
 - Spalte p_total ist dann Dein kompletter Verbrauch.
 - Die Spalte base_load versucht eine Basis Linie in Deinem Verbrauch zu ermitteln, das wäre Dein Grundrauschen, also alle Verbräuche, die nicht einzeln zu identifizieren sein werden.
   - Tagsüber liegt das bei Dir bei 268 W
   - Nachts liegst Du recht hoch mit 1592 W.
     Könntest Du da etwas zu sagen?
     Ich vermute das wird eine WP sein, die ich bei mir recht gut ausklammern konnte, da meine nur Zyklisch läuft.
     ==> Das wäre ein Punkt bei Dir, durch den man die base_line in der Nacht nicht bestimmen kann, da die WP alles überlagert.
 - Die Leistung p_clean soll nun später analysiert werden und zur erkennung der verschiedenen Geräte verwendet werden.
 - delta_p wäre das erste Erkennungssignal,
     - dass ein Gerät eingeschaltet, also ein Plus an Verbrauch, oder
     - abgeschaltet wurde, somit ein Minus an Verbrauch entsteht

In einem echten NILM werden natürlich viel mehr Daten benötigt, um eine saubere Analyse zu bekommen.
Bei Dir werden keine Ein/Aus, die zwischen dem 5 Minuten Raster getätigt werden erkennbar sein.

Jetzt könntest Du mal den wirklichen Tagesablauf an die Verbräuche schreiben und ein Verbrauchsdiagramm von dem Zeitraum erstellen.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick