-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathOpen3EdatapointsVariants.py
More file actions
154 lines (152 loc) · 203 KB
/
Copy pathOpen3EdatapointsVariants.py
File metadata and controls
154 lines (152 loc) · 203 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"""
List of variants of data points having other lengths.
Typically depends on device and/or Viessmann software version.
"""
from Open3Ecodecs import *
# Unknown_* fields in the ZigBee device and Room records below use offset-based names:
# Unknown_<offset> = a single unknown byte at that 0-based payload offset
# Unknown_<start>_<end> = an unknown byte range (inclusive)
# The same offset keeps the same name across device types, so they line up when diffing dumps.
dataIdentifiers = {
"name": "variants",
"Version": "20260630",
"dids" :
{
627 : { 12: O3EUtf8(12, "CentralHeatingOneCircuitName", acc="ro")},
628 : { 12: O3EUtf8(12, "CentralHeatingTwoCircuitName", acc="ro")},
629 : { 12: O3EUtf8(12, "CentralHeatingThreeCircuitName", acc="ro")},
630 : { 12: O3EUtf8(12, "CentralHeatingFourCircuitName", acc="ro")},
1006 : { 3: O3EComplexType(3, "TargetQuickMode", [O3EByteVal(1, "SetModeOneTimesHotWater"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], desc="External request for one-time charging of domestic hot water (0: off, 2: one-time request)", info="[Link](https://github.com/open3e/open3e/discussions/318)", acc="rw")},
1007 : { 3: O3EComplexType(3, "CurrentQuickMode", [O3EByteVal(1, "ModeOneTimesHotWater"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], desc="State of external request for one-time charging of domestic hot water (0: off, 2: on)", info="[Link](https://github.com/open3e/open3e/discussions/318)", acc="ro")},
1008 : { 3: O3EComplexType(3, "MixerOneCircuitTargetQuickMode", [O3EByteVal(1, "SetModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="rw")},
1009 : { 3: O3EComplexType(3, "MixerTwoCircuitTargetQuickMode", [O3EByteVal(1, "SetModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="rw")},
1010 : { 3: O3EComplexType(3, "MixerThreeCircuitTargetQuickMode", [O3EByteVal(1, "SetModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="rw")},
1011 : { 3: O3EComplexType(3, "MixerFourCircuitTargetQuickMode", [O3EByteVal(1, "SetModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="rw")},
1024 : { 3: O3EComplexType(3, "MixerOneCircuitCurrentQuickMode", [O3EByteVal(1, "ModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="ro")},
1025 : { 3: O3EComplexType(3, "MixerTwoCircuitCurrentQuickMode", [O3EByteVal(1, "ModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="ro")},
1026 : { 3: O3EComplexType(3, "MixerThreeCircuitCurrentQuickMode", [O3EByteVal(1, "ModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="ro")},
1027 : { 3: O3EComplexType(3, "MixerFourCircuitCurrentQuickMode", [O3EByteVal(1, "ModeParty"), O3EByteVal(1, "State"), RawCodec(1, "Unknown")], acc="ro")},
1603 : { 12: O3EComplexType(12, "PointOfCommonCouplingPower", [O3EInt16(2, "ActivePower", scale=1.0, signed=True, unit="W", desc="Active Power"), O3EInt16(2, "ReactivePower", scale=1.0, signed=True, unit="VA", desc="Reactive Power"), O3EInt16(2, "ActivePowerDup", scale=1.0, signed=True, unit="W", desc="Active Power Duplicate"), O3EInt16(2, "PadZeros", scale=1.0, signed=True), O3EInt16(2, "ReactivePowerDup", scale=1.0, signed=True, unit="VA", desc="Reactive Power Duplicate"), O3EInt16(2, "PadOnes", scale=1.0, signed=True)], desc="Actual Power at Point of Common Coupling", acc="ro"), # MyHomeMyData, see discussion #315
},
1884 : { 85: O3EComplexType(85, "RoomOneProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"), # (str, "name"); (o5cVar, "roomType"); (h5cVar, "lockMode"); (c5cVar, "roomControlAlgorithmType"); (list, "supplyChannel"); (list2, "roomDevices");
},
1887 : { 85: O3EComplexType(85, "RoomTwoProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1890 : { 85: O3EComplexType(85, "RoomThreeProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1893 : { 85: O3EComplexType(85, "RoomFourProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1896 : { 85: O3EComplexType(85, "RoomFiveProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1899 : { 85: O3EComplexType(85, "RoomSixProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1902 : { 85: O3EComplexType(85, "RoomSevenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1905 : { 85: O3EComplexType(85, "RoomEightProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1908 : { 85: O3EComplexType(85, "RoomNineProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1911 : { 85: O3EComplexType(85, "RoomTenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1914 : { 85: O3EComplexType(85, "RoomElevenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1917 : { 85: O3EComplexType(85, "RoomTwelveProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1920 : { 85: O3EComplexType(85, "RoomThirteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1923 : { 85: O3EComplexType(85, "RoomFourteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1926 : { 85: O3EComplexType(85, "RoomFifteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1929 : { 85: O3EComplexType(85, "RoomSixteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1932 : { 85: O3EComplexType(85, "RoomSeventeenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1935 : { 85: O3EComplexType(85, "RoomEighteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1938 : { 85: O3EComplexType(85, "RoomNineteenProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
1941 : { 85: O3EComplexType(85, "RoomTwentyProperty", [RawCodec(1, "Unknown_00"), O3EUtf8(38, "Roomname"), RawCodec(4, "Unknown_39_42"), O3EEnum(1, "Roomtype", "Roomtypes"), O3EEnum(1, "ChildLockActive", "DeviceChildLockStates", desc="Room-side mirror of the child lock of the assigned TRV (1 = active); off44, was an unknown byte; proven by one-factor test"), O3EEnum(1, "TemperatureControl", "TemperatureControlLevels", desc="Level 1 (Eco) .. 6 (Komfort), factory default 4"), RawCodec(1, "Unknown_46"), RawCodec(8, "Unknown_47_54"), O3EInt8(1, "ZigbeeDeviceLinkOne", desc="Linked ZigBee device #1 (1-based index, 0 = none)"), O3EInt8(1, "ZigbeeDeviceLinkTwo", desc="Linked ZigBee device #2 (1-based index, 0 = none)"), RawCodec(18, "Unknown_57_74", desc="maybe more linked zigbee devices or other room properties"), O3EEnum(1, "WindowDetection", "WindowDetectionStates"), RawCodec(9, "Unknown_76_84")], desc="DeviceLinkOne/Two: 1-based index of linked ZigBee device (0 = not linked). DID of linked device: N<=20: Property=2084+(N-1)*3, N>=21: Property=2260+(N-21)*3; Setpoint=+1, CurrentValues=+2", acc="ro"),
},
2086 : { 68: O3EComplexType(68, "ZigBeeOneDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2089 : { 68: O3EComplexType(68, "ZigBeeTwoDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2092 : { 68: O3EComplexType(68, "ZigBeeThreeDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2095 : { 68: O3EComplexType(68, "ZigBeeFourDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2098 : { 68: O3EComplexType(68, "ZigBeeFiveDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2101 : { 68: O3EComplexType(68, "ZigBeeSixDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2104 : { 68: O3EComplexType(68, "ZigBeeSevenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2107 : { 68: O3EComplexType(68, "ZigBeeEightDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2110 : { 68: O3EComplexType(68, "ZigBeeNineDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2113 : { 68: O3EComplexType(68, "ZigBeeTenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2116 : { 68: O3EComplexType(68, "ZigBeeElevenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2119 : { 68: O3EComplexType(68, "ZigBeeTwelveDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2122 : { 68: O3EComplexType(68, "ZigBeeThirteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2125 : { 68: O3EComplexType(68, "ZigBeeFourteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2128 : { 68: O3EComplexType(68, "ZigBeeFifteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2131 : { 68: O3EComplexType(68, "ZigBeeSixteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2134 : { 68: O3EComplexType(68, "ZigBeeSeventeenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2137 : { 68: O3EComplexType(68, "ZigBeeEighteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2140 : { 68: O3EComplexType(68, "ZigBeeNineteenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2143 : { 68: O3EComplexType(68, "ZigBeeTwentyDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2262 : { 68: O3EComplexType(68, "ZigBeeTwentyOneDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2265 : { 68: O3EComplexType(68, "ZigBeeTwentyTwoDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2268 : { 68: O3EComplexType(68, "ZigBeeTwentyThreeDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2271 : { 68: O3EComplexType(68, "ZigBeeTwentyFourDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2274 : { 68: O3EComplexType(68, "ZigBeeTwentyFiveDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2277 : { 68: O3EComplexType(68, "ZigBeeTwentySixDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2280 : { 68: O3EComplexType(68, "ZigBeeTwentySevenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2283 : { 68: O3EComplexType(68, "ZigBeeTwentyEightDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2286 : { 68: O3EComplexType(68, "ZigBeeTwentyNineDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2289 : { 68: O3EComplexType(68, "ZigBeeThirtyDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2292 : { 68: O3EComplexType(68, "ZigBeeThirtyOneDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2295 : { 68: O3EComplexType(68, "ZigBeeThirtyTwoDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2298 : { 68: O3EComplexType(68, "ZigBeeThirtyThreeDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2301 : { 68: O3EComplexType(68, "ZigBeeThirtyFourDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2304 : { 68: O3EComplexType(68, "ZigBeeThirtyFiveDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2307 : { 68: O3EComplexType(68, "ZigBeeThirtySixDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2310 : { 68: O3EComplexType(68, "ZigBeeThirtySevenDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2313 : { 68: O3EComplexType(68, "ZigBeeThirtyEightDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2316 : { 68: O3EComplexType(68, "ZigBeeThirtyNineDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
2319 : { 68: O3EComplexType(68, "ZigBeeFourtyDeviceCurrentValues", [RawCodec(1, "Unknown_00"), O3EInt8(1, "RSSI", signed=True, scale=1.0, unit="dBm", desc="Radio signal strength (signed dBm). SignalLevel is the percent representation of this value. 0x00 for FBH zones (no own radio)."), O3EInt8(1, "BatteryLevel", unit="%"), RawCodec(37, "Unknown_03_39"), O3EInt8(1, "SignalLevel", scale=2.55, decimals=2, unit="%"), O3ESwitch(15, "ViCareDevice", "ViCareDeviceTypes", {0: RawCodec(14, "Unknown_42_55"), 1: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "Humidity", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 2: O3EComplexType(14, "Data", [O3EInt16(2, "ActualTemperature", scale=10, unit="°C"), O3EInt8(1, "ValveOpening", unit="%"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "DeviceDisplayTurned", "DeviceDisplayModeStates"), RawCodec(5, "Unknown_49_53"), O3EEnum(1, "DeviceChildLockActive", "DeviceChildLockStates", desc="type2 (TRV) only: child lock (0/1, proven one-factor test). Mirrored in RoomProperty off44 (ChildLockActive)."), O3EInt8(1, "DeviceTemperatureSetpoint", scale=10, unit="°C", desc="type2 (TRV) only: TRV own setpoint (0xcd=205 -> 20.5C, scale=10). A room manual setpoint and the program/manual flag are NOT in these records (separate controller room DID).")]), 3: O3EComplexType(14, "Data", [O3EInt16(2, "FlowTemperature", scale=10, unit="°C", desc="int16 LE flow temperature, scale 10. Confirmed by live read: bytes 1e 01 -> 28.6 C. off43 is the HIGH BYTE of this value, not a separate state (flow exceeds 25.6 C, e.g. heating). The e3oncan codec reads off43 alone as CurrentWorkingMode, which is therefore just the temperature band (0:<25.6, 1:25.6-51.2, 2:51.2-76.8 C), not a real mode."), RawCodec(1, "Unknown_44"), RawCodec(1, "Unknown_45"), RawCodec(2, "Unknown_46_47"), O3EEnum(1, "OperatingMode", "ZigBeeOperatingModes", desc="off48 state byte. Observed 0 (Standby, flow 28.6 C) and 2 (Cooling). 1 (Heating) not yet confirmed on a clean capture."), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 4: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")]), 5: O3EComplexType(14, "Data", [RawCodec(1, "Unknown_42"), O3EInt8(1, "Demand", unit="%", desc="generic zone demand (0/100). Heat vs cool direction comes from the Verteiler OperatingMode, not this byte: reads 100 in cooling too. Proven via condensation cutoff (demand 0 when dew point >= flow temp)."), RawCodec(1, "Unknown_44"), O3EEnum(1, "ValveState", "ValvePositionLevels"), RawCodec(2, "Unknown_46_47"), RawCodec(1, "Unknown_48"), RawCodec(5, "Unknown_49_53"), RawCodec(1, "Unknown_54"), RawCodec(1, "Unknown_55")])}, default=RawCodec(14, "Unknown_42_55"), desc="off41-55, device-dependent. type0: empty slot. type1 (Climate sensor): room temperature (int16) + humidity. type2 (TRV): room temperature (int16) + valve opening %, DisplayTurned (off48), plus ChildLockActive (off54) and DeviceTemperatureSetpoint (off55, scale=10). type3 (Floor thermostat/Verteiler): FlowTemperature is int16 at off42-43 (off43 = high byte, confirmed by live read 28.6 C); OperatingMode at off48. type4/5 (actuator NC/NO): generic Demand % at off43, plus ValveState at off45 (actuator energized 0/1). off45 reads 0 on type1/2/3 (kept as Unknown_45). Unknown_46_47 (off46-47) and Unknown_49_53 (off49-53) always present. off48 is DisplayTurned only on type2, OperatingMode on type3, raw elsewhere. off54/55 carry child lock + setpoint only on type2; raw on all other types."), RawCodec(1, "Unknown_56"), RawCodec(8, "ParentDeviceSerialnumber", desc="EUI64 of ZigBee routing parent (Repeater/Verteiler). Devices connected directly to the gateway show the coordinator EUI of the gateway radio module, which does not appear in any device list."), RawCodec(3, "Unknown_65_67")], acc="ro"), # fixed per discussion #235, definition by Backes89
},
}
}