Add a flow5d type for the Autoterm Flow 5D heater #140
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/yaml-flow5d"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
YN-21. Stacks on #139 (YN-20), which stacks on #137 (YN-19), so the diff also shows their commits until those merge.
New output type
flow5d:rxandtxpins,label, optionaldiagnostics(default false) andbinds. It must be the endpoint at index 0 and is a block that occupies 0 to 25 (itsspanis 26, so the next endpoint without anindextakes 26). It registers the same children at the same indices with the same labels as src/node_heater/main.cpp: heater 0, exchanger 1, supply 2, second coolant 3, coolant return 4, minutes since start 5, blower flag 6, run time 7, preheater wait 9, warm-up wait 10, coolant 23, and withdiagnostics: truethe eight diagnostics 17 to 22, 24 and 25 (marked withsetDiagnostic()). Their indices stay reserved when diagnostics are off, and 8 and 11 to 16 stay free. Another endpoint on a reserved index fails naming the child ("3 is already used by the 'Coolant temperature 2' child of the flow5d"), and a registered child's label is reserved too. XIAO boards only; the LOLIN32 is rejected, and the schema refuses it too.The generator emits what main.cpp has: the shared
PreferencesStore, the threeSettingEndpoints (keyss7,s9,s10),autoterm::Flow5D, thestatusOf/readinghelpers, the readouts and the twoFlagInputs,Serial1.begin(2400, ...)andflow5d.begin()in setup, and theSerial1feed plusflow5d.loopin loop.HeaterEndpointtakesflow5das its device, and its measured reading iscan::SensorScalar{}(Unknown) until the measure bind exists. The blower motor, climate sensor, water heating and arbiter are not part of the type. The blower output and link children can be bind sources by label or index.Runtime: two small touches so binds can target a heater.
strategyForgainsEndpointType::Heater, andHeaterEndpoint::isOn()reports whether heat is wanted, which is whatmode()reports as Heat, so atogglebind stops a heater it started as well as starting it. The endpoint takes nodisabled_modes; binds keep theirs.Schema regenerated (
rx/txenums per board), README gets a Flow 5D section with the child table, and a newheater.yamlfixture compiles the block with diagnostics and a following bind.Tested: Python 113 (was 100) and native 639, none skipped locally. Native tests cover a follow bind starting and stopping the device, and a toggle bind starting it then stopping it; removing the
isOn()override fails the toggle test. Hiding the diagnostics wrongly fails two Python tests. All fixtures andpio runbuild.Claude referenced this pull request2026-10-17 09:15:40 +00:00
22aab8977227d24bd9bb