11
11
import zigpy .types as t
12
12
from zigpy .zcl import foundation
13
13
from zigpy .zcl .clusters .general import LevelControl , OnOff
14
+ from zigpy .zcl .clusters .measurement import SoilMoisture , TemperatureMeasurement
14
15
15
16
from zhaquirks import Bus , DoublingPowerConfigurationCluster
16
17
29
30
TuyaEnchantableCluster ,
30
31
TuyaLocalCluster ,
31
32
TuyaNewManufCluster ,
33
+ TuyaPowerConfigurationCluster2AAA ,
32
34
TuyaTimePayload ,
33
35
)
34
36
@@ -730,6 +732,14 @@ class TuyaLevelControlManufCluster(TuyaMCUCluster):
730
732
}
731
733
732
734
735
+ class TuyaTemperatureMeasurement (TemperatureMeasurement , TuyaLocalCluster ):
736
+ """Tuya local TemperatureMeasurement cluster."""
737
+
738
+
739
+ class TuyaSoilMoisture (SoilMoisture , TuyaLocalCluster ):
740
+ """Tuya local SoilMoisture cluster with a device RH_MULTIPLIER factor if required."""
741
+
742
+
733
743
class TuyaQuirkBuilder (QuirkBuilder ):
734
744
"""Tuya QuirkBuilder."""
735
745
@@ -741,49 +751,10 @@ def __init__(
741
751
self .tuya_dp_to_attribute : dict [int , DPToAttributeMapping ] = {}
742
752
super ().__init__ (manufacturer , model , registry )
743
753
744
- def add_tuya_dp (
754
+ def battery (
745
755
self ,
746
756
dp_id : int ,
747
- ep_attribute : str ,
748
- attribute_name : Union [str , tuple ],
749
- converter : Optional [
750
- Callable [
751
- [
752
- Any ,
753
- ],
754
- Any ,
755
- ]
756
- ] = None ,
757
- dp_converter : Optional [
758
- Callable [
759
- [
760
- Any ,
761
- ],
762
- Any ,
763
- ]
764
- ] = None ,
765
- endpoint_id : Optional [int ] = None ,
766
- dp_handler : str = "_dp_2_attr_update" ,
767
- ) -> QuirkBuilder :
768
- """Add Tuya DP Converter."""
769
- self .tuya_dp_to_attribute .update (
770
- {
771
- dp_id : DPToAttributeMapping (
772
- ep_attribute ,
773
- attribute_name ,
774
- converter = converter ,
775
- dp_converter = dp_converter ,
776
- endpoint_id = endpoint_id ,
777
- )
778
- }
779
- )
780
- self .tuya_data_point_handlers .update ({dp_id : dp_handler })
781
- return self
782
-
783
- def add_battery_config (
784
- self ,
785
- dp_id : int ,
786
- power_cfg : PowerConfiguration ,
757
+ power_cfg : PowerConfiguration = TuyaPowerConfigurationCluster2AAA ,
787
758
converter : Optional [
788
759
Callable [
789
760
[
@@ -794,7 +765,7 @@ def add_battery_config(
794
765
] = lambda x : x * 2 ,
795
766
) -> QuirkBuilder :
796
767
"""Add a Tuya Battery Power Configuration."""
797
- self .add_tuya_dp (
768
+ self .tuya_dp (
798
769
dp_id ,
799
770
power_cfg .ep_attribute ,
800
771
"battery_percentage_remaining" ,
@@ -803,10 +774,10 @@ def add_battery_config(
803
774
self .adds (power_cfg )
804
775
return self
805
776
806
- def add_soil_moisture_config (
777
+ def soil_moisture (
807
778
self ,
808
779
dp_id : int ,
809
- soil_cfg : TuyaLocalCluster ,
780
+ soil_cfg : TuyaLocalCluster = TuyaSoilMoisture ,
810
781
converter : Optional [
811
782
Callable [
812
783
[
@@ -826,10 +797,10 @@ def add_soil_moisture_config(
826
797
self .adds (soil_cfg )
827
798
return self
828
799
829
- def add_temperature_config (
800
+ def temperature (
830
801
self ,
831
802
dp_id : int ,
832
- temp_cfg : TuyaLocalCluster ,
803
+ temp_cfg : TuyaLocalCluster = TuyaTemperatureMeasurement ,
833
804
converter : Optional [
834
805
Callable [
835
806
[
@@ -849,6 +820,45 @@ def add_temperature_config(
849
820
self .adds (temp_cfg )
850
821
return self
851
822
823
+ def tuya_dp (
824
+ self ,
825
+ dp_id : int ,
826
+ ep_attribute : str ,
827
+ attribute_name : Union [str , tuple ],
828
+ converter : Optional [
829
+ Callable [
830
+ [
831
+ Any ,
832
+ ],
833
+ Any ,
834
+ ]
835
+ ] = None ,
836
+ dp_converter : Optional [
837
+ Callable [
838
+ [
839
+ Any ,
840
+ ],
841
+ Any ,
842
+ ]
843
+ ] = None ,
844
+ endpoint_id : Optional [int ] = None ,
845
+ dp_handler : str = "_dp_2_attr_update" ,
846
+ ) -> QuirkBuilder :
847
+ """Add Tuya DP Converter."""
848
+ self .tuya_dp_to_attribute .update (
849
+ {
850
+ dp_id : DPToAttributeMapping (
851
+ ep_attribute ,
852
+ attribute_name ,
853
+ converter = converter ,
854
+ dp_converter = dp_converter ,
855
+ endpoint_id = endpoint_id ,
856
+ )
857
+ }
858
+ )
859
+ self .tuya_data_point_handlers .update ({dp_id : dp_handler })
860
+ return self
861
+
852
862
def add_to_registry (self ) -> QuirksV2RegistryEntry :
853
863
"""Build the quirks v2 registry entry."""
854
864
0 commit comments