POINTTAPI: optional entity discovery, switch value fixes, and translation updates - #18
Conversation
Use live solar resource availability instead of root references when deciding whether to create POINTTAPI solar entities. Add regression coverage for unavailable resources and valid zero values.
…bility Fix conditional Solar entity creation
# Conflicts: # custom_components/bosch/sensor/__init__.py
|
Update: we have added boiler appliance-code interpretation in this PR. What was added:
Example now covered explicitly: |
|
Follow-up update in this PR:
Result: energy efficiency now appears under the correct device in Home Assistant. |
|
Follow-up UX tweak included in this PR:
Why: improve visual discoverability/readability in the entity list and device pages without changing entity IDs or behavior. Validation: Ruff check passes on |
|
Follow-up UX cleanup for POINTTAPI zone climate entities:
Behavior is preserved (no functional regression):
So this is a UI simplification only, with the same underlying POINTTAPI semantics. |
|
Follow-up fix for burner flame state on POINTTAPI:
Why: real dumps show Note/caveat:
|
|
Update implemented and pushed (commit c655ac1): added the new boiler sensor Heat Demand Type based on /heatSources/flameIndication. Details: New translated sensor: heat_demand_type Dump verification: Observed raw values: off (most common), ch, dhw Local validation: pytest unittests/test_pointtapi_new_entities.py: 70 passed Heat pump (PAC) caveat: The binary flame sensor intentionally remains based on actualModulation > 0 to avoid false unknown states depending on heat pump variants; this new Heat Demand Type sensor complements the business information without changing this robustness logic. |
- Add requested Bosch/Buderus display+code combinations to appliance status mapping - Add new state keys for low fan speed, gas-shutdown flame detection, safety-time faults, and KIM recognition - Extend base strings and all locale translations (en/de/fr/it/nl/pl/sk) - Expand pair-coverage unit test with newly requested combinations
|
Implemented and pushed in commit 02c8f7b. This update extends the POINTTAPI appliance-status mapping with the additional display/code combinations you requested, including:
I also added the new state keys needed for these mappings:
Localization is now present in all supported locales (en, de, fr, it, nl, pl, sk), and the pair-coverage test was expanded to lock these combinations in. Validation:
Note on 8Y/232: the same pair is used for multiple real-world textual interpretations. With the current payload fields, there is no reliable discriminator, so we keep one stable mapped status for that pair. |
- Add dynamic select entities for /zones/{id}/clockProgram
- Build select options from decoded /programs names
- Map selected display label back to numeric clockProgram id for writes
- Add localization key for assigned program select in all supported locales
- Extend tests for discovery, decoded display value, and write path
|
Implemented and pushed in commit ceca83c. This update adds writable, per-zone program selects for POINTTAPI using each zone’s What is included:
Validation:
Safety note:
|
- Add dynamic per-zone sensor for /zones/{id}/optimumStartState
- Keep raw state value (no interpretation mapping yet)
- Discover sensors from zone references to avoid ghost entities
- Add translation key for all supported locales (en/de/fr/it/nl/pl/sk)
- Add tests for discovery and raw-value passthrough
|
Implemented and pushed in commit 1cdf109. This follow-up adds a new POINTTAPI per-zone diagnostic sensor for optimum-start state:
Localization:
Validation:
|
|
Hey @CaseyRo ! I had a little bit of motivation left, so I went ahead and pushed a few more improvements to PR #18 😄 It now also includes some additional appliance status mappings, the heat demand type sensor, a couple of UX/icon tweaks, per-zone program selection, and the optimum start state sensor. As a bonus : found internal documentation about error codes for Bosch / Buderus error codes so I added an interpreter of the faults based on the descriptions found in the manufacturers documentation. Nothing dramatic, just kept going while I was in the code 😅 PR: [#18](https://github.com/CaseyRo/ha_bosch/pull/18?utm_source=chatgpt.com) |
Move assigned_program_select out of switch.open_window_detection and into entity.select for en/de/fr/it/nl/pl/sk to satisfy hassfest translation schema.
|
Quick update: I fixed the hassfest translation schema failure. What was wrong:
What I changed:
Validation:
This should unblock hassfest for PR #18. |
Two review findings on the new appliance-status and electricity metadata. The cause-only fallback kept the first-seen mapping when several display codes share a cause. Nine causes have display variants that disagree, and two of them turn a normal state into a fault: cause 273 is a 24h safety shutdown under display 3F but flame monitoring under 0U, and 280 is a restart-time fault under 7L but a fan start under 0U. 0U codes 270-274, 280 and 281 are the normal ignition sequence, so a boiler that is merely starting up with no display code would report a safety shutdown. Build the fallback only from causes whose variants agree; ambiguous ones read unknown and keep their raw codes on the entity attributes. Also revert the electricity dayAverage/monthAverage promotion to device_class=ENERGY + state_class=TOTAL + last_reset. The paths are named average, and an average that falls as well as rises is not a TOTAL: HA reads each decrease as a meter reset and the sensor becomes selectable as an Energy Dashboard source. Wrong long-term statistics are painful to unwind, so these stay plain sensors until someone watches the value across a full day on real hardware.
|
@jfhautenauven "a little bit of motivation left" produced 2,100 lines, an error-code interpreter sourced from manufacturer docs, and a hassfest fix you caught yourself. That's a strange definition of holiday, and I'm not complaining 😅 Reviewed the whole thing. CI green, ruff clean, 365 tests passing. The valve work lands especially well — see below. I pushed one commit (c23f4fb) with two changes, both defensive rather than corrections of your judgement. 1. The cause-only fallback could raise a fault for a healthy boiler.
I changed it to only build the fallback from causes whose variants agree — ambiguous ones read 2. Reverted the electricity average metadata, and this one is a genuine question for you. You promoted The tests assert the metadata we set, so they can't settle it. Does that number climb through the day and drop at midnight, or does it wander up and down? One glance at your history graph decides it, and I'll put the metadata straight back. What ships when Stable 1.3.0 goes out today with the #17 content — @LukyHurdy1 confirmed it on his 12-zone Czech setup this morning: battery This PR then opens 1.4.0-beta.1 on its own line. Same rule as last time: verified work ships, unverified work carries a version number that admits it. And your zone-name resolution is validated by that very screenshot — his valve currently reads zone Go and enjoy the beach properly. 🏖️ |
|
Thanks Casey, I fully accept the safeguard on ambiguous cause-only fallback. Preventing false fault alarms is the right default until we have definitive mapping evidence. I also agree on publishing this as a beta so I can validate behavior end-to-end on my setup before we promote further. For the electricity values: I do want those day/month averages visible to users, but strictly as informational sensors. We should keep them implemented in a way that does not participate in long-term statistics or Energy Dashboard calculations unless we can confirm they are truly cumulative/monotonic in real hardware observations. |
|
Follow-up pushed. We accept Casey’s remarks; they are fully justified and highlighted something I had completely overlooked. I kept Casey’s defensive approach for the electricity averages (informational only, no statistics metadata) because he is right on the HA long-term statistics risk. I only reintroduced a small UX improvement: the kWh unit of measurement, so the values remain clear to users while still staying out of Energy Dashboard/statistics behavior. |
|
@CaseyRo : see the above :) ready for a new beta :) |
|
@CaseyRo : hey :) don't forget about this pull request :) |
|
Thanks for the reminder! I'll review the pull request and provide my feedback shortly. Appreciate your efforts on this!
casey.berlin ( https://casey.berlin ) · ***@***.***
Journal ( https://writings.casey.berlin ) · LinkedIn ( https://linkedin.com/in/keesromkes )
Sent via Superhuman ( https://superhuman.com/refer/q095l8q4?utm_medium=signature&utm_source=product )
…On Mon, Aug 17, 2026 at 13:31:20, LaPoutreDeBamako < ***@***.*** > wrote:
*jfhautenauven* left a comment (CaseyRo/ ha_bosch#18) (
#18 (comment) )
@ CaseyRo ( https://github.com/CaseyRo ) : hey :) don't forget about this
pull request :)
—
Reply to this email directly, view it on GitHub (
#18?email_source=notifications&email_token=ABQSZ2SIR2EMAIKMSZJWP6T5KLUIPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMZRGU2DKOBXGQYKM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#issuecomment-5315458740
) , or unsubscribe (
https://github.com/notifications/unsubscribe-auth/ABQSZ2WDJPDPSDXJQUGDIMT5KLUIPAVCNFSNUABGKJSXA33TNF2G64TZHMYTCNRWGY2DMOBUGY5US43TOVSTWNJRGMYTIMJTGIZTBILWAI
).
You are receiving this because you were mentioned. Message ID: <CaseyRo/ha_bosch/pull/18/c5315458740
@ github. com>
|
… zone program selects Contributed by @jfhautenauven. Conditional entity creation (energy efficiency, return temp, zigbee firmware, electricity annual goal), appliance status sensor backed by a manufacturer display/cause code table, per-zone assigned-program selects and optimum-start sensors, thermal-disinfect switch on/off mapping, and translation updates across all 7 locales.
PR #18 (appliance status, zone program selects, conditional entity discovery) ships on its own line so it can be confirmed on real hardware first. The display+cause status table is transcribed from manufacturer documentation and has not been observed against a live boiler.
|
Merged, and sorry for the four-day silence — you were waiting on me, not the other way round. Shipped as v1.4.0-beta.1. Same Your follow-up on the electricity averages was exactly right — kWh for readability, no I ran one more pass over the diff before merging, hunting complexity rather than bugs, and applied
A dead The rest I wrote up as #19 rather than touching your code further. The one I would actually like Nothing there is urgent and nothing there is a bug. 369 tests green, ruff clean, hassfest and HACS |
|
@jfhautenauven follow-up on the electricity averages — I tried to answer my own question and hit a wall that I think you can clear in about thirty seconds. I went to check my own history for The paths resolve in the reference walk, so they show up in diagnostics, but So: what does your gateway say for those two paths? Settings → Devices & Services → Bosch → ⋮ → Download diagnostics, then search for
One thing this did confirm, and it is yours: the gateway declares I also fixed the doc line that sent me down this path — Unrelated bonus from the same dump: |
|
@CaseyRo : I implemented that for people having hybrid setups. This is for those scenarii that the values become relevant. However, I only have a gas boiler setup at home, so I cannot for sure verify if the values are ramping up correctly for the people that have a hybrid setup (Gas + Electric heat pump assistance) |
|
@CaseyRo : so far so good with the testing of 1.4.0 beta 1 and I don't see any issues, everythings works as intended. I've seen improvements points and taken into account the things you listed in the issue #19. Pull request will follow soon enough. There is something puzzling me still : this is what I see on my main thermostat device (CT200) :
I don't understand what that switch does ... looking at the code, I guess it is something related with boost ... but the labeling, IMHO isn't user friendly at all. Mind taking a look ? :) |

Summary
This PR improves the POINTTAPI experience by exposing only relevant entities, fixing switch state mappings, and completing translation consistency updates.
What changed
sensor.energy_efficiency(/gateway/ui/eco) when referenced by/gateway/ui.sensor.return_temperature.sensor.zigbee_firmware_versionwhen/gateway/zigbee/versionFirmwareexists.number.annual_electricity_goalwhen/energy/electricity/annualGoalexists.number.annual_gas_goalis now also conditional on/energy/gas/annualGoalpresence.okvalue is normalized toOK./zones/zn*/namewhen available.mdi:signal./dhwCircuits/dhw1/thermalDisinfect/statenow useson/off(instead of defaulttrue/false) to correctly reflect UI state.strings.json+ locale files):Effectuée.Tests
unittests/test_pointtapi_new_entities.pyfor:on/off),