diff --git a/zhaquirks/sinope/switch.py b/zhaquirks/sinope/switch.py index e3eada7b84..169d9ffbf0 100644 --- a/zhaquirks/sinope/switch.py +++ b/zhaquirks/sinope/switch.py @@ -215,6 +215,9 @@ class AttributeDefs(foundation.BaseAttributeDefs): max_measured_temp: Final = foundation.ZCLAttributeDef( id=0x007D, type=t.int16s, access="rp", is_manufacturer_specific=True ) + water_temp_protection_type: Final = foundation.ZCLAttributeDef( + id=0x007E, type=t.enum8, access="rwp", is_manufacturer_specific=True + ) current_summation_delivered: Final = foundation.ZCLAttributeDef( id=0x0090, type=t.uint32_t, access="rp", is_manufacturer_specific=True ) diff --git a/zhaquirks/sinope/thermostat.py b/zhaquirks/sinope/thermostat.py index 3a0d3515b5..3b9b0f7bd8 100644 --- a/zhaquirks/sinope/thermostat.py +++ b/zhaquirks/sinope/thermostat.py @@ -51,6 +51,7 @@ class Display(t.enum8): Auto = 0x00 Setpoint = 0x01 Outside_temperature = 0x02 + Room_temperature = 0x04 class FloorMode(t.enum8): @@ -64,7 +65,9 @@ class AuxMode(t.enum8): """Aux_output_mode values.""" Off = 0x00 - On = 0x01 + On_15m = 0x01 + On_15s = 0x02 + Exp_module = 0x03 class PumpStatus(t.uint8_t): @@ -97,6 +100,44 @@ class TimeFormat(t.enum8): Format_12h = 0x01 +class WeatherIcon(t.enum8): + """weather_icons values.""" + + Cloud = 0x05 + Cloud2 = 0x08 + Cloud3 = 0x09 + Cloudfog = 0x11 + Cloudlightning = 0x0B + Cloudlightning2 = 0x0C + Cloudmoon = 0x13 + Cloudmoon2 = 0x14 + Cloudmoon3 = 0x15 + Cloudrain = 0x0A + Cloudrain2 = 0x1C + Cloudrain3 = 0x1D + Cloudrainmoon = 0x17 + Cloudrainmoon2 = 0x18 + Cloudrainmoon3 = 0x19 + Cloudrainmoon4 = 0x1F + Cloudrainmoon5 = 0x21 + Cloudrainsun = 0x06 + Cloudrainsun2 = 0x07 + Cloudrainsun3 = 0x1E + Cloudrainsun4 = 0x20 + Cloudsnow = 0x0D + Cloudsnow2 = 0x0E + Cloudsnow3 = 0x0F + Cloudsnow4 = 0x10 + Cloudsnow5 = 0x16 + Cloudsnow6 = 0x1A + Cloudsun = 0x03 + Cloudsun2 = 0x04 + Hide = 0x00 + Moonstar = 0x12 + Sun = 0x01 + Sun2 = 0x02 + + class GfciStatus(t.enum8): """Gfci_status values.""" @@ -159,6 +200,13 @@ class CycleOutput(t.uint16_t): Off = 0xFFFF +class Language(t.enum8): + """Display_language values.""" + + En = 0x00 + Fr = 0x01 + + class SinopeTechnologiesManufacturerCluster(CustomCluster): """SinopeTechnologiesManufacturerCluster manufacturer cluster.""" @@ -167,9 +215,11 @@ class SinopeTechnologiesManufacturerCluster(CustomCluster): FloorMode: Final = FloorMode AuxMode: Final = AuxMode PumpStatus: Final = PumpStatus + Language: Final = Language LimitStatus: Final = LimitStatus SensorType: Final = SensorType TimeFormat: Final = TimeFormat + WeatherIcon: Final = WeatherIcon GfciStatus: Final = GfciStatus SystemMode: Final = SystemMode PumpDuration: Final = PumpDuration @@ -194,6 +244,9 @@ class AttributeDefs(foundation.BaseAttributeDefs): access="rp", is_manufacturer_specific=True, ) + display_language: Final = foundation.ZCLAttributeDef( + id=0x0005, type=Language, access="rwp", is_manufacturer_specific=True + ) outdoor_temp: Final = foundation.ZCLAttributeDef( id=0x0010, type=t.int16s, access="rwp", is_manufacturer_specific=True ) @@ -203,6 +256,9 @@ class AttributeDefs(foundation.BaseAttributeDefs): config_2nd_display: Final = foundation.ZCLAttributeDef( id=0x0012, type=Display, access="rwp", is_manufacturer_specific=True ) + weather_icons: Final = foundation.ZCLAttributeDef( + id=0x0013, type=WeatherIcon, access="rwp", is_manufacturer_specific=True + ) secs_since_2k: Final = foundation.ZCLAttributeDef( id=0x0020, type=t.uint32_t, access="rwp", is_manufacturer_specific=True ) @@ -218,8 +274,8 @@ class AttributeDefs(foundation.BaseAttributeDefs): eco_safety_temperature_delta: Final = foundation.ZCLAttributeDef( id=0x0073, type=t.uint8_t, access="rwp", is_manufacturer_specific=True ) - unknown_attr_1: Final = foundation.ZCLAttributeDef( - id=0x0101, type=Array, access="r", is_manufacturer_specific=True + unknown_attr_5: Final = foundation.ZCLAttributeDef( + id=0x0101, type=Array, access="rp", is_manufacturer_specific=True ) setpoint: Final = foundation.ZCLAttributeDef( id=0x0104, type=t.int16s, access="rw", is_manufacturer_specific=True @@ -278,6 +334,21 @@ class AttributeDefs(foundation.BaseAttributeDefs): report_local_temperature: Final = foundation.ZCLAttributeDef( id=0x012D, type=t.int16s, access="rp", is_manufacturer_specific=True ) + balance_point: Final = foundation.ZCLAttributeDef( + id=0x0134, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + timer_off: Final = foundation.ZCLAttributeDef( + id=0x0136, type=t.uint16_t, access="rwp", is_manufacturer_specific=True + ) + abs_min_heat_setpoint_limit: Final = foundation.ZCLAttributeDef( + id=0x0137, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + heat_lockout_temperature: Final = foundation.ZCLAttributeDef( + id=0x0139, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + cool_lockout_temperature: Final = foundation.ZCLAttributeDef( + id=0x013A, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) unknown_attr_11: Final = foundation.ZCLAttributeDef( id=0x013B, type=t.bitmap8, access="rp", is_manufacturer_specific=True ) @@ -287,9 +358,27 @@ class AttributeDefs(foundation.BaseAttributeDefs): unknown_attr_12: Final = foundation.ZCLAttributeDef( id=0x0202, type=t.enum8, access="r", is_manufacturer_specific=True ) + hc_model_mac_addr: Final = foundation.ZCLAttributeDef( + id=0x0267, type=t.EUI64, access="rwp", is_manufacturer_specific=True + ) + min_heat_setpoint_limit: Final = foundation.ZCLAttributeDef( + id=0x026B, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + max_heat_setpoint_limit: Final = foundation.ZCLAttributeDef( + id=0x026C, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + min_cool_setpoint_limit: Final = foundation.ZCLAttributeDef( + id=0x026D, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) + max_cool_setpoint_limit: Final = foundation.ZCLAttributeDef( + id=0x026E, type=t.int16s, access="rwp", is_manufacturer_specific=True + ) cycle_length: Final = foundation.ZCLAttributeDef( id=0x0281, type=CycleLength, access="rwp", is_manufacturer_specific=True ) + cool_cycle_length: Final = foundation.ZCLAttributeDef( + id=0x0282, type=CycleLength, access="rwp", is_manufacturer_specific=True + ) cluster_revision: Final = foundation.ZCL_CLUSTER_REVISION_ATTR @@ -736,3 +825,65 @@ class SinopeHPThermostats(CustomDevice): }, } } + + +class SinopeHCThermostats(CustomDevice): + """TH1134ZB-HC thermostats.""" + + signature = { + # + MODELS_INFO: [(SINOPE, "TH1134ZB-HC")], + ENDPOINTS: { + 1: { + PROFILE_ID: zha_p.PROFILE_ID, + DEVICE_TYPE: zha_p.DeviceType.THERMOSTAT, + INPUT_CLUSTERS: [ + Basic.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + Scenes.cluster_id, + Thermostat.cluster_id, + Fan.cluster_id, + UserInterface.cluster_id, + TemperatureMeasurement.cluster_id, + Metering.cluster_id, + ElectricalMeasurement.cluster_id, + Diagnostic.cluster_id, + SINOPE_MANUFACTURER_CLUSTER_ID, + ], + OUTPUT_CLUSTERS: [ + Identify.cluster_id, + Time.cluster_id, + Ota.cluster_id, + ], + } + }, + } + + replacement = { + ENDPOINTS: { + 1: { + INPUT_CLUSTERS: [ + Basic.cluster_id, + Identify.cluster_id, + Groups.cluster_id, + Scenes.cluster_id, + Fan.cluster_id, + UserInterface.cluster_id, + TemperatureMeasurement.cluster_id, + Metering.cluster_id, + Diagnostic.cluster_id, + SinopeTechnologiesElectricalMeasurementCluster, + SinopeTechnologiesThermostatCluster, + SinopeTechnologiesManufacturerCluster, + ], + OUTPUT_CLUSTERS: [ + Identify.cluster_id, + Time.cluster_id, + Ota.cluster_id, + ], + } + } + }