Skip to content

Commit 7d54e75

Browse files
committed
Update Bosch RBSH-RTH0-ZB-EU quirk
1 parent 500e74e commit 7d54e75

File tree

1 file changed

+47
-25
lines changed

1 file changed

+47
-25
lines changed

zhaquirks/bosch/rbsh_rth0_zb_eu.py

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@
22

33
from zigpy.quirks import CustomCluster
44
from zigpy.quirks.v2 import QuirkBuilder
5-
from zigpy.quirks.v2.homeassistant import EntityPlatform, EntityType
5+
from zigpy.quirks.v2.homeassistant import EntityType, PERCENTAGE
66
import zigpy.types as t
77
from zigpy.zcl.clusters.hvac import (
8-
ControlSequenceOfOperation,
98
Thermostat,
109
UserInterface,
10+
TemperatureDisplayMode,
1111
)
12+
from zigpy.quirks.v2.homeassistant.sensor import SensorStateClass
1213
from zigpy.zcl.foundation import ZCLAttributeDef
1314

1415
"""Bosch specific thermostat attribute ids."""
1516

1617
# Mode of operation with values BoschOperatingMode.
1718
OPERATING_MODE_ATTR_ID = 0x4007
1819

20+
# Valve duty cycle: 0% - 100%
21+
VALVE_DUTY_CYCLE_ATTR_ID = 0x4020
22+
1923
# Window open switch (changes to a lower target temperature when on).
2024
WINDOW_OPEN_ATTR_ID = 0x4042
2125

@@ -30,12 +34,9 @@
3034
# Display brightness (0 - 10).
3135
SCREEN_BRIGHTNESS_ATTR_ID = 0x403B
3236

33-
# Control sequence of operation (heating/cooling)
34-
CTRL_SEQUENCE_OF_OPERATION_ID = Thermostat.AttributeDefs.ctrl_sequence_of_oper.id
35-
3637

3738
class BoschOperatingMode(t.enum8):
38-
"""Bosh operating mode attribute values."""
39+
"""Bosch operating mode attribute values."""
3940

4041
Schedule = 0x00
4142
Manual = 0x01
@@ -49,16 +50,15 @@ class State(t.enum8):
4950
On = 0x01
5051

5152

52-
class BoschControlSequenceOfOperation(t.enum8):
53-
"""Supported ControlSequenceOfOperation modes."""
54-
55-
Cooling = ControlSequenceOfOperation.Cooling_Only
56-
Heating = ControlSequenceOfOperation.Heating_Only
57-
58-
5953
class BoschThermostatCluster(CustomCluster, Thermostat):
6054
"""Bosch thermostat cluster."""
6155

56+
# Works around an issue where ZHA thinks "Heating_Only" can't be changed
57+
# 0x06 is "centralite specific", but works perfectly for this thermostat as well
58+
_CONSTANT_ATTRIBUTES = {
59+
Thermostat.AttributeDefs.ctrl_sequence_of_oper.id: 0x06
60+
}
61+
6262
class AttributeDefs(Thermostat.AttributeDefs):
6363
"""Bosch thermostat manufacturer specific attributes."""
6464

@@ -68,6 +68,13 @@ class AttributeDefs(Thermostat.AttributeDefs):
6868
is_manufacturer_specific=True,
6969
)
7070

71+
valve_duty_cycle = ZCLAttributeDef(
72+
id=VALVE_DUTY_CYCLE_ATTR_ID,
73+
# Values range from 0-100
74+
type=t.uint8_t,
75+
is_manufacturer_specific=True,
76+
)
77+
7178
window_open = ZCLAttributeDef(
7279
id=WINDOW_OPEN_ATTR_ID,
7380
type=State,
@@ -80,6 +87,12 @@ class AttributeDefs(Thermostat.AttributeDefs):
8087
is_manufacturer_specific=True,
8188
)
8289

90+
temperature_display_mode = ZCLAttributeDef(
91+
id=0x0000,
92+
type=TemperatureDisplayMode,
93+
access="rw",
94+
)
95+
8396

8497
class BoschUserInterfaceCluster(CustomCluster, UserInterface):
8598
"""Bosch UserInterface cluster."""
@@ -107,17 +120,34 @@ class AttributeDefs(UserInterface.AttributeDefs):
107120
.applies_to("Bosch", "RBSH-RTH0-BAT-ZB-EU")
108121
.replaces(BoschThermostatCluster)
109122
.replaces(BoschUserInterfaceCluster)
110-
# Operating mode - read-only: controlled automatically through Thermostat.system_mode (HAVC mode).
123+
# Valve duty cycle, PWM controlled.
124+
.sensor(
125+
BoschThermostatCluster.AttributeDefs.valve_duty_cycle.name,
126+
BoschThermostatCluster.cluster_id,
127+
state_class=SensorStateClass.MEASUREMENT,
128+
unit=PERCENTAGE,
129+
translation_key="valve_duty_cycle",
130+
fallback_name="Valve duty cycle",
131+
)
132+
# Operating mode - On/Pause automatically from HVAC mode, Schedule/Manual configured here.
111133
.enum(
112134
BoschThermostatCluster.AttributeDefs.operating_mode.name,
113135
BoschOperatingMode,
114136
BoschThermostatCluster.cluster_id,
115-
entity_platform=EntityPlatform.SENSOR,
116-
entity_type=EntityType.DIAGNOSTIC,
137+
entity_type=EntityType.CONFIG,
117138
translation_key="operating_mode",
118139
fallback_name="Operating mode",
119140
)
120-
# Fast heating/boost.
141+
# Temperature display type.
142+
.enum(
143+
BoschUserInterfaceCluster.AttributeDefs.temperature_display_mode.name,
144+
TemperatureDisplayMode,
145+
BoschUserInterfaceCluster.cluster_id,
146+
entity_type=EntityType.CONFIG,
147+
translation_key="temperature_display_mode",
148+
fallback_name="Temperature display mode",
149+
)
150+
# Fast heating/boost - Only works with Heater type: Radiator.
121151
.switch(
122152
BoschThermostatCluster.AttributeDefs.boost_heating.name,
123153
BoschThermostatCluster.cluster_id,
@@ -151,13 +181,5 @@ class AttributeDefs(UserInterface.AttributeDefs):
151181
translation_key="display_brightness",
152182
fallback_name="Display brightness",
153183
)
154-
# Heating vs Cooling.
155-
.enum(
156-
Thermostat.AttributeDefs.ctrl_sequence_of_oper.name,
157-
BoschControlSequenceOfOperation,
158-
BoschThermostatCluster.cluster_id,
159-
translation_key="ctrl_sequence_of_oper",
160-
fallback_name="Control sequence",
161-
)
162184
.add_to_registry()
163185
)

0 commit comments

Comments
 (0)