diff --git a/ansible/roles/edge-host/defaults/main.yml b/ansible/roles/edge-host/defaults/main.yml index 9813b3ce..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.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"