19
19
from homeassistant .helpers .entity_platform import AddEntitiesCallback
20
20
from homeassistant .helpers .dispatcher import async_dispatcher_connect
21
21
22
- from .pywallpad .const import (
22
+ from .pywallpad .api . kocom . const import (
23
23
POWER ,
24
24
AWAY_MODE ,
25
25
OP_MODE ,
26
26
FAN_MODE ,
27
27
CURRENT_TEMP ,
28
28
TARGET_TEMP ,
29
29
)
30
- from .pywallpad .enums import OpMode , FanMode
31
- from .pywallpad .packet import KocomPacket , ThermostatPacket , AcPacket
30
+ from .pywallpad .api . kocom . enums import OpMode , FanMode
31
+ from .pywallpad .api . kocom . packet import KocomPacket , ThermostatPacket , AcPacket
32
32
33
33
from .gateway import KocomGateway
34
34
from .entity import KocomEntity
@@ -50,8 +50,6 @@ def async_add_climate(packet: KocomPacket) -> None:
50
50
async_add_entities ([KocomThermostatEntity (gateway , packet )])
51
51
elif isinstance (packet , AcPacket ):
52
52
async_add_entities ([KocomAcEntity (gateway , packet )])
53
- else :
54
- LOGGER .warning (f"Unsupported packet type: { packet } " )
55
53
56
54
for entity in gateway .get_entities (Platform .CLIMATE ):
57
55
async_add_climate (entity )
@@ -62,45 +60,35 @@ def async_add_climate(packet: KocomPacket) -> None:
62
60
63
61
64
62
class KocomThermostatEntity (KocomEntity , ClimateEntity ):
65
- """Representation of a Kocom climate ."""
63
+ """Representation of a Kocom thermostat ."""
66
64
67
65
_enable_turn_on_off_backwards_compatibility = False
68
66
_attr_hvac_modes = [HVACMode .OFF , HVACMode .HEAT ]
69
67
_attr_preset_modes = [PRESET_AWAY , PRESET_NONE ]
70
68
_attr_supported_features = (
71
- ClimateEntityFeature .TARGET_TEMPERATURE |
72
- ClimateEntityFeature .TURN_OFF |
73
- ClimateEntityFeature .TURN_ON |
74
- ClimateEntityFeature .PRESET_MODE
69
+ ClimateEntityFeature .TARGET_TEMPERATURE
70
+ | ClimateEntityFeature .TURN_OFF
71
+ | ClimateEntityFeature .TURN_ON
72
+ | ClimateEntityFeature .PRESET_MODE
75
73
)
76
74
_attr_temperature_unit = UnitOfTemperature .CELSIUS
77
75
_attr_max_temp = 40
78
76
_attr_min_temp = 5
79
77
_attr_target_temperature_step = 1
80
-
81
- def __init__ (
82
- self ,
83
- gateway : KocomGateway ,
84
- packet : KocomPacket ,
85
- ) -> None :
86
- """Initialize the climate."""
78
+
79
+ def __init__ (self , gateway : KocomGateway , packet : KocomPacket ) -> None :
80
+ """Initialize the thermostat."""
87
81
super ().__init__ (gateway , packet )
88
82
89
83
@property
90
84
def hvac_mode (self ) -> HVACMode :
91
- """Return hvac operation ie. heat, cool mode."""
92
- if self .device .state [POWER ]:
93
- return HVACMode .HEAT
94
- else :
95
- return HVACMode .OFF
96
-
85
+ """Return the current HVAC mode."""
86
+ return HVACMode .HEAT if self .device .state [POWER ] else HVACMode .OFF
87
+
97
88
@property
98
89
def preset_mode (self ) -> str :
99
- """Return the current preset mode, e.g., home, away, temp."""
100
- if self .device .state [AWAY_MODE ]:
101
- return PRESET_AWAY
102
- else :
103
- return PRESET_NONE
90
+ """Return the current preset mode."""
91
+ return PRESET_AWAY if self .device .state [AWAY_MODE ] else PRESET_NONE
104
92
105
93
@property
106
94
def current_temperature (self ) -> int :
@@ -109,42 +97,40 @@ def current_temperature(self) -> int:
109
97
110
98
@property
111
99
def target_temperature (self ) -> int :
112
- """Return the temperature we try to reach ."""
100
+ """Return the target temperature ."""
113
101
return self .device .state [TARGET_TEMP ]
114
-
102
+
115
103
async def async_set_hvac_mode (self , hvac_mode : HVACMode ) -> None :
116
- """Set new target hvac mode."""
117
- if hvac_mode == HVACMode .OFF :
118
- power = False
119
- elif hvac_mode == HVACMode .HEAT :
120
- power = True
121
- else :
104
+ """Set the HVAC mode."""
105
+ hvac_to_power = {
106
+ HVACMode .OFF : False ,
107
+ HVACMode .HEAT : True ,
108
+ }
109
+ power = hvac_to_power .get (hvac_mode )
110
+ if power is None :
122
111
raise ValueError (f"Unknown HVAC mode: { hvac_mode } " )
123
-
124
- packet = self .packet .make_status ( power = power )
125
- await self .send ( packet )
112
+
113
+ make_packet = self .packet .make_power_status ( power )
114
+ await self .send_packet ( make_packet )
126
115
127
116
async def async_set_preset_mode (self , preset_mode : str ) -> None :
128
- """Set new target preset mode."""
129
- if preset_mode == PRESET_AWAY :
130
- away_mode = True
131
- elif preset_mode == PRESET_NONE :
132
- away_mode = False
133
- else :
117
+ """Set the preset mode."""
118
+ preset_to_away = {
119
+ PRESET_AWAY : True ,
120
+ PRESET_NONE : False ,
121
+ }
122
+ away_mode = preset_to_away .get (preset_mode )
123
+ if away_mode is None :
134
124
raise ValueError (f"Unknown preset mode: { preset_mode } " )
135
-
136
- packet = self .packet .make_status ( away_mode = away_mode )
137
- await self .send ( packet )
125
+
126
+ make_packet = self .packet .make_away_status ( away_mode )
127
+ await self .send_packet ( make_packet )
138
128
139
129
async def async_set_temperature (self , ** kwargs ) -> None :
140
- """Set new target temperature."""
141
- target_temp = kwargs .get (ATTR_TEMPERATURE )
142
- if target_temp is None :
143
- LOGGER .warning ("Missing temperature" )
144
- return
145
-
146
- packet = self .packet .make_status (target_temp = target_temp )
147
- await self .send (packet )
130
+ """Set the target temperature."""
131
+ target_temp = int (kwargs .get (ATTR_TEMPERATURE , 0 ))
132
+ make_packet = self .packet .make_target_temp (target_temp )
133
+ await self .send_packet (make_packet )
148
134
149
135
150
136
class KocomAcEntity (KocomEntity , ClimateEntity ):
@@ -156,105 +142,89 @@ class KocomAcEntity(KocomEntity, ClimateEntity):
156
142
HVACMode .COOL ,
157
143
HVACMode .FAN_ONLY ,
158
144
HVACMode .DRY ,
159
- HVACMode .AUTO
145
+ HVACMode .AUTO ,
160
146
]
161
147
_attr_fan_modes = [FAN_LOW , FAN_MEDIUM , FAN_HIGH ]
162
148
_attr_supported_features = (
163
- ClimateEntityFeature .TARGET_TEMPERATURE |
164
- ClimateEntityFeature .TURN_OFF |
165
- ClimateEntityFeature .TURN_ON |
166
- ClimateEntityFeature .FAN_MODE
149
+ ClimateEntityFeature .TARGET_TEMPERATURE
150
+ | ClimateEntityFeature .TURN_OFF
151
+ | ClimateEntityFeature .TURN_ON
152
+ | ClimateEntityFeature .FAN_MODE
167
153
)
168
154
_attr_temperature_unit = UnitOfTemperature .CELSIUS
169
155
_attr_max_temp = 30
170
156
_attr_min_temp = 18
171
157
_attr_target_temperature_step = 1
172
-
173
- def __init__ (
174
- self ,
175
- gateway : KocomGateway ,
176
- packet : KocomPacket ,
177
- ) -> None :
158
+
159
+ def __init__ (self , gateway : KocomGateway , packet : KocomPacket ) -> None :
178
160
"""Initialize the climate."""
179
161
super ().__init__ (gateway , packet )
180
-
162
+
181
163
@property
182
164
def hvac_mode (self ) -> HVACMode :
183
- """Return hvac operation ie. heat, cool mode."""
184
- if self .device .state [POWER ] and (op_mode := self .device .state [OP_MODE ]):
185
- if op_mode == OpMode .COOL :
186
- return HVACMode .COOL
187
- elif op_mode == OpMode .FAN_ONLY :
188
- return HVACMode .FAN_ONLY
189
- elif op_mode == OpMode .DRY :
190
- return HVACMode .DRY
191
- elif op_mode == OpMode .AUTO :
192
- return HVACMode .AUTO
193
- else :
194
- return HVACMode .OFF
195
-
165
+ """Return current HVAC mode."""
166
+ if self .device .state [POWER ]:
167
+ op_mode = self .device .state [OP_MODE ]
168
+ return {
169
+ OpMode .COOL : HVACMode .COOL ,
170
+ OpMode .FAN_ONLY : HVACMode .FAN_ONLY ,
171
+ OpMode .DRY : HVACMode .DRY ,
172
+ OpMode .AUTO : HVACMode .AUTO ,
173
+ }.get (op_mode , HVACMode .OFF )
174
+ return HVACMode .OFF
175
+
196
176
@property
197
177
def fan_mode (self ) -> str :
198
- """Return the fan setting."""
199
- fan_mode = self .device .state [FAN_MODE ]
200
- if fan_mode == FanMode .LOW :
201
- return FAN_LOW
202
- elif fan_mode == FanMode .MEDIUM :
203
- return FAN_MEDIUM
204
- elif fan_mode == FanMode .HIGH :
205
- return FAN_HIGH
206
-
178
+ """Return current fan mode."""
179
+ return {
180
+ FanMode .LOW : FAN_LOW ,
181
+ FanMode .MEDIUM : FAN_MEDIUM ,
182
+ FanMode .HIGH : FAN_HIGH ,
183
+ }.get (self .device .state [FAN_MODE ])
184
+
207
185
@property
208
186
def current_temperature (self ) -> int :
209
187
"""Return the current temperature."""
210
188
return self .device .state [CURRENT_TEMP ]
211
189
212
190
@property
213
191
def target_temperature (self ) -> int :
214
- """Return the temperature we try to reach ."""
192
+ """Return the target temperature ."""
215
193
return self .device .state [TARGET_TEMP ]
216
-
194
+
217
195
async def async_set_hvac_mode (self , hvac_mode : HVACMode ) -> None :
218
- """Set new target hvac mode."""
196
+ """Set a new target HVAC mode."""
219
197
if hvac_mode == HVACMode .OFF :
220
- op_mode = OpMode .OFF
221
- elif hvac_mode == HVACMode .COOL :
222
- op_mode = OpMode .COOL
223
- elif hvac_mode == HVACMode .FAN_ONLY :
224
- op_mode = OpMode .FAN_ONLY
225
- elif hvac_mode == HVACMode .DRY :
226
- op_mode = OpMode .DRY
227
- elif hvac_mode == HVACMode .AUTO :
228
- op_mode = OpMode .AUTO
198
+ make_packet = self .packet .make_power_status (False )
229
199
else :
230
- raise ValueError (f"Unknown HVAC mode: { hvac_mode } " )
231
-
232
- packet = self .packet .make_status (op_mode = op_mode )
233
- await self .send (packet )
200
+ hvac_to_op_mode = {
201
+ HVACMode .COOL : OpMode .COOL ,
202
+ HVACMode .FAN_ONLY : OpMode .FAN_ONLY ,
203
+ HVACMode .DRY : OpMode .DRY ,
204
+ HVACMode .AUTO : OpMode .AUTO ,
205
+ }
206
+ op_mode = hvac_to_op_mode .get (hvac_mode )
207
+ if op_mode is None :
208
+ raise ValueError (f"Unknown HVAC mode: { hvac_mode } " )
209
+ make_packet = self .packet .make_op_mode (op_mode )
210
+
211
+ await self .send_packet (make_packet )
234
212
235
213
async def async_set_fan_mode (self , fan_mode : str ) -> None :
236
- """Set new target fan mode."""
237
- if fan_mode == FAN_LOW :
238
- fan_speed = FanMode .LOW
239
- elif fan_mode == FAN_MEDIUM :
240
- fan_speed = FanMode .MEDIUM
241
- elif fan_mode == FAN_HIGH :
242
- fan_speed = FanMode .HIGH
243
- else :
214
+ """Set a new target fan mode."""
215
+ fan_speed = {
216
+ FAN_LOW : FanMode .LOW ,
217
+ FAN_MEDIUM : FanMode .MEDIUM ,
218
+ FAN_HIGH : FanMode .HIGH ,
219
+ }.get (fan_mode )
220
+ if fan_speed is None :
244
221
raise ValueError (f"Unknown fan mode: { fan_mode } " )
245
-
246
- packet = self .packet .make_status (fan_mode = fan_speed )
247
- await self .send (packet )
248
-
249
- async def async_set_preset_mode (self , preset_mode : str ) -> None :
250
- """Set new target preset mode."""
222
+
223
+ make_packet = self .packet .make_fan_mode (fan_speed )
224
+ await self .send_packet (make_packet )
251
225
252
226
async def async_set_temperature (self , ** kwargs ) -> None :
253
- """Set new target temperature."""
254
- target_temp = kwargs .get (ATTR_TEMPERATURE )
255
- if target_temp is None :
256
- LOGGER .warning ("Missing temperature" )
257
- return
258
-
259
- packet = self .packet .make_status (target_temp = target_temp )
260
- await self .send (packet )
227
+ """Set a new target temperature."""
228
+ target_temp = int (kwargs .get (ATTR_TEMPERATURE , 0 ))
229
+ make_packet = self .packet .make_target_temp (target_temp )
230
+ await self .send_packet (make_packet )
0 commit comments