feat(open3e): vitocal-can gateway config in git #1615

Merged
k.renner merged 1 commits from feat/vitocal-can-config into main 2026-11-11 06:56:26 +00:00
3 changed files with 78 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# vitocal-can
Waveshare ESP32-S3-RS485-CAN running unmodified boonkerz/open3e-esp32
(upstream CI artifact `site-dev`), on Vitocal 250-A socket A
(Klemme 1 = CAN L, Klemme 3 = CAN H, no GND/shield, jumper H1 = NC).
Replaces the `heating-can` stack on edge-1. YouTrack S28-28.
- mDNS: `vitocal-can.local`
- DNS (DHCP): `open3e.iot.renner.uno`. The firmware sends its compiled-in
`CONFIG_LWIP_LOCAL_HOSTNAME`.
## Files
- `settings.json`: apply with `PUT /api/settings`. No password: the MQTT
password is pushed by mqtt-account-controller.
- `points.json`: apply with `PUT /api/points`. 120 UDS datapoints (30 s,
fixed topics matching the Home Assistant packages), including the 29 One
Base ZigBee slots on 0x6c3 (topics `onebase_<DID:04d>_<didName>`), and 7
E380 frames (10 s). Compact JSON with default fields omitted: the API takes
request bodies of at most 16384 bytes (`MAX_BODY`).
## One Base ZigBee slots (ECU 0x6c3)
The 29 slots need a firmware with open3e-esp32 PR #20 (codec trees in PSRAM,
merged 2026-11-09, first in 0.2.0+2d9002b; S28-52). Without it a compiled
codec stays in internal RAM for each polled point (allocations < 16 KiB are
internal, `CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL`), one slot costs ~8 KB, and 29
slots exhausted internal RAM (`internalMin` 16 B, crash in task `wifi`). Do
not load this `points.json` on an older firmware.
Home Assistant reads health from `/api/status` and `/api/sysinfo` (REST
sensors in `packages/open3e.yaml`).
Measured internal heap (`/api/sysinfo`, free / min in bytes):
| Loaded | free | min |
|---|---|---|
| 0 points | 161,923 | |
| 46 Vitocal | 115,163 | 73,040 |
| + 29 VX3 | 114,067 | 49,228 |
| + 16 VCMU + 7 E380 | 108,315 | 40,064 |
| + 1 ZigBee slot | 100,295 | 39,828 |
The hostname is part of the Wi-Fi settings: `POST /api/wifi`
`{"ssid":"Renner IoT","hostname":"vitocal-can"}`. An omitted `pass` keeps the
stored one.
## Firmware update
1. `POST /api/ota` with `open3e-gateway.bin`.
2. Wait for `pendingVerify: false` in `/api/status` (60 s).
3. `POST /api/storage` with `storage.bin`. This wipes `points.json`, so apply
`points.json` again afterwards.
Only one UDS client on the bus: never load `points.json` while `heating-can`
on edge-1 is running.
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
{
"mqtt": {
"enabled": true,
"host": "mqtt.renner.uno",
"port": 1883,
"user": "vitocal-can",
"baseTopic": "open3e",
"format": "onebase_{didNumber:04d}_{didName}",
"cmndTopic": "open3e/cmnd",
"haDiscovery": false,
"haPrefix": "homeassistant"
},
"system": {
"writeEnabled": true,
"rawWriteEnabled": false,
"em380Enabled": true,
"collectEnabled": false,
"rawCanIds": "",
"tz": "CET-1CEST,M3.5.0,M10.5.0/3"
}
}