From 3c6b5c0bfb7d0d05e0f75207d8a0baec136ce679 Mon Sep 17 00:00:00 2001 From: Konstantin Renner Date: Fri, 3 Jul 2026 09:51:31 +0200 Subject: [PATCH 1/2] edge-host: vitocal.2486-2488 elektrische WP-Leistung in den Poll-Satz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CurrentElectricalPowerConsumption Kältekreis/Heizstab/System (W) — gemessene WP-Leistung für die Schema-Karte (Fluss-Richtungen und Leistungsanzeige am Backup-Strang). Co-Authored-By: Claude Fable 5 --- ansible/roles/edge-host/defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/roles/edge-host/defaults/main.yml b/ansible/roles/edge-host/defaults/main.yml index 9813b3ce..643a49dd 100644 --- a/ansible/roles/edge-host/defaults/main.yml +++ b/ansible/roles/edge-host/defaults/main.yml @@ -31,7 +31,7 @@ edge_open3e_poll_seconds: 30 # the commissioning workstation; see vican repo CLAUDE.md for the rationale). # NO -w / write DIDs here — live heating + battery, writes are Phase 3. edge_open3e_datapoints: >- - vitocal.268,vitocal.269,vitocal.271,vitocal.274,vitocal.286,vitocal.288,vitocal.318,vitocal.321,vitocal.324,vitocal.335,vitocal.336,vitocal.396,vitocal.402,vitocal.403,vitocal.548,vitocal.565,vitocal.1007,vitocal.1043,vitocal.1190,vitocal.1211,vitocal.1391,vitocal.1416,vitocal.1417,vitocal.2320,vitocal.2346,vitocal.2351,vitocal.2352,vitocal.2369,vitocal.2370,vitocal.2622,vitocal.2624,vitocal.2625,vitocal.2735,vitocal.3016,vx3.378,vx3.379,vx3.380,vx3.535,vx3.1603,vx3.1664,vx3.1690,vx3.1801,vx3.1802,vx3.1810,vx3.1828,vx3.1830,vx3.1834,vx3.1836,vx3.2214,vx3.2240,vcmu.320,vcmu.322,vcmu.325,vcmu.355,vcmu.389,vcmu.391,vcmu.1772,vcmu.1773,vcmu.1775,vcmu.1776,vcmu.2256,vcmu.2259,vcmu.2333,vcmu.2334,vcmu.2569,vcmu.2571,vitocal.2791 + vitocal.268,vitocal.269,vitocal.271,vitocal.274,vitocal.286,vitocal.288,vitocal.318,vitocal.321,vitocal.324,vitocal.335,vitocal.336,vitocal.396,vitocal.402,vitocal.403,vitocal.548,vitocal.565,vitocal.1007,vitocal.1043,vitocal.1190,vitocal.1211,vitocal.1391,vitocal.1416,vitocal.1417,vitocal.2320,vitocal.2346,vitocal.2351,vitocal.2352,vitocal.2369,vitocal.2370,vitocal.2486,vitocal.2487,vitocal.2488,vitocal.2622,vitocal.2624,vitocal.2625,vitocal.2735,vitocal.3016,vx3.378,vx3.379,vx3.380,vx3.535,vx3.1603,vx3.1664,vx3.1690,vx3.1801,vx3.1802,vx3.1810,vx3.1828,vx3.1830,vx3.1834,vx3.1836,vx3.2214,vx3.2240,vcmu.320,vcmu.322,vcmu.325,vcmu.355,vcmu.389,vcmu.391,vcmu.1772,vcmu.1773,vcmu.1775,vcmu.1776,vcmu.2256,vcmu.2259,vcmu.2333,vcmu.2334,vcmu.2569,vcmu.2571,vitocal.2791 # ECU addresses; -dev selects codec set, tx selects the UDS address. # vcmu (refrigerant-circuit controller) has no dedicated codec set — # omitting dpList makes open3e fall back to the generic datapoint list, -- 2.54.0 From 9649e296e620ac155b10b6188783b00d3e0f664e Mon Sep 17 00:00:00 2001 From: Konstantin Renner Date: Fri, 3 Jul 2026 10:06:12 +0200 Subject: [PATCH 2/2] edge-host: Batteriemodul-DIDs pollen (vx3 dpList-Overlay) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Stock-vx3-Datenpunktliste filtert unbekannte DIDs weg — Overlay files/open3e-vx3plus.py fügt die per-Modul-DIDs mit Master-Codec wieder hinzu (dpList als Pfad, Open3Eclass unterstützt .py-Dateien). Gepollt werden 1577-1582 (OperatingData: 8x Temperatur, 15x Zell- spannung je Modul) und 3085-3090 (Information: Modulspannung u. a.). Am Bus verifiziert 2026-07-03 (alle 12 DIDs antworten auf 0x6a1). Co-Authored-By: Claude Fable 5 --- ansible/roles/edge-host/defaults/main.yml | 6 ++++-- .../roles/edge-host/files/open3e-vx3plus.py | 20 +++++++++++++++++++ ansible/roles/edge-host/tasks/main.yml | 7 +++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 ansible/roles/edge-host/files/open3e-vx3plus.py diff --git a/ansible/roles/edge-host/defaults/main.yml b/ansible/roles/edge-host/defaults/main.yml index 643a49dd..3a778c01 100644 --- a/ansible/roles/edge-host/defaults/main.yml +++ b/ansible/roles/edge-host/defaults/main.yml @@ -31,14 +31,16 @@ edge_open3e_poll_seconds: 30 # the commissioning workstation; see vican repo CLAUDE.md for the rationale). # NO -w / write DIDs here — live heating + battery, writes are Phase 3. edge_open3e_datapoints: >- - vitocal.268,vitocal.269,vitocal.271,vitocal.274,vitocal.286,vitocal.288,vitocal.318,vitocal.321,vitocal.324,vitocal.335,vitocal.336,vitocal.396,vitocal.402,vitocal.403,vitocal.548,vitocal.565,vitocal.1007,vitocal.1043,vitocal.1190,vitocal.1211,vitocal.1391,vitocal.1416,vitocal.1417,vitocal.2320,vitocal.2346,vitocal.2351,vitocal.2352,vitocal.2369,vitocal.2370,vitocal.2486,vitocal.2487,vitocal.2488,vitocal.2622,vitocal.2624,vitocal.2625,vitocal.2735,vitocal.3016,vx3.378,vx3.379,vx3.380,vx3.535,vx3.1603,vx3.1664,vx3.1690,vx3.1801,vx3.1802,vx3.1810,vx3.1828,vx3.1830,vx3.1834,vx3.1836,vx3.2214,vx3.2240,vcmu.320,vcmu.322,vcmu.325,vcmu.355,vcmu.389,vcmu.391,vcmu.1772,vcmu.1773,vcmu.1775,vcmu.1776,vcmu.2256,vcmu.2259,vcmu.2333,vcmu.2334,vcmu.2569,vcmu.2571,vitocal.2791 + vitocal.268,vitocal.269,vitocal.271,vitocal.274,vitocal.286,vitocal.288,vitocal.318,vitocal.321,vitocal.324,vitocal.335,vitocal.336,vitocal.396,vitocal.402,vitocal.403,vitocal.548,vitocal.565,vitocal.1007,vitocal.1043,vitocal.1190,vitocal.1211,vitocal.1391,vitocal.1416,vitocal.1417,vitocal.2320,vitocal.2346,vitocal.2351,vitocal.2352,vitocal.2369,vitocal.2370,vitocal.2486,vitocal.2487,vitocal.2488,vitocal.2622,vitocal.2624,vitocal.2625,vitocal.2735,vitocal.3016,vx3.378,vx3.379,vx3.380,vx3.535,vx3.1603,vx3.1664,vx3.1690,vx3.1801,vx3.1802,vx3.1810,vx3.1828,vx3.1830,vx3.1577,vx3.1578,vx3.1579,vx3.1580,vx3.1581,vx3.1582,vx3.1834,vx3.1836,vx3.2214,vx3.2240,vx3.3085,vx3.3086,vx3.3087,vx3.3088,vx3.3089,vx3.3090,vcmu.320,vcmu.322,vcmu.325,vcmu.355,vcmu.389,vcmu.391,vcmu.1772,vcmu.1773,vcmu.1775,vcmu.1776,vcmu.2256,vcmu.2259,vcmu.2333,vcmu.2334,vcmu.2569,vcmu.2571,vitocal.2791 # ECU addresses; -dev selects codec set, tx selects the UDS address. # vcmu (refrigerant-circuit controller) has no dedicated codec set — # omitting dpList makes open3e fall back to the generic datapoint list, # which decodes all polled VCMU DIDs. edge_open3e_devices: vitocal: { tx: "0x680", dpList: "vcal" } - vx3: { tx: "0x6a1", dpList: "vx3" } + # dpList als Pfad: Overlay-Datei mit den Batteriemodul-DIDs (siehe + # files/open3e-vx3plus.py) — die Stock-vx3-Liste filtert sie sonst weg. + vx3: { tx: "0x6a1", dpList: "/opt/edge-host/open3e/vx3plus.py" } vcmu: { tx: "0x68c" } # --- E3onCAN: passive E380 energy-meter listener (no bus writes, so it diff --git a/ansible/roles/edge-host/files/open3e-vx3plus.py b/ansible/roles/edge-host/files/open3e-vx3plus.py new file mode 100644 index 00000000..d4836a60 --- /dev/null +++ b/ansible/roles/edge-host/files/open3e-vx3plus.py @@ -0,0 +1,20 @@ +# Managed by ansible (roles/edge-host). Datapoint overlay for the VX3: +# the stock vx3 list acts as a FILTER (DIDs missing from it are popped +# from the master table, Open3Eclass.py), so the per-battery-module DIDs +# were never pollable with dpList "vx3". This overlay re-adds them with +# codec None (= keep the master/general codec, RawCodec hex strings). +# +# Module DIDs (verified answering on ECU 0x6a1, 2026-07-03): +# 1577-1582 ElectricalEnergyStorageModule{One..Six}OperatingData +# (139 B: 8x temperature 0.1 °C + 15x cell voltage mV) +# 3085-3090 ElectricalEnergyStorageModule{One..Six}Information +# (18 B: module voltage 0.01 V, SoH?, counters) +from open3e.Open3EdatapointsVx3 import dataIdentifiers as _vx3 + +dataIdentifiers = { + "dids": { + **_vx3["dids"], + 1577: None, 1578: None, 1579: None, 1580: None, 1581: None, 1582: None, + 3085: None, 3086: None, 3087: None, 3088: None, 3089: None, 3090: None, + } +} diff --git a/ansible/roles/edge-host/tasks/main.yml b/ansible/roles/edge-host/tasks/main.yml index 12b98b84..81c19096 100644 --- a/ansible/roles/edge-host/tasks/main.yml +++ b/ansible/roles/edge-host/tasks/main.yml @@ -124,6 +124,13 @@ virtualenv_command: python -m venv notify: Restart open3e +- name: Deploy open3e vx3 datapoint overlay (battery-module DIDs) + ansible.builtin.copy: + src: open3e-vx3plus.py + dest: "{{ edge_base_dir }}/open3e/vx3plus.py" + mode: "0644" + notify: Restart open3e + - name: Deploy open3e devices.json ansible.builtin.copy: content: "{{ edge_open3e_devices | to_nice_json }}\n" -- 2.54.0