Updated the support of Tuya Circuit Breaker 'dlq' (#63519)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
parent
10e2caf9e6
commit
77ccf46c9b
4 changed files with 104 additions and 1 deletions
|
@ -1,8 +1,10 @@
|
||||||
"""Tuya Home Assistant Base Device Model."""
|
"""Tuya Home Assistant Base Device Model."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import base64
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
import json
|
import json
|
||||||
|
import struct
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from tuya_iot import TuyaDevice, TuyaDeviceManager
|
from tuya_iot import TuyaDevice, TuyaDeviceManager
|
||||||
|
@ -99,6 +101,17 @@ class ElectricityTypeData:
|
||||||
"""Load JSON string and return a ElectricityTypeData object."""
|
"""Load JSON string and return a ElectricityTypeData object."""
|
||||||
return cls(**json.loads(data.lower()))
|
return cls(**json.loads(data.lower()))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_raw(cls, data: str) -> ElectricityTypeData:
|
||||||
|
"""Decode base64 string and return a ElectricityTypeData object."""
|
||||||
|
raw = base64.b64decode(data)
|
||||||
|
voltage = struct.unpack(">H", raw[0:2])[0] / 10.0
|
||||||
|
electriccurrent = struct.unpack(">L", b"\x00" + raw[2:5])[0] / 1000.0
|
||||||
|
power = struct.unpack(">L", b"\x00" + raw[5:8])[0] / 1000.0
|
||||||
|
return cls(
|
||||||
|
electriccurrent=str(electriccurrent), power=str(power), voltage=str(voltage)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TuyaEntity(Entity):
|
class TuyaEntity(Entity):
|
||||||
"""Tuya base device."""
|
"""Tuya base device."""
|
||||||
|
|
|
@ -312,6 +312,7 @@ class DPCode(StrEnum):
|
||||||
TOTAL_CLEAN_AREA = "total_clean_area"
|
TOTAL_CLEAN_AREA = "total_clean_area"
|
||||||
TOTAL_CLEAN_COUNT = "total_clean_count"
|
TOTAL_CLEAN_COUNT = "total_clean_count"
|
||||||
TOTAL_CLEAN_TIME = "total_clean_time"
|
TOTAL_CLEAN_TIME = "total_clean_time"
|
||||||
|
TOTAL_FORWARD_ENERGY = "total_forward_energy"
|
||||||
UV = "uv" # UV sterilization
|
UV = "uv" # UV sterilization
|
||||||
VA_BATTERY = "va_battery"
|
VA_BATTERY = "va_battery"
|
||||||
VA_HUMIDITY = "va_humidity"
|
VA_HUMIDITY = "va_humidity"
|
||||||
|
|
|
@ -589,6 +589,88 @@ SENSORS: dict[str, tuple[TuyaSensorEntityDescription, ...]] = {
|
||||||
subkey="voltage",
|
subkey="voltage",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
# Circuit Breaker
|
||||||
|
# https://developer.tuya.com/en/docs/iot/dlq?id=Kb0kidk9enyh8
|
||||||
|
"dlq": (
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.TOTAL_FORWARD_ENERGY,
|
||||||
|
name="Total Energy",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_A,
|
||||||
|
name="Phase A Current",
|
||||||
|
device_class=SensorDeviceClass.CURRENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
subkey="electriccurrent",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_A,
|
||||||
|
name="Phase A Power",
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=POWER_KILO_WATT,
|
||||||
|
subkey="power",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_A,
|
||||||
|
name="Phase A Voltage",
|
||||||
|
device_class=SensorDeviceClass.VOLTAGE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||||
|
subkey="voltage",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_B,
|
||||||
|
name="Phase B Current",
|
||||||
|
device_class=SensorDeviceClass.CURRENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
subkey="electriccurrent",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_B,
|
||||||
|
name="Phase B Power",
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=POWER_KILO_WATT,
|
||||||
|
subkey="power",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_B,
|
||||||
|
name="Phase B Voltage",
|
||||||
|
device_class=SensorDeviceClass.VOLTAGE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||||
|
subkey="voltage",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_C,
|
||||||
|
name="Phase C Current",
|
||||||
|
device_class=SensorDeviceClass.CURRENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
subkey="electriccurrent",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_C,
|
||||||
|
name="Phase C Power",
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=POWER_KILO_WATT,
|
||||||
|
subkey="power",
|
||||||
|
),
|
||||||
|
TuyaSensorEntityDescription(
|
||||||
|
key=DPCode.PHASE_C,
|
||||||
|
name="Phase C Voltage",
|
||||||
|
device_class=SensorDeviceClass.VOLTAGE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||||
|
subkey="voltage",
|
||||||
|
),
|
||||||
|
),
|
||||||
# Robot Vacuum
|
# Robot Vacuum
|
||||||
# https://developer.tuya.com/en/docs/iot/fsd?id=K9gf487ck1tlo
|
# https://developer.tuya.com/en/docs/iot/fsd?id=K9gf487ck1tlo
|
||||||
"sd": (
|
"sd": (
|
||||||
|
@ -765,6 +847,7 @@ class TuyaSensorEntity(TuyaEntity, SensorEntity):
|
||||||
"String",
|
"String",
|
||||||
"Enum",
|
"Enum",
|
||||||
"Json",
|
"Json",
|
||||||
|
"Raw",
|
||||||
):
|
):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -794,5 +877,11 @@ class TuyaSensorEntity(TuyaEntity, SensorEntity):
|
||||||
values = ElectricityTypeData.from_json(value)
|
values = ElectricityTypeData.from_json(value)
|
||||||
return getattr(values, self.entity_description.subkey)
|
return getattr(values, self.entity_description.subkey)
|
||||||
|
|
||||||
|
if self._status_range.type == "Raw":
|
||||||
|
if self.entity_description.subkey is None:
|
||||||
|
return None
|
||||||
|
values = ElectricityTypeData.from_raw(value)
|
||||||
|
return getattr(values, self.entity_description.subkey)
|
||||||
|
|
||||||
# Valid string or enum value
|
# Valid string or enum value
|
||||||
return value
|
return value
|
||||||
|
|
|
@ -94,7 +94,7 @@ SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
|
||||||
entity_category=EntityCategory.CONFIG,
|
entity_category=EntityCategory.CONFIG,
|
||||||
),
|
),
|
||||||
SwitchEntityDescription(
|
SwitchEntityDescription(
|
||||||
key=DPCode.SWITCH_1,
|
key=DPCode.SWITCH,
|
||||||
name="Switch",
|
name="Switch",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Reference in a new issue