Skip to content

Commit b649a86

Browse files
committed
Refresh README entities inventory and update credits
1 parent d01e727 commit b649a86

1 file changed

Lines changed: 138 additions & 60 deletions

File tree

README.md

Lines changed: 138 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@ A fork of [@pszafer's bosch-thermostat integration](https://github.com/bosch-the
44

55
---
66

7-
> ## 🧪 v1.0.0 is out — testers wanted!
7+
> ## v1.3.1 current status
88
>
9-
> This release overhauls the cloud path: **bulk polling** (one poll = a few requests instead of ~190),
10-
> **gateway auto-discovery** in setup, **native boost** (real device boost with server-side countdown —
11-
> no more workaround), plus away mode, extra hot water, and thermal-disinfect controls.
9+
> The integration has moved well beyond the initial v1.0.0 rollout.
10+
> Current POINTTAPI behavior includes native boost support, bulk polling with fallback,
11+
> gateway auto-discovery, richer diagnostics, and broader dynamic entity discovery
12+
> (multi-zone schedule entities, thermostat-valve entities, optional open-window and
13+
> energy surfaces when advertised by the appliance).
1214
>
13-
> It's verified against my own CT200, but yours may differ (firmware, zones, solar, DHW type).
14-
> If you run an EasyControl, **please try it and tell me what you find** — both successes and breakage:
15+
> If you find a regression or device-specific quirk, please report it with diagnostics:
1516
>
16-
> - 🐛 **Something broke?**[Open a bug report](https://github.com/CaseyRo/ha_bosch/issues/new?template=bug_report.yml) — the form walks you through exactly what I need (diagnostics file, debug log, your setup)
17-
> -**Works fine?**[Say so in the v1.0.0 feedback thread (#9)](https://github.com/CaseyRo/ha_bosch/issues/9) — device model, firmware, and which features you used is enough
18-
> - 📋 **How to capture the right info** → see [Testing & reporting](#testing--reporting) below
19-
>
20-
> Every report makes the next release better. Thank you! 🙏
17+
> - 🐛 **Bug report**[Open an issue](https://github.com/CaseyRo/ha_bosch/issues/new?template=bug_report.yml)
18+
> - 📋 **Capture details first** → see [Testing & reporting](#testing--reporting) below
2119
2220
---
2321

@@ -64,54 +62,133 @@ Paste the whole callback URL **or** just the `code` value into the final step
6462

6563
Token refresh is automatic. If your session expires, HA triggers a re-authentication flow — no need to delete and re-add the integration.
6664

67-
### Entities
68-
69-
| Platform | Entity | Notes |
70-
|---|---|---|
71-
| Climate | Zone zn1 | Room temp, heating setpoint, Heat/Off mode |
72-
| Water heater | DHW1 | Hot water temp, target temp, operation mode (Auto/Off/On) |
73-
| **Switch** | Boost | One-tap boost — uses the device's **native boost** when the cloud allows it (server-side countdown, survives HA restarts), with an automatic manual-mode fallback |
74-
| Switch | Auto firmware update | Enable/disable automatic firmware updates |
75-
| Switch | Notification light | Gateway LED on/off |
76-
| Switch | Thermal disinfect | DHW legionella protection cycle |
77-
| Switch | Away mode | Account-wide away mode on/off |
78-
| Switch | Extra hot water | One-shot DHW boost run |
79-
| **Number** | Boost temperature | Target temp during boost (5–30 °C) |
80-
| Number | Boost duration | How long boost runs (0.5–24 h) |
81-
| Number | Max supply temperature | Upper heating circuit limit (25–90 °C) |
82-
| Number | Min supply temperature | Lower heating circuit limit (10–90 °C) |
83-
| Number | Night setback threshold | Outdoor temp below which night setback activates (5–30 °C) |
84-
| Number | Summer/winter threshold | Outdoor temp for summer/winter switchover (10–30 °C) |
85-
| Number | Room influence | How much room sensor affects supply temp (0–3) |
86-
| Number | Temperature calibration offset | Room sensor offset correction (-5–5 °C) |
87-
| Number | Annual gas goal | Energy target for the year (kWh) |
88-
| Number | Extra hot water duration | Length of an extra-DHW run (15–2880 min) |
89-
| Number | Thermal disinfect time | Minute-of-day the disinfect cycle starts (0–1439) |
90-
| **Select** | Zone mode | `clock` (scheduled) / `manual` |
91-
| Select | PIR sensitivity | Motion sensor sensitivity: `high` / `medium` / `low` |
92-
| Select | Summer/winter mode | `automatic` (by threshold) / `manual` |
93-
| Select | Night switch mode | `automatic` / `reduced` |
94-
| Select | Thermal disinfect weekday | Day of week for the disinfect cycle |
95-
| **Sensor** | Outdoor temperature | Outside temp from device |
96-
| Sensor | Indoor humidity | Room humidity (%) |
97-
| Sensor | Valve position | Current valve opening (%) |
98-
| Sensor | System pressure | Heating system pressure (bar) |
99-
| Sensor | Gas heating today | CH gas usage today (kWh) |
100-
| Sensor | Gas hot water today | DHW gas usage today (kWh) |
101-
| Sensor | Gas total today | Total gas usage today (kWh) |
102-
| Sensor | WiFi signal strength | Device WiFi RSSI (dBm) |
103-
| Sensor | Firmware update state | Whether an update is available |
104-
| Sensor | Boost remaining time | Minutes left on active boost |
105-
| Sensor | Blocking error | Active blocking fault code |
106-
| Sensor | Locking error | Active locking fault code |
107-
| Sensor | Maintenance request | Maintenance due flag |
108-
| Sensor | Display code | Current display code |
109-
| Sensor | Cause code | Current cause code |
110-
| Sensor | Firmware version | Installed firmware version string |
111-
| Sensor | Supply temp setpoint | Current calculated supply temp target (°C) |
112-
| Sensor | Boiler power | Current boiler power output (%) |
113-
| Sensor | Notifications | Active cloud alert count, raw entries as attributes |
114-
| Sensor | Thermal disinfect last result | Outcome of the last disinfect cycle |
65+
### Entities (POINTTAPI, v1.3.1)
66+
67+
Entity creation is partly dynamic. What you see depends on what your appliance advertises in its resource references.
68+
69+
#### Chaudiere
70+
71+
| Platform | Entity | Translation key | Resource path | Scope |
72+
|---|---|---|---|---|
73+
| Sensor | System pressure | system_pressure | /system/appliance/systemPressure | 1 per boiler |
74+
| Sensor | Blocking error | blocking_error | /system/appliance/blockingError | 1 per boiler |
75+
| Sensor | Locking error | locking_error | /system/appliance/lockingError | 1 per boiler |
76+
| Sensor | Maintenance request | maintenance_request | /system/appliance/maintenanceRequest | 1 per boiler |
77+
| Sensor | Display code | display_code | /system/appliance/displayCode | 1 per boiler |
78+
| Sensor | Cause code | cause_code | /system/appliance/causeCode | 1 per boiler |
79+
| Sensor | Appliance status | appliance_status | /system/appliance/status (computed from appliance codes) | 1 per boiler |
80+
| Sensor | Actual supply temperature | actual_supply_temperature | /heatSources/actualSupplyTemperature | 1 per boiler |
81+
| Sensor | Return temperature | return_temperature | /heatSources/returnTemperature | 1 per boiler |
82+
| Sensor | Actual modulation | actual_modulation | /heatSources/actualModulation | 1 per boiler |
83+
| Sensor | Heat demand type | heat_demand_type | /heatSources/flameIndication | 1 per boiler |
84+
| Sensor | Boiler ignition starts | boiler_ignition_starts | /heatSources/numberOfStarts | 1 per boiler |
85+
| Binary sensor | Burner flame | burner_flame | /heatSources/flameIndication (resolved via actualModulation) | 1 per boiler |
86+
| Binary sensor | Refill needed | refill_needed | /heatSources/refillNeeded | 1 per boiler |
87+
88+
#### Thermostat (gateway EasyControl)
89+
90+
| Platform | Entity | Translation key | Resource path | Scope |
91+
|---|---|---|---|---|
92+
| Switch | Auto firmware update | auto_firmware_update | /gateway/update/enabled | 1 per gateway |
93+
| Switch | Notification light | notification_light | /gateway/notificationLight/enabled | 1 per gateway |
94+
| Switch | Away mode | away_mode | /system/awayMode/enabled | 1 per gateway |
95+
| Select | PIR sensitivity | pir_sensitivity | /gateway/pirSensitivity | 1 per gateway |
96+
| Sensor | WiFi RSSI | wifi_rssi | /gateway/wifi/rssi | 1 per gateway |
97+
| Sensor | WiFi firmware version | wifi_firmware_version | /gateway/wifi/versionFirmware | 1 per gateway |
98+
| Sensor | Gateway firmware version | firmware_version | /gateway/versionFirmware | 1 per gateway |
99+
| Sensor | Last update check | last_update_check | /gateway/update/lastCheck | 1 per gateway |
100+
| Sensor | Last update applied | last_update_applied | /gateway/update/lastUpdate | 1 per gateway |
101+
| Sensor | Notifications count (+ raw notifications attribute) | notifications | /notifications | 1 per gateway, only if path exists |
102+
| Sensor | Zigbee firmware version | zigbee_firmware_version | /gateway/zigbee/versionFirmware | 1 per gateway, optional |
103+
| Update | Firmware update (read-only) | firmware_update | /gateway/versionFirmware (latest inferred from /gateway/update/state) | 1 per gateway |
104+
105+
#### Zone (heating zone zn1, zn2, ...)
106+
107+
| Platform | Entity | Translation key | Resource path | Scope |
108+
|---|---|---|---|---|
109+
| Climate | Zone climate (Auto/Heat/Off + hvac_action) | n/a (Climate entity) | /zones/{zid}/temperatureActual, /zones/{zid}/temperatureHeatingSetpoint, /zones/{zid}/manualTemperatureHeating, /zones/{zid}/userMode, /zones/{zid}/status | 1 per discovered zone |
110+
| Switch | Boost | boost | /heatingCircuits/hc1/boostShortcut or /heatingCircuits/hc1/boostMode (fallback writes zone manual mode) | 1 entity |
111+
| Switch | Open window detection enable | open_window_detection | /zones/{zid}/openWindowDetection/enabled | Dynamic, per zone when reference exists |
112+
| Number | Boost temperature | boost_temperature | /heatingCircuits/hc1/boostTemperature | 1 entity |
113+
| Number | Boost duration | boost_duration | /heatingCircuits/hc1/boostDuration | 1 entity |
114+
| Number | Max supply temperature | max_supply_temperature | /heatingCircuits/hc1/maxSupply | 1 entity |
115+
| Number | Min supply temperature | min_supply_temperature | /heatingCircuits/hc1/minSupply | 1 entity |
116+
| Number | Night setback threshold | night_setback_threshold | /heatingCircuits/hc1/nightThreshold | 1 entity |
117+
| Number | Summer/winter threshold | summer_winter_threshold | /heatingCircuits/hc1/suWiThreshold | 1 entity |
118+
| Number | Room influence | room_influence | /heatingCircuits/hc1/roomInfluence | 1 entity |
119+
| Number | Temperature calibration offset | temperature_calibration_offset | /system/sensors/temperatures/offset | 1 entity |
120+
| Select | Zone mode | zone_mode | /zones/zn1/userMode | Static select for zn1 |
121+
| Select | Summer/winter mode | summer_winter_mode | /heatingCircuits/hc1/suWiSwitchMode | 1 entity |
122+
| Select | Night switch mode | night_switch_mode | /heatingCircuits/hc1/nightSwitchMode | 1 entity |
123+
| Select | Assigned program select | assigned_program_select | /zones/{zid}/clockProgram | Dynamic, per discovered zone |
124+
| Sensor | Outdoor temperature | outdoor_temperature | /system/sensors/temperatures/outdoor_t1 | 1 entity (attached to zone device) |
125+
| Sensor | Indoor humidity | indoor_humidity | /system/sensors/humidity/indoor_h1 | 1 entity (attached to zone device) |
126+
| Sensor | Boost remaining time | boost_remaining_time | /heatingCircuits/hc1/boostRemainingTime (or synthetic fallback session) | 1 entity |
127+
| Sensor | Supply temperature setpoint | supply_temp_setpoint | /heatingCircuits/hc1/supplyTemperatureSetpoint | 1 entity |
128+
| Sensor | Boiler power setpoint | boiler_power | /heatingCircuits/hc1/powerSetpoint | 1 entity |
129+
| Sensor | Zone valve position | valve_position | /zones/{zid}/actualValvePosition | Dynamic, per zone when reference exists |
130+
| Sensor | Assigned program name | assigned_program | /zones/{zid}/assignedProgramName (computed from /programs/pgN/name) | Dynamic, per discovered zone |
131+
| Sensor | Optimum start state | optimum_start_state | /zones/{zid}/optimumStartState | Dynamic, per zone when reference exists |
132+
| Binary sensor | Open window detected | open_window_detected | /zones/{zid}/openWindowDetection/status | Dynamic, per zone when reference exists |
133+
134+
#### Vanne thermostatique
135+
136+
| Platform | Entity | Translation key | Resource path | Scope |
137+
|---|---|---|---|---|
138+
| Switch | Child lock | thermostat_valve_child_lock | /devices/list/thermostat_valve/{id}/childLock... or /devices/device{id}/.../childLock... | Dynamic, per discovered valve |
139+
| Number | Temperature offset | thermostat_valve_temperature_offset | /devices/.../etrv/offset | Dynamic, per discovered valve |
140+
| Sensor | Signal strength | thermostat_valve_signal_strength | /devices/list/thermostat_valve/{id}/signal | Dynamic, per discovered valve |
141+
| Sensor | Battery | thermostat_valve_battery | /devices/list/thermostat_valve/{id}/battery | Dynamic, per discovered valve |
142+
| Sensor | Linked zone | thermostat_valve_zone | /devices/list/thermostat_valve/{id}/zone | Dynamic, per discovered valve |
143+
| Sensor | Protocol | thermostat_valve_protocol | /devices/list/thermostat_valve/{id}/protocol | Dynamic, per discovered valve |
144+
| Sensor | Valve position | thermostat_valve_valve_position | /devices/list/thermostat_valve/{id}/valvePosition or /devices/device{id}/.../etrv/valvePosition | Dynamic, per discovered valve |
145+
| Sensor | Actual temperature | thermostat_valve_temperature_actual | /devices/list/thermostat_valve/{id}/temperatureActual or /devices/device{id}/.../etrv/temperatureActual | Dynamic, per discovered valve |
146+
| Binary sensor | Warning state | thermostat_valve_warning | /devices/list/thermostat_valve/{id}/warning | Dynamic, per discovered valve |
147+
148+
#### Efficacite energetique
149+
150+
| Platform | Entity | Translation key | Resource path | Scope |
151+
|---|---|---|---|---|
152+
| Number | Annual gas goal | annual_gas_goal | /energy/gas/annualGoal | Dynamic, if path exists |
153+
| Number | Annual electricity goal | annual_electricity_goal | /energy/electricity/annualGoal | Dynamic, if path exists |
154+
| Sensor | Gas heating today | gas_heating_today | /energy/historyHourly (aggregated to daily) | 1 entity |
155+
| Sensor | Gas hot-water today | gas_hot_water_today | /energy/historyHourly (aggregated to daily) | 1 entity |
156+
| Sensor | Gas total today | gas_total_today | /energy/historyHourly (aggregated to daily) | 1 entity |
157+
| Sensor | Gas heating hourly | gas_heating_hourly | /energy/historyHourly (current-hour entry) | 1 entity |
158+
| Sensor | Gas hot-water hourly | gas_hot_water_hourly | /energy/historyHourly (current-hour entry) | 1 entity |
159+
| Sensor | Gas total hourly | gas_total_hourly | /energy/historyHourly (current-hour entry) | 1 entity |
160+
| Sensor | Electricity day average | electricity_day_average | /energy/electricity/dayAverage | Dynamic, only if path available |
161+
| Sensor | Electricity month average | electricity_month_average | /energy/electricity/monthAverage | Dynamic, only if path available |
162+
| Sensor | Energy efficiency score | energy_efficiency | /gateway/ui/eco | Dynamic, only if /gateway/ui references include /gateway/ui/eco |
163+
164+
#### Eau chaude sanitaire (DHW)
165+
166+
| Platform | Entity | Translation key | Resource path | Scope |
167+
|---|---|---|---|---|
168+
| Water heater | Hot water tank (temperature + operation mode) | n/a (WaterHeater entity) | /dhwCircuits/dhw1/actualTemp, /dhwCircuits/dhw1/temperatureLevels/high, /dhwCircuits/dhw1/operationMode | 1 per gateway |
169+
| Switch | Thermal disinfect | thermal_disinfect | /dhwCircuits/dhw1/thermalDisinfect/state | 1 entity |
170+
| Switch | Extra hot water | extra_hot_water | /dhwCircuits/dhw1/extraDhw | 1 entity |
171+
| Number | Extra hot water duration | extra_hot_water_duration | /dhwCircuits/dhw1/extraDhwDuration | 1 entity |
172+
| Number | Thermal disinfect time | thermal_disinfect_time | /dhwCircuits/dhw1/thermalDisinfect/time | 1 entity |
173+
| Select | Thermal disinfect weekday | thermal_disinfect_weekday | /dhwCircuits/dhw1/thermalDisinfect/weekDay | 1 entity |
174+
| Sensor | DHW actual temperature | dhw_actual_temperature | /dhwCircuits/dhw1/actualTemp | 1 entity |
175+
| Sensor | Thermal disinfect last result | thermal_disinfect_last_result | /dhwCircuits/dhw1/thermalDisinfect/lastResult | 1 entity |
176+
| Binary sensor | DHW heating | dhw_heating | /dhwCircuits/dhw1/state | 1 entity |
177+
178+
#### Solaire (optionnel)
179+
180+
| Platform | Entity | Translation key | Resource path | Scope |
181+
|---|---|---|---|---|
182+
| Sensor | Collector temperature | collector_temperature | /solarCircuits/sc1/collectorTemperature | Optional, 1 entity |
183+
| Sensor | Storage temperature | storage_temperature | /solarCircuits/sc1/dhwTankBottomTemperature | Optional, 1 entity |
184+
| Sensor | Pump modulation | pump_modulation | /solarCircuits/sc1/pumpModulation | Optional, 1 entity |
185+
| Sensor | Total solar gain | total_gain | /solarCircuits/sc1/totalSolarGain | Optional, 1 entity |
186+
187+
Notes:
188+
- Dynamic entities are created only when the corresponding API paths are present and, where enforced, marked as available.
189+
- Zone-scoped dynamic entities rely on zone references (for example openWindowDetection, actualValvePosition, optimumStartState).
190+
- Thermostat-valve entities are discovered from /devices/list thermostat_valve rows and compatible /devices/deviceN trees; count and labels vary by installation.
191+
- Solar entities are conditionally suppressed when the first refresh has no usable /solarCircuits/sc1 data; stale solar registry entries are removed.
115192

116193
### Under the hood
117194
- **Bulk polling** — steady-state polls batch all discovered resource reads (188 paths on a typical CT200) into a handful of bulk POSTs against `pointt-api`'s bulk endpoint instead of one GET per path, with automatic per-cycle fallback to sequential GETs if the bulk route ever misbehaves (endpoint format credit: [homecom_alt](https://github.com/serbanb11/homecom_alt), see `docs/pointtapi-api.md`)
@@ -224,7 +301,7 @@ POINTTAPI bulk fetch failed (...); falling back ... ← bulk degraded (still
224301
- When it started (after which version / change)
225302

226303
[Open a bug report](https://github.com/CaseyRo/ha_bosch/issues/new?template=bug_report.yml) — the
227-
form has fields for all of the above. **Positive reports are just as valuable**: "v1.0.0 works on my
304+
form has fields for all of the above. **Positive reports are just as valuable**: "v1.3.1 works on my
228305
CT200 with 2 zones, native boost picked the boostShortcut route" tells me the probe ladder
229306
generalizes beyond my own device.
230307

@@ -242,6 +319,7 @@ If this integration is useful to you, consider buying me a coffee:
242319
All credit for the original integration goes to [@pszafer](https://github.com/pszafer) and the contributors to the upstream projects — see the attribution note at the top of this README. This fork adds only the POINTTAPI cloud path; everything else is their work.
243320

244321
- POINTTAPI path and EasyControl cloud support by [@CaseyRo](https://github.com/CaseyRo)
322+
- Major recent POINTTAPI improvements (last 2 weeks) by [@jfhautenauven](https://github.com/jfhautenauven) ([@LaPoutreDeBamako](https://github.com/LaPoutreDeBamako)): thermostat-valve support (actual temperature, child lock, offset), writable per-zone assigned-program entities, reference-driven `/programs` and `/devices` discovery, multi-language localization polish, solar-presence robustness, and expanded unit tests.
245323

246324
## Acknowledgements
247325

0 commit comments

Comments
 (0)