Bump dependency & add devices for HomematicIP Cloud (#36595)

* update dependency and test data

* Add test for HmIP-SWDO-PL

* Add device HmIP-MOD-HO

* Fix test
pull/36627/head
SukramJ 2020-06-10 11:34:14 +02:00 committed by GitHub
parent 44552937b6
commit 212b9df87d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 292 additions and 8 deletions

View File

@ -6,6 +6,7 @@ from homematicip.aio.device import (
AsyncFullFlushBlind,
AsyncFullFlushShutter,
AsyncGarageDoorModuleTormatic,
AsyncHoermannDrivesModule,
)
from homematicip.aio.group import AsyncExtendedLinkedShutterGroup
from homematicip.base.enums import DoorCommand, DoorState
@ -40,8 +41,10 @@ async def async_setup_entry(
entities.append(HomematicipCoverSlats(hap, device))
elif isinstance(device, AsyncFullFlushShutter):
entities.append(HomematicipCoverShutter(hap, device))
elif isinstance(device, AsyncGarageDoorModuleTormatic):
entities.append(HomematicipGarageDoorModuleTormatic(hap, device))
elif isinstance(
device, (AsyncHoermannDrivesModule, AsyncGarageDoorModuleTormatic)
):
entities.append(HomematicipGarageDoorModule(hap, device))
for group in hap.home.groups:
if isinstance(group, AsyncExtendedLinkedShutterGroup):
@ -118,8 +121,8 @@ class HomematicipCoverSlats(HomematicipCoverShutter, CoverEntity):
await self._device.set_shutter_stop()
class HomematicipGarageDoorModuleTormatic(HomematicipGenericDevice, CoverEntity):
"""Representation of a HomematicIP Garage Door Module for Tormatic."""
class HomematicipGarageDoorModule(HomematicipGenericDevice, CoverEntity):
"""Representation of a HomematicIP Garage Door Module."""
@property
def current_cover_position(self) -> int:

View File

@ -3,7 +3,7 @@
"name": "HomematicIP Cloud",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/homematicip_cloud",
"requirements": ["homematicip==0.10.17"],
"requirements": ["homematicip==0.10.18"],
"codeowners": ["@SukramJ"],
"quality_scale": "platinum"
}

View File

@ -743,7 +743,7 @@ homeassistant-pyozw==0.1.10
homeconnect==0.5
# homeassistant.components.homematicip_cloud
homematicip==0.10.17
homematicip==0.10.18
# homeassistant.components.horizon
horimote==0.4.1

View File

@ -333,7 +333,7 @@ homeassistant-pyozw==0.1.10
homeconnect==0.5
# homeassistant.components.homematicip_cloud
homematicip==0.10.17
homematicip==0.10.18
# homeassistant.components.google
# homeassistant.components.remember_the_milk

View File

@ -128,6 +128,36 @@ async def test_hmip_shutter_contact(hass, default_mock_hap_factory):
assert ha_state.attributes[ATTR_SABOTAGE]
async def test_hmip_shutter_contact_optical(hass, default_mock_hap_factory):
"""Test HomematicipShutterContact."""
entity_id = "binary_sensor.sitzplatzture"
entity_name = "Sitzplatzt\u00fcre"
device_model = "HmIP-SWDO-PL"
mock_hap = await default_mock_hap_factory.async_get_mock_hap(
test_devices=[entity_name]
)
ha_state, hmip_device = get_and_check_entity_basics(
hass, mock_hap, entity_id, entity_name, device_model
)
assert ha_state.state == STATE_OFF
await async_manipulate_test_data(hass, hmip_device, "windowState", WindowState.OPEN)
ha_state = hass.states.get(entity_id)
assert ha_state.state == STATE_ON
await async_manipulate_test_data(hass, hmip_device, "windowState", None)
ha_state = hass.states.get(entity_id)
assert ha_state.state == STATE_OFF
# test common attributes
assert ha_state.attributes[ATTR_RSSI_DEVICE] == -72
assert not ha_state.attributes.get(ATTR_SABOTAGE)
await async_manipulate_test_data(hass, hmip_device, "sabotage", True)
ha_state = hass.states.get(entity_id)
assert ha_state.attributes[ATTR_SABOTAGE]
async def test_hmip_motion_detector(hass, default_mock_hap_factory):
"""Test HomematicipMotionDetector."""
entity_id = "binary_sensor.bewegungsmelder_fur_55er_rahmen_innen"

View File

@ -207,6 +207,53 @@ async def test_hmip_garage_door_tormatic(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == (DoorCommand.STOP,)
async def test_hmip_garage_door_hoermann(hass, default_mock_hap_factory):
"""Test HomematicipCoverShutte."""
entity_id = "cover.garage_door"
entity_name = "Garage door"
device_model = "HmIP-MOD-HO"
mock_hap = await default_mock_hap_factory.async_get_mock_hap(
test_devices=[entity_name]
)
ha_state, hmip_device = get_and_check_entity_basics(
hass, mock_hap, entity_id, entity_name, device_model
)
assert ha_state.state == "closed"
assert ha_state.attributes["current_position"] == 0
service_call_counter = len(hmip_device.mock_calls)
await hass.services.async_call(
"cover", "open_cover", {"entity_id": entity_id}, blocking=True
)
assert len(hmip_device.mock_calls) == service_call_counter + 1
assert hmip_device.mock_calls[-1][0] == "send_door_command"
assert hmip_device.mock_calls[-1][1] == (DoorCommand.OPEN,)
await async_manipulate_test_data(hass, hmip_device, "doorState", DoorState.OPEN)
ha_state = hass.states.get(entity_id)
assert ha_state.state == STATE_OPEN
assert ha_state.attributes[ATTR_CURRENT_POSITION] == 100
await hass.services.async_call(
"cover", "close_cover", {"entity_id": entity_id}, blocking=True
)
assert len(hmip_device.mock_calls) == service_call_counter + 3
assert hmip_device.mock_calls[-1][0] == "send_door_command"
assert hmip_device.mock_calls[-1][1] == (DoorCommand.CLOSE,)
await async_manipulate_test_data(hass, hmip_device, "doorState", DoorState.CLOSED)
ha_state = hass.states.get(entity_id)
assert ha_state.state == STATE_CLOSED
assert ha_state.attributes[ATTR_CURRENT_POSITION] == 0
await hass.services.async_call(
"cover", "stop_cover", {"entity_id": entity_id}, blocking=True
)
assert len(hmip_device.mock_calls) == service_call_counter + 5
assert hmip_device.mock_calls[-1][0] == "send_door_command"
assert hmip_device.mock_calls[-1][1] == (DoorCommand.STOP,)
async def test_hmip_cover_shutter_group(hass, default_mock_hap_factory):
"""Test HomematicipCoverShutteGroup."""
entity_id = "cover.rollos_shuttergroup"

View File

@ -22,7 +22,7 @@ async def test_hmip_load_all_supported_devices(hass, default_mock_hap_factory):
test_devices=None, test_groups=None
)
assert len(mock_hap.hmip_device_by_entity_id) == 183
assert len(mock_hap.hmip_device_by_entity_id) == 186
async def test_hmip_remove_device(hass, default_mock_hap_factory):

View File

@ -14,6 +14,210 @@
}
},
"devices": {
"3014F7110SHUTTER_OPTICAL": {
"availableFirmwareVersion": "1.16.10",
"connectionType": "HMIP_RF",
"firmwareVersion": "1.16.10",
"firmwareVersionInteger": 69642,
"functionalChannels": {
"0": {
"coProFaulty": false,
"coProRestartNeeded": false,
"coProUpdateFailure": false,
"configPending": false,
"deviceId": "3014F7110SHUTTER_OPTICAL",
"deviceOverheated": false,
"deviceOverloaded": false,
"devicePowerFailureDetected": false,
"deviceUndervoltage": false,
"dutyCycle": false,
"functionalChannelType": "DEVICE_SABOTAGE",
"groupIndex": 0,
"groups": [],
"index": 0,
"label": "",
"lowBat": false,
"routerModuleEnabled": false,
"routerModuleSupported": false,
"rssiDeviceValue": -72,
"rssiPeerValue": null,
"sabotage": false,
"supportedOptionalFeatures": {
"IFeatureDeviceCoProError": false,
"IFeatureDeviceCoProRestart": false,
"IFeatureDeviceCoProUpdate": false,
"IFeatureDeviceIdentify": false,
"IFeatureDeviceOverheated": false,
"IFeatureDeviceOverloaded": false,
"IFeatureDevicePowerFailure": false,
"IFeatureDeviceTemperatureOutOfRange": false,
"IFeatureDeviceUndervoltage": false
},
"temperatureOutOfRange": false,
"unreach": false
},
"1": {
"deviceId": "3014F7110SHUTTER_OPTICAL",
"eventDelay": 0,
"functionalChannelType": "SHUTTER_CONTACT_CHANNEL",
"groupIndex": 1,
"groups": [
"00000000-0000-0000-0000-000000000016",
"00000000-0000-0000-0000-000000000044",
"00000000-0000-0000-0000-000000000009"
],
"index": 1,
"label": "",
"windowState": "CLOSED"
}
},
"homeId": "00000000-0000-0000-0000-000000000001",
"id": "3014F7110SHUTTER_OPTICAL",
"label": "Sitzplatzt\u00fcre",
"lastStatusUpdate": 1589401621441,
"liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED",
"manufacturerCode": 1,
"modelId": 398,
"modelType": "HmIP-SWDO-PL",
"oem": "eQ-3",
"permanentlyReachable": false,
"serializedGlobalTradeItemNumber": "3014F7110SHUTTER_OPTICAL",
"type": "SHUTTER_CONTACT_OPTICAL_PLUS",
"updateState": "UP_TO_DATE"
},
"3014F7110000000HmIPFSI16": {
"availableFirmwareVersion": "0.0.0",
"connectionType": "HMIP_RF",
"firmwareVersion": "1.16.2",
"firmwareVersionInteger": 69634,
"functionalChannels": {
"0": {
"coProFaulty": false,
"coProRestartNeeded": false,
"coProUpdateFailure": false,
"configPending": false,
"deviceId": "3014F7110000000HmIPFSI16",
"deviceOverheated": false,
"deviceOverloaded": false,
"devicePowerFailureDetected": false,
"deviceUndervoltage": false,
"dutyCycle": false,
"functionalChannelType": "DEVICE_BASE",
"groupIndex": 0,
"groups": [],
"index": 0,
"label": "",
"lowBat": null,
"routerModuleEnabled": false,
"routerModuleSupported": false,
"rssiDeviceValue": -57,
"rssiPeerValue": -54,
"supportedOptionalFeatures": {
"IFeatureDeviceCoProError": false,
"IFeatureDeviceCoProRestart": false,
"IFeatureDeviceCoProUpdate": false,
"IFeatureDeviceIdentify": false,
"IFeatureDeviceOverheated": true,
"IFeatureDeviceOverloaded": false,
"IFeatureDevicePowerFailure": false,
"IFeatureDeviceTemperatureOutOfRange": false,
"IFeatureDeviceUndervoltage": false
},
"temperatureOutOfRange": false,
"unreach": false
},
"1": {
"binaryBehaviorType": "NORMALLY_CLOSE",
"deviceId": "3014F7110000000HmIPFSI16",
"functionalChannelType": "MULTI_MODE_INPUT_SWITCH_CHANNEL",
"groupIndex": 1,
"groups": [],
"index": 1,
"label": "",
"multiModeInputMode": "KEY_BEHAVIOR",
"on": true,
"profileMode": "AUTOMATIC",
"userDesiredProfileMode": "AUTOMATIC"
}
},
"homeId": "00000000-0000-0000-0000-000000000001",
"id": "3014F7110000000HmIPFSI16",
"label": "Wohnzimmer Beleuchtung",
"lastStatusUpdate": 1587233145096,
"liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED",
"manufacturerCode": 1,
"modelId": 404,
"modelType": "HmIP-FSI16",
"oem": "eQ-3",
"permanentlyReachable": true,
"serializedGlobalTradeItemNumber": "3014F7110000000HmIPFSI16",
"type": "FULL_FLUSH_INPUT_SWITCH",
"updateState": "UP_TO_DATE"
},
"3014F7110000000HOERMANN": {
"availableFirmwareVersion": "0.0.0",
"firmwareVersion": "1.0.14",
"firmwareVersionInteger": 65550,
"functionalChannels": {
"0": {
"coProFaulty": false,
"coProRestartNeeded": false,
"coProUpdateFailure": false,
"configPending": false,
"deviceId": "3014F7110000000HOERMANN",
"deviceOverheated": false,
"deviceOverloaded": false,
"deviceUndervoltage": false,
"dutyCycle": false,
"functionalChannelType": "DEVICE_BASE",
"groupIndex": 0,
"groups": [],
"index": 0,
"label": "",
"lowBat": null,
"routerModuleEnabled": false,
"routerModuleSupported": false,
"rssiDeviceValue": -71,
"rssiPeerValue": -76,
"supportedOptionalFeatures": {
"IFeatureDeviceCoProError": false,
"IFeatureDeviceCoProRestart": false,
"IFeatureDeviceCoProUpdate": false,
"IFeatureDeviceOverheated": false,
"IFeatureDeviceOverloaded": false,
"IFeatureDeviceTemperatureOutOfRange": false,
"IFeatureDeviceUndervoltage": false
},
"temperatureOutOfRange": false,
"unreach": false
},
"1": {
"deviceId": "3014F7110000000HOERMANN",
"doorState": "CLOSED",
"functionalChannelType": "DOOR_CHANNEL",
"groupIndex": 1,
"groups": [],
"index": 1,
"label": "",
"on": false,
"processing": false,
"ventilationPositionSupported": true
}
},
"homeId": "00000000-0000-0000-0000-000000000001",
"id": "3014F7110000000HOERMANN",
"label": "Garage door",
"lastStatusUpdate": 1584029477755,
"liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED",
"manufacturerCode": 1,
"modelId": 399,
"modelType": "HmIP-MOD-HO",
"oem": "eQ-3",
"permanentlyReachable": true,
"serializedGlobalTradeItemNumber": "3014F7110000000HOERMANN",
"type": "HOERMANN_DRIVES_MODULE",
"updateState": "UP_TO_DATE"
},
"3014F711000BBBB000000000": {
"availableFirmwareVersion": "2.0.2",
"firmwareVersion": "2.0.2",