|
1 | 1 | """Module for Schneider Electric devices quirks."""
|
2 | 2 | import logging
|
3 | 3 |
|
4 |
| -from zigpy.quirks import CustomCluster, CustomDevice |
| 4 | +from zigpy.quirks import CustomCluster |
5 | 5 | import zigpy.types as t
|
6 | 6 | from zigpy.zcl.clusters.closures import WindowCovering
|
7 |
| - |
8 |
| -from zhaquirks import Bus, EventableCluster, LocalDataCluster |
| 7 | +from zigpy.zcl.clusters.general import Basic |
| 8 | +from zigpy.zcl.clusters.homeautomation import Diagnostic |
9 | 9 |
|
10 | 10 | _LOGGER = logging.getLogger(__name__)
|
11 | 11 |
|
12 | 12 | SE = "Schneider Electric"
|
13 | 13 |
|
| 14 | + |
14 | 15 | class SEManufCluster(CustomCluster):
|
15 | 16 | """Schneider Electric manufacturer specific cluster."""
|
16 | 17 |
|
17 | 18 | name = "Schneider Electric Manufacturer Specicific"
|
18 | 19 | ep_attribute = "schneider_electric_manufacturer"
|
19 | 20 |
|
20 | 21 |
|
| 22 | +class SEBasicCluster(SEManufCluster, Basic): |
| 23 | + ATT_ID_E001 = 0xE001 |
| 24 | + ATT_ID_E002 = 0xE002 |
| 25 | + ATT_ID_E004 = 0xE004 |
| 26 | + ATT_ID_E007 = 0xE007 |
| 27 | + ATT_ID_E008 = 0xE008 |
| 28 | + ATT_ID_E009 = 0xE009 |
| 29 | + ATT_ID_E00A = 0xE00A |
| 30 | + ATT_ID_E00B = 0xE00B |
| 31 | + |
| 32 | + attributes = Basic.attributes.copy() |
| 33 | + |
| 34 | + attributes.update( |
| 35 | + { |
| 36 | + ATT_ID_E001: ("57345", t.CharacterString) |
| 37 | + }, # attribute_name:"57345" # ex: "002.004.016 R |
| 38 | + { |
| 39 | + ATT_ID_E002: ("57346", t.CharacterString) |
| 40 | + }, # attribute_name:"57346" # ex: "001.000.000" |
| 41 | + { |
| 42 | + ATT_ID_E004: ("57348", t.CharacterString) |
| 43 | + }, # attribute_name:"57348" # ex: "213249FEFF5ECFD" |
| 44 | + {ATT_ID_E007: ("57351", t.enum16)}, # attribute_name:"57351" |
| 45 | + { |
| 46 | + ATT_ID_E008: ("57352", t.CharacterString) |
| 47 | + }, # attribute_name:"57352" # ex: "Wiser Light" |
| 48 | + { |
| 49 | + ATT_ID_E009: ("57353", t.CharacterString) |
| 50 | + }, # attribute_name:"57353" # ex: "NHPB/SHUTTER/1" |
| 51 | + { |
| 52 | + ATT_ID_E00A: ("57354", t.CharacterString) |
| 53 | + }, # attribute_name:"57354" # ex: "Wiser Home" |
| 54 | + {ATT_ID_E00B: ("57355", t.CharacterString)}, # attribute_name:"57355" |
| 55 | + ) |
| 56 | + |
| 57 | + |
21 | 58 | class SEManufSwitchCluster(SEManufCluster):
|
22 | 59 | name = "Schneider Electric Manufacturer Specicific"
|
23 | 60 | cluster_id = 0xFF17
|
24 | 61 |
|
| 62 | + ATT_ID_0000 = 0x0000 |
| 63 | + ATT_ID_0001 = 0x0001 |
| 64 | + ATT_ID_0010 = 0x0010 |
| 65 | + ATT_ID_0011 = 0x0011 |
| 66 | + ATT_ID_0020 = 0x0020 |
| 67 | + ATT_ID_0021 = 0x0021 |
| 68 | + ATT_ID_FFFD = 0xFFFD |
| 69 | + |
| 70 | + attributes = { |
| 71 | + {ATT_ID_0000: ("0", t.enum8)}, # attribute_name:"0" |
| 72 | + {ATT_ID_0001: ("1", t.enum8)}, # attribute_name:"1" |
| 73 | + {ATT_ID_0010: ("16", t.uint8_t)}, # attribute_name:"16" |
| 74 | + {ATT_ID_0011: ("17", t.uint16_t)}, # attribute_name:"17" |
| 75 | + {ATT_ID_0020: ("32", t.uint8_t)}, # attribute_name:"32" |
| 76 | + {ATT_ID_0021: ("33", t.uint16_t)}, # attribute_name:"33" |
| 77 | + {ATT_ID_FFFD: ("65533", t.uint16_t)}, # attribute_name:"65533" |
| 78 | + } |
25 | 79 |
|
26 |
| -class SEWindowCoverControl(CustomCluster, WindowCovering): |
| 80 | + |
| 81 | +class SEWindowCover(CustomCluster, WindowCovering): |
27 | 82 | """Manufacturer Specific Cluster of Device cover."""
|
28 | 83 |
|
| 84 | + ATT_ID_FFFD = 0xFFFD |
| 85 | + ATT_ID_E000 = 0xE000 |
| 86 | + ATT_ID_E010 = 0xE010 |
| 87 | + ATT_ID_E012 = 0xE012 |
| 88 | + ATT_ID_E013 = 0xE013 |
| 89 | + ATT_ID_E014 = 0xE014 |
| 90 | + ATT_ID_E015 = 0xE015 |
| 91 | + ATT_ID_E016 = 0xE016 |
| 92 | + ATT_ID_E017 = 0xE017 |
| 93 | + |
29 | 94 | attributes = WindowCovering.attributes.copy()
|
30 | 95 |
|
31 |
| - attributes.update({0xE000: ("lift_duration", t.uint16_t)}) |
32 |
| - |
33 |
| - # def __init__(self, *args, **kwargs): |
34 |
| - # """Initialize instance.""" |
35 |
| - # super().__init__(*args, **kwargs) |
36 |
| - # self.endpoint.device.cover_bus.add_listener(self) |
37 |
| - |
38 |
| - # def cover_event(self, attribute, value): |
39 |
| - # """Event listener for cover events.""" |
40 |
| - # if attribute == "lift_duration": |
41 |
| - # lift_duration_attr = self._attr_cache.get("lift_duration") == 1 |
42 |
| - # self._update_attribute(attribute, value) |
43 |
| - # _LOGGER.debug( |
44 |
| - # "%s Schneider Attribute Cache : [%s]", |
45 |
| - # self.endpoint.device.ieee, |
46 |
| - # self._attr_cache, |
47 |
| - # ) |
| 96 | + attributes.update( |
| 97 | + { |
| 98 | + ATT_ID_FFFD: ("57344", t.uint16_t) |
| 99 | + }, # attribute_name:"57344" # seems to be lift_duration |
| 100 | + {ATT_ID_E000: ("65533", t.uint16_t)}, # attribute_name:"65533" |
| 101 | + {ATT_ID_E010: ("57360", t.bitmap8)}, # attribute_name:"57360" |
| 102 | + {ATT_ID_E012: ("57362", t.uint16_t)}, # attribute_name:"57362" |
| 103 | + {ATT_ID_E013: ("57363", t.bitmap8)}, # attribute_name:"57363" |
| 104 | + {ATT_ID_E014: ("57364", t.uint16_t)}, # attribute_name:"57364" |
| 105 | + {ATT_ID_E015: ("57365", t.uint16_t)}, # attribute_name:"57365" |
| 106 | + {ATT_ID_E016: ("57366", t.uint16_t)}, # attribute_name:"57366" |
| 107 | + {ATT_ID_E017: ("57367", t.uint8_t)}, # attribute_name:"57367" |
| 108 | + ) |
| 109 | + |
| 110 | + |
| 111 | +class SEDiagnostic(CustomCluster, Diagnostic): |
| 112 | + |
| 113 | + ATT_ID_FFFD = 0xFFFD |
| 114 | + |
| 115 | + attributes = Diagnostic.attributes.copy() |
| 116 | + |
| 117 | + # TODO: Check -> this attr don't seems to be manufacturer related (no "manf_id") |
| 118 | + attributes.update( |
| 119 | + {ATT_ID_FFFD: ("65533", t.uint16_t)}, # attribute_name:"65533" |
| 120 | + ) |
0 commit comments