Seed the aircon write-path rig

Four controls and the unit's own answer beside them. Two catches, both on:
the flow is seeded stopped and the node's commands setting is off. The initial
values are read off the unit when the script runs, so starting the flow asks
for what it was already doing rather than commanding it to something else.
This commit is contained in:
2026-08-20 22:43:03 +02:00
parent 044bdc662a
commit 37f0c55a8d
3 changed files with 19 additions and 4 deletions
+11 -2
View File
@@ -73,8 +73,9 @@ external interfaces. See `docs/architecture/structure.canvas` → *Backend M
`connector-skeleton/`. The registry follows later
- [x] First real connectors written against that contract from outside the engine:
WF-RAC aircon, calendar, UniFi presence and Art-Net, in `connectors/`.
Built by `make connectors` and installed into the image. Three of the four
read only; the aircon package still cannot produce a command
Built by `make connectors` and installed into the image. Calendar and
UniFi read only; Art-Net and the aircon write, each behind a setting that
starts off
- [x] The other direction of the contract: `ConnectorNode.write` receives the
node's input ports, so a connector can command something rather than only
read it. Additive, so `CONTRACT_VERSION` stays at 1 — before this the base
@@ -82,6 +83,14 @@ external interfaces. See `docs/architecture/structure.canvas` → *Backend M
packet builder unreachable. Art-Net now sends: a per-port `channels` map
puts each input on its own DMX channel, `transmit` still gates the socket,
and one node owns one universe because a frame carries all 512 levels
- [x] The aircon writes too: power, mode, setpoint and fan speed, behind a
`commands` setting that starts off. A WF-RAC command carries the whole
state, so the node reads the unit and applies the change on top — the
encoder is a port of the same reference the decoder came from, and it
round-trips the unit's own live reading field for field. No operatorId
registration turned out to be needed: the unit this instance talks to
accepts an anonymous command, which is what the reference Node-RED node
does as well
- [x] Node lifecycle as a protocol (`start`/`stop`/`report_health` on `Node`),
replacing the controller's per-type isinstance chains — the same hooks a
connector implements, validated on the built-in nodes first