Skip to content

Commit 20a2374

Browse files
authored
Merge pull request #3 from asev/master
Added Party mode service
2 parents a6af803 + 0973cdd commit 20a2374

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Integration adds a fan entity, and the following sensors:
2020

2121
- Extract air relative humidity
2222

23+
- Party mode remaning time
24+
2325
- Airflow rate (approximately value)
2426
- Fan speed percentage
2527
- Fan stage
@@ -41,4 +43,4 @@ Integration adds a fan entity, and the following sensors:
4143
- Warnings
4244
- Information
4345

44-
46+
Also it adds service `easycontrols.party_mode` to change fan speed for limited time.

custom_components/easycontrols/const.py

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
VARIABLE_PREHEATER_STATUS = "v00024"
1212
VARIABLE_AFTERHEATER_STATUS = "v00201"
1313
VARIABLE_PARTY_MODE = "v00094"
14+
VARIABLE_PARTY_MODE_DURATION = "v00091"
15+
VARIABLE_PARTY_MODE_FAN_STAGE = "v00092"
16+
VARIABLE_PARTY_MODE_REMAINING_TIME = "v00093"
1417
VARIABLE_STANDBY_MODE = "v00099"
1518
VARIABLE_OPERATING_MODE = "v00101"
1619
VARIABLE_FAN_STAGE = "v00102"

custom_components/easycontrols/fan.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
VARIABLE_HOLIDAY_MODE,
2222
VARIABLE_OPERATING_MODE,
2323
VARIABLE_PARTY_MODE,
24+
VARIABLE_PARTY_MODE_FAN_STAGE,
25+
VARIABLE_PARTY_MODE_DURATION,
2426
VARIABLE_PERCENTAGE_FAN_SPEED,
2527
VARIABLE_STANDBY_MODE
2628
)
@@ -114,6 +116,24 @@ async def async_turn_off(self, **kwargs):
114116
) # operation mode = manual
115117
self._controller.set_variable(VARIABLE_FAN_STAGE, 0, "{:d}")
116118

119+
def start_party_mode(self, speed: str, duration: int):
120+
if duration == 0:
121+
# stop current party mode
122+
self._controller.set_variable(
123+
VARIABLE_PARTY_MODE, 0, "{:d}"
124+
)
125+
return
126+
127+
self._controller.set_variable(
128+
VARIABLE_PARTY_MODE_FAN_STAGE, self.speed_list.index(speed) + 1, "{:d}"
129+
)
130+
self._controller.set_variable(
131+
VARIABLE_PARTY_MODE_DURATION, duration, "{:d}"
132+
)
133+
self._controller.set_variable(
134+
VARIABLE_PARTY_MODE, 1, "{:d}"
135+
)
136+
117137
async def async_update(self):
118138
self._percentage_fan_speed = float(
119139
self._controller.get_variable(
@@ -169,7 +189,15 @@ async def async_setup_entry(hass, entry, async_add_entities):
169189

170190
name = entry.data[CONF_NAME]
171191
controller = hass.data[DOMAIN][CONTROLLER][entry.data[CONF_HOST]]
192+
fan = EasyControlFanDevice(hass, controller, name)
193+
194+
async_add_entities([fan])
195+
196+
def handle_party_mode(call):
197+
duration = call.data.get('duration', 60)
198+
speed = call.data.get('speed', 'high')
199+
fan.start_party_mode(speed, duration)
172200

173-
async_add_entities([EasyControlFanDevice(hass, controller, name)])
201+
hass.services.async_register(DOMAIN, "party_mode", handle_party_mode)
174202

175203
_LOGGER.info("Setting up Helios EasyControls fan device completed.")

custom_components/easycontrols/sensor.py

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
VARIABLE_PERCENTAGE_PREHEATER,
2525
VARIABLE_PERCENTAGE_FAN_SPEED,
2626
VARIABLE_FAN_STAGE,
27+
VARIABLE_PARTY_MODE_REMAINING_TIME,
2728
VARIABLE_PREHEATER_STATUS,
2829
VARIABLE_AFTERHEATER_STATUS
2930
)
@@ -385,6 +386,9 @@ async def async_setup_entry(hass, entry, async_add_entities):
385386
EasyControlSensor(
386387
controller, VARIABLE_HUMIDITY_EXTRACT_AIR, 8, int, f"{name} extract air relative humidity", name, "mdi:water-percent", "%"
387388
),
389+
EasyControlSensor(
390+
controller, VARIABLE_PARTY_MODE_REMAINING_TIME, 8, int, f"{name} party mode remaining time", name, "mdi:clock", "min"
391+
),
388392
EasyControlSensor(
389393
controller, VARIABLE_OPERATION_HOURS_SUPPLY_AIR_FAN, 10, lambda x: round(float(
390394
x) / 60.0, 2), f"{name} supply air fan operation hours", name, "mdi:history", "h"

custom_components/services.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
party_mode:
2+
description: Change fan speed for limited time
3+
fields:
4+
entity_id:
5+
description: Name of the entity.
6+
example: "fan.helios"
7+
speed:
8+
description: "Boost speed. Available: basic, rated, intensive, maximum"
9+
example: intensive
10+
duration:
11+
description: Duration in minutes
12+
example: 60

0 commit comments

Comments
 (0)