Add ZWaveDiscoverySchema for Merten 507801 (#88342)
* Add ZWaveDiscoverySchema for Merten 507801 * Add discovery tests to Merten 507801 z-wave device * Add Z-Wave discovery schemas for Merten 507801 to disable endpoint 2 by default * Add more discovery tests for Merten 507801 z-wave device
This commit is contained in:
parent
09d0128601
commit
9fc6700c5a
4 changed files with 898 additions and 0 deletions
|
@ -390,6 +390,53 @@ DISCOVERY_SCHEMAS = [
|
||||||
product_type={0x0003},
|
product_type={0x0003},
|
||||||
primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA,
|
primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA,
|
||||||
),
|
),
|
||||||
|
# Merten 507801 Connect Roller Shutter
|
||||||
|
ZWaveDiscoverySchema(
|
||||||
|
platform=Platform.COVER,
|
||||||
|
hint="window_shutter",
|
||||||
|
manufacturer_id={0x007A},
|
||||||
|
product_id={0x0001},
|
||||||
|
product_type={0x8003},
|
||||||
|
primary_value=ZWaveValueDiscoverySchema(
|
||||||
|
command_class={CommandClass.SWITCH_MULTILEVEL},
|
||||||
|
property={CURRENT_VALUE_PROPERTY},
|
||||||
|
endpoint={0, 1},
|
||||||
|
type={ValueType.NUMBER},
|
||||||
|
),
|
||||||
|
assumed_state=True,
|
||||||
|
),
|
||||||
|
# Merten 507801 Connect Roller Shutter.
|
||||||
|
# Disable endpoint 2, as it has no practical function. CC: Switch_Multilevel
|
||||||
|
ZWaveDiscoverySchema(
|
||||||
|
platform=Platform.COVER,
|
||||||
|
hint="window_shutter",
|
||||||
|
manufacturer_id={0x007A},
|
||||||
|
product_id={0x0001},
|
||||||
|
product_type={0x8003},
|
||||||
|
primary_value=ZWaveValueDiscoverySchema(
|
||||||
|
command_class={CommandClass.SWITCH_MULTILEVEL},
|
||||||
|
property={CURRENT_VALUE_PROPERTY},
|
||||||
|
endpoint={2},
|
||||||
|
type={ValueType.NUMBER},
|
||||||
|
),
|
||||||
|
assumed_state=True,
|
||||||
|
entity_registry_enabled_default=False,
|
||||||
|
),
|
||||||
|
# Merten 507801 Connect Roller Shutter.
|
||||||
|
# Disable endpoint 2, as it has no practical function. CC: Protection
|
||||||
|
ZWaveDiscoverySchema(
|
||||||
|
platform=Platform.SELECT,
|
||||||
|
manufacturer_id={0x007A},
|
||||||
|
product_id={0x0001},
|
||||||
|
product_type={0x8003},
|
||||||
|
primary_value=ZWaveValueDiscoverySchema(
|
||||||
|
command_class={CommandClass.PROTECTION},
|
||||||
|
property={LOCAL_PROPERTY, RF_PROPERTY},
|
||||||
|
endpoint={2},
|
||||||
|
type={ValueType.NUMBER},
|
||||||
|
),
|
||||||
|
entity_registry_enabled_default=False,
|
||||||
|
),
|
||||||
# Vision Security ZL7432 In Wall Dual Relay Switch
|
# Vision Security ZL7432 In Wall Dual Relay Switch
|
||||||
ZWaveDiscoverySchema(
|
ZWaveDiscoverySchema(
|
||||||
platform=Platform.SWITCH,
|
platform=Platform.SWITCH,
|
||||||
|
|
|
@ -458,6 +458,12 @@ def fibaro_fgr222_shutter_state_fixture():
|
||||||
return json.loads(load_fixture("zwave_js/cover_fibaro_fgr222_state.json"))
|
return json.loads(load_fixture("zwave_js/cover_fibaro_fgr222_state.json"))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="merten_507801_state", scope="session")
|
||||||
|
def merten_507801_state_fixture():
|
||||||
|
"""Load the Merten 507801 Shutter node state fixture data."""
|
||||||
|
return json.loads(load_fixture("zwave_js/cover_merten_507801_state.json"))
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="aeon_smart_switch_6_state", scope="session")
|
@pytest.fixture(name="aeon_smart_switch_6_state", scope="session")
|
||||||
def aeon_smart_switch_6_state_fixture():
|
def aeon_smart_switch_6_state_fixture():
|
||||||
"""Load the AEON Labs (ZW096) Smart Switch 6 node state fixture data."""
|
"""Load the AEON Labs (ZW096) Smart Switch 6 node state fixture data."""
|
||||||
|
@ -952,6 +958,14 @@ def fibaro_fgr222_shutter_cover_fixture(client, fibaro_fgr222_shutter_state):
|
||||||
return node
|
return node
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="merten_507801")
|
||||||
|
def merten_507801_cover_fixture(client, merten_507801_state):
|
||||||
|
"""Mock a Merten 507801 Shutter node."""
|
||||||
|
node = Node(client, copy.deepcopy(merten_507801_state))
|
||||||
|
client.driver.controller.nodes[node.node_id] = node
|
||||||
|
return node
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="aeon_smart_switch_6")
|
@pytest.fixture(name="aeon_smart_switch_6")
|
||||||
def aeon_smart_switch_6_fixture(client, aeon_smart_switch_6_state):
|
def aeon_smart_switch_6_fixture(client, aeon_smart_switch_6_state):
|
||||||
"""Mock an AEON Labs (ZW096) Smart Switch 6 node."""
|
"""Mock an AEON Labs (ZW096) Smart Switch 6 node."""
|
||||||
|
|
|
@ -0,0 +1,798 @@
|
||||||
|
{
|
||||||
|
"nodeId": 41,
|
||||||
|
"index": 0,
|
||||||
|
"status": 4,
|
||||||
|
"ready": true,
|
||||||
|
"isListening": true,
|
||||||
|
"isRouting": true,
|
||||||
|
"isSecure": false,
|
||||||
|
"manufacturerId": 122,
|
||||||
|
"productId": 1,
|
||||||
|
"productType": 32771,
|
||||||
|
"firmwareVersion": "2.2",
|
||||||
|
"deviceConfig": {
|
||||||
|
"filename": "/opt/node_modules/@zwave-js/config/config/devices/0x007a/507801.json",
|
||||||
|
"isEmbedded": false,
|
||||||
|
"manufacturer": "Merten",
|
||||||
|
"manufacturerId": 122,
|
||||||
|
"label": "507801",
|
||||||
|
"description": "Connect Roller Shutter",
|
||||||
|
"devices": [
|
||||||
|
{
|
||||||
|
"productType": 32771,
|
||||||
|
"productId": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"firmwareVersion": {
|
||||||
|
"min": "0.0",
|
||||||
|
"max": "255.255"
|
||||||
|
},
|
||||||
|
"associations": {},
|
||||||
|
"paramInformation": {
|
||||||
|
"_map": {}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"inclusion": "Triple click button",
|
||||||
|
"exclusion": "Triple click button",
|
||||||
|
"reset": "Triple click button, then click and hold for 5 seconds",
|
||||||
|
"manual": "https://download.schneider-electric.com/files?p_Doc_Ref=MTN507801_HW_2008_43_EN&p_enDocType=User+guide&p_File_Name=MTN507801_HW_2008_43_EN.pdf"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": "507801",
|
||||||
|
"endpointCountIsDynamic": false,
|
||||||
|
"endpointsHaveIdenticalCapabilities": true,
|
||||||
|
"individualEndpointCount": 2,
|
||||||
|
"interviewAttempts": 1,
|
||||||
|
"endpoints": [
|
||||||
|
{
|
||||||
|
"nodeId": 41,
|
||||||
|
"index": 0,
|
||||||
|
"deviceClass": {
|
||||||
|
"basic": {
|
||||||
|
"key": 4,
|
||||||
|
"label": "Routing Slave"
|
||||||
|
},
|
||||||
|
"generic": {
|
||||||
|
"key": 9,
|
||||||
|
"label": "Window Covering"
|
||||||
|
},
|
||||||
|
"specific": {
|
||||||
|
"key": 0,
|
||||||
|
"label": "Unused"
|
||||||
|
},
|
||||||
|
"mandatorySupportedCCs": [],
|
||||||
|
"mandatoryControlledCCs": []
|
||||||
|
},
|
||||||
|
"commandClasses": [
|
||||||
|
{
|
||||||
|
"id": 114,
|
||||||
|
"name": "Manufacturer Specific",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 134,
|
||||||
|
"name": "Version",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 112,
|
||||||
|
"name": "Configuration",
|
||||||
|
"version": 2,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 96,
|
||||||
|
"name": "Multi Channel",
|
||||||
|
"version": 2,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 133,
|
||||||
|
"name": "Association",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 38,
|
||||||
|
"name": "Multilevel Switch",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 117,
|
||||||
|
"name": "Protection",
|
||||||
|
"version": 2,
|
||||||
|
"isSecure": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeId": 41,
|
||||||
|
"index": 1,
|
||||||
|
"deviceClass": {
|
||||||
|
"basic": {
|
||||||
|
"key": 4,
|
||||||
|
"label": "Routing Slave"
|
||||||
|
},
|
||||||
|
"generic": {
|
||||||
|
"key": 9,
|
||||||
|
"label": "Window Covering"
|
||||||
|
},
|
||||||
|
"specific": {
|
||||||
|
"key": 0,
|
||||||
|
"label": "Unused"
|
||||||
|
},
|
||||||
|
"mandatorySupportedCCs": [],
|
||||||
|
"mandatoryControlledCCs": []
|
||||||
|
},
|
||||||
|
"commandClasses": [
|
||||||
|
{
|
||||||
|
"id": 114,
|
||||||
|
"name": "Manufacturer Specific",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 134,
|
||||||
|
"name": "Version",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 38,
|
||||||
|
"name": "Multilevel Switch",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 117,
|
||||||
|
"name": "Protection",
|
||||||
|
"version": 2,
|
||||||
|
"isSecure": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeId": 41,
|
||||||
|
"index": 2,
|
||||||
|
"deviceClass": {
|
||||||
|
"basic": {
|
||||||
|
"key": 4,
|
||||||
|
"label": "Routing Slave"
|
||||||
|
},
|
||||||
|
"generic": {
|
||||||
|
"key": 9,
|
||||||
|
"label": "Window Covering"
|
||||||
|
},
|
||||||
|
"specific": {
|
||||||
|
"key": 0,
|
||||||
|
"label": "Unused"
|
||||||
|
},
|
||||||
|
"mandatorySupportedCCs": [],
|
||||||
|
"mandatoryControlledCCs": []
|
||||||
|
},
|
||||||
|
"commandClasses": [
|
||||||
|
{
|
||||||
|
"id": 114,
|
||||||
|
"name": "Manufacturer Specific",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 134,
|
||||||
|
"name": "Version",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 38,
|
||||||
|
"name": "Multilevel Switch",
|
||||||
|
"version": 1,
|
||||||
|
"isSecure": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 117,
|
||||||
|
"name": "Protection",
|
||||||
|
"version": 2,
|
||||||
|
"isSecure": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"values": [
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 112,
|
||||||
|
"commandClassName": "Configuration",
|
||||||
|
"property": 176,
|
||||||
|
"propertyName": "Changeover Delay",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"description": "For motor protection",
|
||||||
|
"label": "Changeover Delay",
|
||||||
|
"default": 10,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"unit": "0.1 seconds",
|
||||||
|
"valueSize": 1,
|
||||||
|
"format": 1,
|
||||||
|
"allowManualEntry": true,
|
||||||
|
"isFromConfig": true
|
||||||
|
},
|
||||||
|
"value": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 112,
|
||||||
|
"commandClassName": "Configuration",
|
||||||
|
"property": 177,
|
||||||
|
"propertyName": "Travel Time Up, Byte 1",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Travel Time Up, Byte 1",
|
||||||
|
"default": 4,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"unit": "25.6 seconds",
|
||||||
|
"valueSize": 1,
|
||||||
|
"format": 1,
|
||||||
|
"allowManualEntry": true,
|
||||||
|
"isFromConfig": true
|
||||||
|
},
|
||||||
|
"value": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 112,
|
||||||
|
"commandClassName": "Configuration",
|
||||||
|
"property": 178,
|
||||||
|
"propertyName": "Travel Time Up, Byte 2",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Travel Time Up, Byte 2",
|
||||||
|
"default": 176,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"unit": "0.1 seconds",
|
||||||
|
"valueSize": 1,
|
||||||
|
"format": 1,
|
||||||
|
"allowManualEntry": true,
|
||||||
|
"isFromConfig": true
|
||||||
|
},
|
||||||
|
"value": 176
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 112,
|
||||||
|
"commandClassName": "Configuration",
|
||||||
|
"property": 179,
|
||||||
|
"propertyName": "Travel Time Down, Byte 1",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Travel Time Down, Byte 1",
|
||||||
|
"default": 4,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"unit": "25.6 seconds",
|
||||||
|
"valueSize": 1,
|
||||||
|
"format": 1,
|
||||||
|
"allowManualEntry": true,
|
||||||
|
"isFromConfig": true
|
||||||
|
},
|
||||||
|
"value": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 112,
|
||||||
|
"commandClassName": "Configuration",
|
||||||
|
"property": 180,
|
||||||
|
"propertyName": "Travel Time Down, Byte 2",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Travel Time Down, Byte 2",
|
||||||
|
"default": 176,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"unit": "0.1 seconds",
|
||||||
|
"valueSize": 1,
|
||||||
|
"format": 1,
|
||||||
|
"allowManualEntry": true,
|
||||||
|
"isFromConfig": true
|
||||||
|
},
|
||||||
|
"value": 176
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 114,
|
||||||
|
"commandClassName": "Manufacturer Specific",
|
||||||
|
"property": "manufacturerId",
|
||||||
|
"propertyName": "manufacturerId",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Manufacturer ID",
|
||||||
|
"min": 0,
|
||||||
|
"max": 65535
|
||||||
|
},
|
||||||
|
"value": 122
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 114,
|
||||||
|
"commandClassName": "Manufacturer Specific",
|
||||||
|
"property": "productType",
|
||||||
|
"propertyName": "productType",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Product type",
|
||||||
|
"min": 0,
|
||||||
|
"max": 65535
|
||||||
|
},
|
||||||
|
"value": 32771
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 114,
|
||||||
|
"commandClassName": "Manufacturer Specific",
|
||||||
|
"property": "productId",
|
||||||
|
"propertyName": "productId",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Product ID",
|
||||||
|
"min": 0,
|
||||||
|
"max": 65535
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 134,
|
||||||
|
"commandClassName": "Version",
|
||||||
|
"property": "libraryType",
|
||||||
|
"propertyName": "libraryType",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Library type",
|
||||||
|
"states": {
|
||||||
|
"0": "Unknown",
|
||||||
|
"1": "Static Controller",
|
||||||
|
"2": "Controller",
|
||||||
|
"3": "Enhanced Slave",
|
||||||
|
"4": "Slave",
|
||||||
|
"5": "Installer",
|
||||||
|
"6": "Routing Slave",
|
||||||
|
"7": "Bridge Controller",
|
||||||
|
"8": "Device under Test",
|
||||||
|
"9": "N/A",
|
||||||
|
"10": "AV Remote",
|
||||||
|
"11": "AV Device"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 134,
|
||||||
|
"commandClassName": "Version",
|
||||||
|
"property": "protocolVersion",
|
||||||
|
"propertyName": "protocolVersion",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "string",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Z-Wave protocol version"
|
||||||
|
},
|
||||||
|
"value": "2.27"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 0,
|
||||||
|
"commandClass": 134,
|
||||||
|
"commandClassName": "Version",
|
||||||
|
"property": "firmwareVersions",
|
||||||
|
"propertyName": "firmwareVersions",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "string[]",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Z-Wave chip firmware versions"
|
||||||
|
},
|
||||||
|
"value": ["2.2"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "currentValue",
|
||||||
|
"propertyName": "currentValue",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Current value",
|
||||||
|
"min": 0,
|
||||||
|
"max": 99
|
||||||
|
},
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "Up",
|
||||||
|
"propertyName": "Up",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Perform a level change (Up)",
|
||||||
|
"ccSpecific": {
|
||||||
|
"switchType": 2
|
||||||
|
},
|
||||||
|
"valueChangeOptions": ["transitionDuration"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "Down",
|
||||||
|
"propertyName": "Down",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Perform a level change (Down)",
|
||||||
|
"ccSpecific": {
|
||||||
|
"switchType": 2
|
||||||
|
},
|
||||||
|
"valueChangeOptions": ["transitionDuration"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "targetValue",
|
||||||
|
"propertyName": "targetValue",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Target value",
|
||||||
|
"valueChangeOptions": ["transitionDuration"],
|
||||||
|
"min": 0,
|
||||||
|
"max": 99
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "duration",
|
||||||
|
"propertyName": "duration",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "duration",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Remaining duration"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "restorePrevious",
|
||||||
|
"propertyName": "restorePrevious",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Restore previous value"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "local",
|
||||||
|
"propertyName": "local",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Local protection state",
|
||||||
|
"states": {
|
||||||
|
"0": "Unprotected",
|
||||||
|
"2": "NoOperationPossible"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "rf",
|
||||||
|
"propertyName": "rf",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "RF protection state",
|
||||||
|
"states": {
|
||||||
|
"0": "Unprotected",
|
||||||
|
"1": "NoControl"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "exclusiveControlNodeId",
|
||||||
|
"propertyName": "exclusiveControlNodeId",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Node ID with exclusive control",
|
||||||
|
"min": 1,
|
||||||
|
"max": 232
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 1,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "timeout",
|
||||||
|
"propertyName": "timeout",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "RF protection timeout",
|
||||||
|
"min": 0,
|
||||||
|
"max": 255
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "currentValue",
|
||||||
|
"propertyName": "currentValue",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Current value",
|
||||||
|
"min": 0,
|
||||||
|
"max": 99
|
||||||
|
},
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "Up",
|
||||||
|
"propertyName": "Up",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Perform a level change (Up)",
|
||||||
|
"ccSpecific": {
|
||||||
|
"switchType": 2
|
||||||
|
},
|
||||||
|
"valueChangeOptions": ["transitionDuration"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "Down",
|
||||||
|
"propertyName": "Down",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Perform a level change (Down)",
|
||||||
|
"ccSpecific": {
|
||||||
|
"switchType": 2
|
||||||
|
},
|
||||||
|
"valueChangeOptions": ["transitionDuration"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "targetValue",
|
||||||
|
"propertyName": "targetValue",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Target value",
|
||||||
|
"valueChangeOptions": ["transitionDuration"],
|
||||||
|
"min": 0,
|
||||||
|
"max": 99
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "duration",
|
||||||
|
"propertyName": "duration",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "duration",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": false,
|
||||||
|
"label": "Remaining duration"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 38,
|
||||||
|
"commandClassName": "Multilevel Switch",
|
||||||
|
"property": "restorePrevious",
|
||||||
|
"propertyName": "restorePrevious",
|
||||||
|
"ccVersion": 1,
|
||||||
|
"metadata": {
|
||||||
|
"type": "boolean",
|
||||||
|
"readable": false,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Restore previous value"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "local",
|
||||||
|
"propertyName": "local",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Local protection state",
|
||||||
|
"states": {
|
||||||
|
"0": "Unprotected",
|
||||||
|
"1": "ProtectedBySequence",
|
||||||
|
"2": "NoOperationPossible"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "rf",
|
||||||
|
"propertyName": "rf",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "RF protection state",
|
||||||
|
"states": {
|
||||||
|
"0": "Unprotected",
|
||||||
|
"1": "NoControl",
|
||||||
|
"2": "NoResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "exclusiveControlNodeId",
|
||||||
|
"propertyName": "exclusiveControlNodeId",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "Node ID with exclusive control",
|
||||||
|
"min": 1,
|
||||||
|
"max": 232
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": 2,
|
||||||
|
"commandClass": 117,
|
||||||
|
"commandClassName": "Protection",
|
||||||
|
"property": "timeout",
|
||||||
|
"propertyName": "timeout",
|
||||||
|
"ccVersion": 2,
|
||||||
|
"metadata": {
|
||||||
|
"type": "number",
|
||||||
|
"readable": true,
|
||||||
|
"writeable": true,
|
||||||
|
"label": "RF protection timeout",
|
||||||
|
"min": 0,
|
||||||
|
"max": 255
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"isFrequentListening": false,
|
||||||
|
"maxDataRate": 9600,
|
||||||
|
"supportedDataRates": [9600],
|
||||||
|
"protocolVersion": 1,
|
||||||
|
"supportsBeaming": false,
|
||||||
|
"supportsSecurity": false,
|
||||||
|
"nodeType": 1,
|
||||||
|
"deviceClass": {
|
||||||
|
"basic": {
|
||||||
|
"key": 4,
|
||||||
|
"label": "Routing Slave"
|
||||||
|
},
|
||||||
|
"generic": {
|
||||||
|
"key": 9,
|
||||||
|
"label": "Window Covering"
|
||||||
|
},
|
||||||
|
"specific": {
|
||||||
|
"key": 0,
|
||||||
|
"label": "Unused"
|
||||||
|
},
|
||||||
|
"mandatorySupportedCCs": [],
|
||||||
|
"mandatoryControlledCCs": []
|
||||||
|
},
|
||||||
|
"interviewStage": "Complete",
|
||||||
|
"deviceDatabaseUrl": "https://devices.zwave-js.io/?jumpTo=0x007a:0x8003:0x0001:2.2",
|
||||||
|
"highestSecurityClass": -1,
|
||||||
|
"isControllerNode": false,
|
||||||
|
"keepAwake": false
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ from homeassistant.components.zwave_js.discovery_data_template import (
|
||||||
DynamicCurrentTempClimateDataTemplate,
|
DynamicCurrentTempClimateDataTemplate,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
|
|
||||||
async def test_iblinds_v2(hass: HomeAssistant, client, iblinds_v2, integration) -> None:
|
async def test_iblinds_v2(hass: HomeAssistant, client, iblinds_v2, integration) -> None:
|
||||||
|
@ -100,3 +101,41 @@ async def test_dynamic_climate_data_discovery_template_failure(
|
||||||
DynamicCurrentTempClimateDataTemplate().resolve_data(
|
DynamicCurrentTempClimateDataTemplate().resolve_data(
|
||||||
node.values[f"{node.node_id}-49-0-Ultraviolet"]
|
node.values[f"{node.node_id}-49-0-Ultraviolet"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_merten_507801(hass, client, merten_507801, integration):
|
||||||
|
"""Test that Merten 507801 multilevel switch value is discovered as a cover."""
|
||||||
|
node = merten_507801
|
||||||
|
assert node.device_class.specific.label == "Unused"
|
||||||
|
|
||||||
|
state = hass.states.get("light.connect_roller_shutter")
|
||||||
|
assert not state
|
||||||
|
|
||||||
|
state = hass.states.get("cover.connect_roller_shutter")
|
||||||
|
assert state
|
||||||
|
|
||||||
|
|
||||||
|
async def test_merten_507801_disabled_enitites(
|
||||||
|
hass, client, merten_507801, integration
|
||||||
|
):
|
||||||
|
"""Test that Merten 507801 entities created by endpoint 2 are disabled."""
|
||||||
|
registry = er.async_get(hass)
|
||||||
|
entity_ids = [
|
||||||
|
"cover.connect_roller_shutter_2",
|
||||||
|
"select.connect_roller_shutter_local_protection_state_2",
|
||||||
|
"select.connect_roller_shutter_rf_protection_state_2",
|
||||||
|
]
|
||||||
|
for entity_id in entity_ids:
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state is None
|
||||||
|
entry = registry.async_get(entity_id)
|
||||||
|
assert entry
|
||||||
|
assert entry.disabled
|
||||||
|
assert entry.disabled_by is er.RegistryEntryDisabler.INTEGRATION
|
||||||
|
|
||||||
|
# Test enabling entity
|
||||||
|
updated_entry = registry.async_update_entity(
|
||||||
|
entry.entity_id, **{"disabled_by": None}
|
||||||
|
)
|
||||||
|
assert updated_entry != entry
|
||||||
|
assert updated_entry.disabled is False
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue