import json
from homematicip.base.enums import *
from homematicip.group import (
AlarmSwitchingGroup,
EnvironmentGroup,
ExtendedLinkedShutterGroup,
ExtendedLinkedSwitchingGroup,
Group,
HeatingChangeoverGroup,
HeatingCoolingDemandBoilerGroup,
HeatingCoolingDemandGroup,
HeatingCoolingDemandPumpGroup,
HeatingDehumidifierGroup,
HeatingExternalClockGroup,
HeatingFailureAlertRuleGroup,
HeatingGroup,
HeatingHumidyLimiterGroup,
HeatingTemperatureLimiterGroup,
HotWaterGroup,
HumidityWarningRuleGroup,
InboxGroup,
LinkedSwitchingGroup,
LockOutProtectionRule,
MetaGroup,
OverHeatProtectionRule,
SecurityGroup,
SecurityZoneGroup,
ShutterProfile,
ShutterWindProtectionRule,
SmokeAlarmDetectionRule,
SwitchGroupBase,
SwitchingGroup,
SwitchingProfileGroup,
)
[docs]class AsyncGroup(Group):
[docs] async def set_label(self, label):
return await self._connection.api_call(*super().set_label(label))
[docs] async def delete(self):
return await self._connection.api_call(*super().delete())
[docs]class AsyncSecurityGroup(SecurityGroup, AsyncGroup):
pass
[docs]class AsyncSwitchGroupBase(SwitchGroupBase, AsyncGroup):
[docs] async def turn_on(self):
return await self.set_switch_state(True)
[docs] async def turn_off(self):
return await self.set_switch_state(False)
[docs] async def set_switch_state(self, on=True):
url, data = super().set_switch_state(on=on)
return await self._connection.api_call(url, data)
[docs]class AsyncSwitchingGroup(SwitchingGroup, AsyncSwitchGroupBase):
[docs] async def set_shutter_level(self, level):
url, data = super().set_shutter_level(level)
return await self._connection.api_call(url, data)
[docs] async def set_shutter_stop(self):
url, data = super().set_shutter_stop()
return await self._connection.api_call(url, data)
[docs] async def set_slats_level(self, slatsLevel, shutterlevel):
url, data = super().set_slats_level(slatsLevel, shutterlevel)
return await self._connection.api_call(url, data)
[docs]class AsyncShutterProfile(ShutterProfile, AsyncGroup):
[docs] async def set_shutter_level(self, level):
url, data = super().set_shutter_level(level)
return await self._connection.api_call(url, data)
[docs] async def set_shutter_stop(self):
url, data = super().set_shutter_stop()
return await self._connection.api_call(url, data)
[docs] async def set_slats_level(self, slatsLevel, shutterlevel):
url, data = super().set_slats_level(slatsLevel, shutterlevel)
return await self._connection.api_call(url, data)
[docs] async def set_profile_mode(self, profileMode: ProfileMode):
return await self._connection.api_call(*super().set_profile_mode(profileMode))
[docs]class AsyncLinkedSwitchingGroup(LinkedSwitchingGroup, AsyncGroup):
[docs] async def set_light_group_switches(self, devices):
url, data = super().set_light_group_switches(devices)
return await self._connection.api_call(url, data)
[docs]class AsyncExtendedLinkedSwitchingGroup(
ExtendedLinkedSwitchingGroup, AsyncSwitchGroupBase
):
[docs] async def set_on_time(self, onTimeSeconds):
url, data = super().set_on_time(onTimeSeconds)
return await self._connection.api_call(url, data)
[docs]class AsyncExtendedLinkedShutterGroup(ExtendedLinkedShutterGroup, AsyncGroup):
[docs] async def set_shutter_level(self, level):
url, data = super().set_shutter_level(level)
return await self._connection.api_call(url, data)
[docs] async def set_shutter_stop(self):
url, data = super().set_shutter_stop()
return await self._connection.api_call(url, data)
[docs] async def set_slats_level(self, slatsLevel=0.0, shutterLevel=None):
url, data = super().set_slats_level(slatsLevel, shutterLevel)
return await self._connection.api_call(url, data)
[docs]class AsyncAlarmSwitchingGroup(AlarmSwitchingGroup, AsyncGroup):
[docs] async def set_on_time(self, onTimeSeconds):
url, data = super().set_on_time(onTimeSeconds)
return await self._connection.api_call(url, data)
[docs] async def test_signal_optical(
self, signalOptical=OpticalAlarmSignal.BLINKING_ALTERNATELY_REPEATING
):
url, data = super().test_signal_optical(signalOptical=signalOptical)
return await self._connection.api_call(url, data)
[docs] async def set_signal_optical(
self, signalOptical=OpticalAlarmSignal.BLINKING_ALTERNATELY_REPEATING
):
url, data = super().set_signal_optical(signalOptical=signalOptical)
return await self._connection.api_call(url, data)
[docs] async def test_signal_acoustic(
self, signalAcoustic=AcousticAlarmSignal.FREQUENCY_FALLING
):
url, data = super().test_signal_acoustic(signalAcoustic=signalAcoustic)
return await self._connection.api_call(url, data)
[docs] async def set_signal_acoustic(
self, signalAcoustic=AcousticAlarmSignal.FREQUENCY_FALLING
):
url, data = super().set_signal_acoustic(signalAcoustic=signalAcoustic)
return await self._connection.api_call(url, data)
# at the moment it doesn't look like this class has any special properties/functions
# keep it as a placeholder in the meantime
[docs]class AsyncHeatingHumidyLimiterGroup(HeatingHumidyLimiterGroup, AsyncGroup):
pass
# at the moment it doesn't look like this class has any special properties/functions
# keep it as a placeholder in the meantime
[docs]class AsyncHeatingTemperatureLimiterGroup(HeatingTemperatureLimiterGroup, AsyncGroup):
pass
[docs]class AsyncHeatingChangeoverGroup(HeatingChangeoverGroup, AsyncGroup):
pass
[docs]class AsyncHeatingFailureAlertRuleGroup(HeatingFailureAlertRuleGroup, AsyncGroup):
pass
# at the moment it doesn't look like this class has any special properties/functions
# keep it as a placeholder in the meantime
[docs]class AsyncInboxGroup(InboxGroup, AsyncGroup):
pass
[docs]class AsyncSecurityZoneGroup(SecurityZoneGroup, AsyncGroup):
pass
[docs]class AsyncHeatingGroup(HeatingGroup, AsyncGroup):
[docs] async def set_point_temperature(self, temperature):
return await self._connection.api_call(
*super().set_point_temperature(temperature)
)
[docs] async def set_boost(self, enable=True):
return await self._connection.api_call(*super().set_boost(enable=enable))
[docs] async def set_active_profile(self, index):
return await self._connection.api_call(*super().set_active_profile(index))
[docs] async def set_boost_duration(self, duration: int):
return await self._connection.api_call(*super().set_boost_duration(duration))
[docs] async def set_control_mode(self, mode=ClimateControlMode.AUTOMATIC):
return await self._connection.api_call(*super().set_control_mode(mode=mode))
[docs]class AsyncHeatingDehumidifierGroup(HeatingDehumidifierGroup, AsyncGroup):
pass
[docs]class AsyncHeatingCoolingDemandGroup(HeatingCoolingDemandGroup, AsyncGroup):
pass
# at the moment it doesn't look like this class has any special properties/functions
# keep it as a placeholder in the meantime
[docs]class AsyncHeatingExternalClockGroup(HeatingExternalClockGroup, AsyncGroup):
pass
[docs]class AsyncHeatingCoolingDemandBoilerGroup(HeatingCoolingDemandBoilerGroup, AsyncGroup):
pass
[docs]class AsyncHeatingCoolingDemandPumpGroup(HeatingCoolingDemandPumpGroup, AsyncGroup):
pass
[docs]class AsyncHumidityWarningRuleGroup(HumidityWarningRuleGroup, AsyncGroup):
pass
[docs]class AsyncSwitchingProfileGroup(SwitchingProfileGroup, AsyncGroup):
[docs] async def set_group_channels(self):
return await self._connection.api_call(*super().set_group_channels())
[docs] async def set_profile_mode(self, devices, automatic=True):
return await self._connection.api_call(
*super().set_profile_mode(devices, automatic=automatic)
)
[docs] async def create(self, label):
data = {"label": label}
result = await self._connection.api_call(
"group/switching/profile/createSwitchingProfileGroup", body=json.dumps(data)
)
if "groupId" in result:
self.id = result["groupId"]
return result
[docs]class AsyncOverHeatProtectionRule(OverHeatProtectionRule, AsyncGroup):
pass
[docs]class AsyncSmokeAlarmDetectionRule(SmokeAlarmDetectionRule, AsyncGroup):
pass
[docs]class AsyncShutterWindProtectionRule(ShutterWindProtectionRule, AsyncGroup):
pass
[docs]class AsyncLockOutProtectionRule(LockOutProtectionRule, AsyncGroup):
pass
[docs]class AsyncEnvironmentGroup(EnvironmentGroup, AsyncGroup):
pass
[docs]class AsyncHotWaterGroup(HotWaterGroup, AsyncGroup):
[docs] async def set_profile_mode(self, profileMode: ProfileMode):
return await self._connection.api_call(*super().set_profile_mode(profileMode))