From 5ed3a0796e3eb2e0ffdd44965791e6dc7dcff9da Mon Sep 17 00:00:00 2001 From: "m0@nas" Date: Tue, 15 Sep 2026 16:16:08 +0200 Subject: [PATCH] Tabellen byd und byd_zellen fuer den BYD-Speicher Verlauf aus gatherBYDData.py (SolarManager): alle 5 Minuten Kennwerte, alle 15 Minuten alle Zellspannungen und Temperaturen als JSON. Co-Authored-By: Claude Opus 5 --- README.md | 1 + solarLog_byd.sql | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 solarLog_byd.sql diff --git a/README.md b/README.md index f06d83d..eee0177 100644 --- a/README.md +++ b/README.md @@ -468,6 +468,7 @@ erDiagram | `Heater`, `puffertemp`, `wasser`, `zisterne`, `windrad`, `kiga_windrad` | Heizung, Speicher, Wasser, Windrad | `solarManager.py` | | `skoda`, `skoda_raw` | Fahrzeugzustand im Verlauf | `gatherSkodaData.py` | | `skoda_ladepunkte` | Wallbox-Verlauf während einer Ladung, im Minutentakt, wird nicht ausgedünnt (`solarLog_skoda_ladepunkte.sql`) | `gatherSkodaData.py`; ältere Ladungen `skoda_ladepunkte_nachtragen.py` | +| `byd`, `byd_zellen` | BYD-Speicher direkt aus der BMU: Ladestand, SOH, Temperaturen, Spreizung, Zähler alle 5 Minuten; alle 128 Zellspannungen und 64 Temperaturen alle 15 Minuten (`solarLog_byd.sql`) | `gatherBYDData.py` | | `weatherStation`, `weatherHours`, `weatherDays`, `daylight`, `simPower` | Wetter, Sonnenzeiten, Ertragsprognose | Wetterbrücke, Open-Meteo, Prognose | | `gridCosts`, `gasCosts`, `fuelCosts` | Preiszeitreihen (Stichtag, kein Enddatum) | Einstellungsseite (`costs.php`) | diff --git a/solarLog_byd.sql b/solarLog_byd.sql new file mode 100644 index 0000000..0e0d399 --- /dev/null +++ b/solarLog_byd.sql @@ -0,0 +1,51 @@ +-- Verlauf der BYD Battery-Box HVM, direkt aus der BMU. +-- +-- EnergyFlow haelt vom Speicher nur, was der Gen24 weiss: Ladestand, Leistung, +-- Spannung, Strom. Die Werte darunter - Zellen, Temperaturfuehler, Gesundheit, +-- Gesamtzaehler - liest gatherBYDData.py (SolarManager) von der BMU unter +-- 192.168.16.254:8080 und schreibt sie hier fest. +-- +-- byd: alle 5 Minuten eine Zeile, knapp 290 am Tag. Traegt, wie sich SOH, +-- Spreizung und Temperaturen ueber Monate und Jahre entwickeln - deshalb wird +-- die Tabelle nicht ausgeduennt. +-- +-- byd_zellen: alle 15 Minuten alle 128 Zellspannungen und 64 Temperaturen als +-- JSON, rund 1 kB je Zeile, knapp 35 MB im Jahr. Einzelne Spalten je Zelle +-- waeren 192 Spalten fuer Werte, die nie einzeln abgefragt, sondern immer als +-- Satz gezeichnet werden. +-- +-- Zellen sind durchgezaehlt: Modul m (1..8) hat die Zellen 16*(m-1)+1 bis +-- 16*m und die Fuehler 8*(m-1)+1 bis 8*m. + +CREATE TABLE IF NOT EXISTS `byd` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL COMMENT 'Ortszeit', + `soc` decimal(4,1) NOT NULL COMMENT '% laut BMU', + `soh` decimal(4,1) NOT NULL COMMENT 'Gesundheit in %', + `spannung` decimal(5,1) NOT NULL COMMENT 'V am Batterieausgang', + `strom` decimal(5,1) NOT NULL COMMENT 'A, positiv = laden', + `leistung` int(11) NOT NULL COMMENT 'W, positiv = laden', + `t_min` tinyint(4) NOT NULL COMMENT 'kaeltester Fuehler, degC', + `t_max` tinyint(4) NOT NULL COMMENT 'waermster Fuehler, degC', + `zelle_min` smallint(5) unsigned NOT NULL COMMENT 'niedrigste Zelle, mV', + `zelle_max` smallint(5) unsigned NOT NULL COMMENT 'hoechste Zelle, mV', + `zelle_min_nr` tinyint(3) unsigned NOT NULL COMMENT '1..128', + `zelle_max_nr` tinyint(3) unsigned NOT NULL COMMENT '1..128', + `spreizung` smallint(5) unsigned NOT NULL COMMENT 'zelle_max - zelle_min, mV', + `ausgleich` tinyint(3) unsigned NOT NULL COMMENT 'Zellen, die gerade ausgeglichen werden', + `fehler` smallint(5) unsigned NOT NULL COMMENT 'Fehlerbits der BMU, 0 = keiner', + `geladen_kwh` decimal(9,1) NOT NULL COMMENT 'Gesamtzaehler seit Inbetriebnahme', + `entladen_kwh` decimal(9,1) NOT NULL, + PRIMARY KEY (`id`), + KEY `datetime` (`datetime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +CREATE TABLE IF NOT EXISTS `byd_zellen` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL COMMENT 'Ortszeit', + `zellen` varchar(1200) NOT NULL COMMENT 'JSON, mV je Zelle, 16 je Modul', + `temperaturen` varchar(400) NOT NULL COMMENT 'JSON, degC je Fuehler, 8 je Modul', + `ausgleich` char(32) NOT NULL COMMENT 'Ausgleichsbits roh als Hex, Bitlage unbestaetigt', + PRIMARY KEY (`id`), + KEY `datetime` (`datetime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;