Hallo zusammen,
ich bin mehr durch Zufall auf das Thema hier im Forum gestoßen.
@klaus123, dir wird es vermutlich nicht mehr viel helfen. Vielleicht aber ja einem anderen, der zu gegebener Zeit hier vorbei schaut.
Diese Thema wurde schonmal im offiziellen Forum der HomeAssitant Community diskutiert. Hier der Link dazu Royal Gardineer garden water valve - Hardware - Home Assistant Community
Kurz zusammen gefass, sind also folgende Schritte zu tun.
- in der “configuration.yaml” folgende Zeilen hinzufügen …
zha:
custom_quirks_path: /config/custom_zha_quirks/
- einen neuen Ordner mit dem Name “custom_zha_quirks” im “config”-Verzeichnis erstellen
- in dem zuvor erstellten Ordner nun eine neue Datei mit dem Namen “ts0601_valve.py” anlegen.
- in die eben erstellte Datei folgenden Inhalt kopieren …
"""Collection of Tuya Valve devices e.g. water valves, gas valve etc."""
from typing import Dict
from zigpy.profiles import zha
from zigpy.quirks import CustomDevice
import zigpy.types as t
from zigpy.zcl.clusters.general import Basic, Groups, Identify, OnOff, Ota, Scenes, Time
from zigpy.zcl.clusters.smartenergy import Metering
from zhaquirks import DoublingPowerConfigurationCluster
from zhaquirks import Bus
from zhaquirks.const import (
DEVICE_TYPE,
ENDPOINTS,
INPUT_CLUSTERS,
MODELS_INFO,
OUTPUT_CLUSTERS,
PROFILE_ID,
)
from zhaquirks.tuya import (
TuyaLocalCluster,
TuyaPowerConfigurationCluster,
)
from zhaquirks.tuya.mcu import (
DPToAttributeMapping,
EnchantedDevice,
# TuyaDPType,
TuyaMCUCluster,
TuyaOnOff,
TuyaPowerConfigurationCluster,
)
class TuyaValveWaterConsumed(Metering, TuyaLocalCluster):
"""Tuya Valve Water consumed cluster."""
VOLUME_LITERS = 0x0007
"""Setting unit of measurement."""
_CONSTANT_ATTRIBUTES = {0x0300: VOLUME_LITERS}
class TuyaValveManufCluster(TuyaMCUCluster):
"""On/Off Tuya cluster with extra device attributes."""
attributes = TuyaMCUCluster.attributes.copy()
attributes.update(
{
0xEF01: ("time_left", t.uint32_t, True),
0xEF02: ("state", t.enum8, True),
0xEF03: ("last_valve_open_duration", t.uint32_t, True),
0xEF04: ("dp_6", t.uint32_t, True),
}
)
dp_to_attribute: Dict[int, DPToAttributeMapping] = {
1: DPToAttributeMapping(
TuyaOnOff.ep_attribute,
"on_off",
# dp_type=TuyaDPType.BOOL,
),
5: DPToAttributeMapping(
TuyaValveWaterConsumed.ep_attribute,
"current_summ_delivered",
# TuyaDPType.VALUE,
),
6: DPToAttributeMapping(
TuyaMCUCluster.ep_attribute,
"dp_6",
# TuyaDPType.VALUE,
),
7: DPToAttributeMapping(
TuyaPowerConfigurationCluster.ep_attribute,
# DoublingPowerConfigurationCluster.ep_attribute,
"battery_percentage_remaining",
# TuyaDPType.VALUE,
),
11: DPToAttributeMapping(
TuyaMCUCluster.ep_attribute,
"time_left",
# TuyaDPType.VALUE,
),
12: DPToAttributeMapping(
TuyaMCUCluster.ep_attribute,
"state",
# TuyaDPType.VALUE,
),
15: DPToAttributeMapping(
TuyaMCUCluster.ep_attribute,
"last_valve_open_duration",
# TuyaDPType.VALUE,
),
}
data_point_handlers = {
1: "_dp_2_attr_update",
5: "_dp_2_attr_update",
6: "_dp_2_attr_update",
7: "_dp_2_attr_update",
11: "_dp_2_attr_update",
12: "_dp_2_attr_update",
15: "_dp_2_attr_update",
}
class TuyaValve(CustomDevice):
"""Tuya valve device."""
def __init__(self, *args, **kwargs):
"""Init device."""
self.battery_bus = Bus()
super().__init__(*args, **kwargs)
signature = {
MODELS_INFO: [("_TZE200_2wg5qrjy", "TS0601")],
# SizePrefixedSimpleDescriptor(endpoint=1, profile=260, device_type=81, device_version=1,
# input_clusters=[0, 4, 5, 61184], output_clusters=[25, 10])
ENDPOINTS: {
1: {
PROFILE_ID: zha.PROFILE_ID,
DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
TuyaValveManufCluster.cluster_id,
],
OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
}
},
}
replacement = {
ENDPOINTS: {
1: {
DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
TuyaOnOff,
TuyaValveWaterConsumed,
TuyaPowerConfigurationCluster,
# DoublingPowerConfigurationCluster,
TuyaValveManufCluster,
],
OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
}
}
}
- HomeAssistant neustarten.
Damit sollte es funktionieren.