@@ -27,31 +27,44 @@ class BTHome:
2727 _local_name = ""
2828
2929 # See "Sensor Data" table at https://bthome.io/format/ Object ID column.
30- BATTERY_UINT8 = const (0x01 )
31- TEMPERATURE_SINT16 = const (0x02 )
32- HUMIDITY_UINT16 = const (0x03 )
33- PRESSURE_UINT24 = const (0x04 )
34- ILLUMINANCE_UINT24 = const (0x05 )
35- MASS_KG_UINT16 = const (0x06 )
36- MASS_LB_UINT16 = const (0x07 )
37- DEWPOINT_SINT16 = const (0x08 )
30+ BATTERY_UINT8 = const (0x01 ) # %
31+ TEMPERATURE_SINT16 = const (0x02 ) # °C
32+ HUMIDITY_UINT16 = const (0x03 ) # %
33+ PRESSURE_UINT24 = const (0x04 ) # hPa
34+ ILLUMINANCE_UINT24 = const (0x05 ) # lux
35+ MASS_KG_UINT16 = const (0x06 ) # kg
36+ MASS_LB_UINT16 = const (0x07 ) # lb
37+ DEWPOINT_SINT16 = const (0x08 ) # °C
3838 COUNT_UINT8 = const (0x09 )
39- ENERGY_UINT24 = const (0x0A )
40- POWER_UINT24 = const (0x0B )
41- VOLTAGE_UINT16 = const (0x0C )
42- PM2_5_UINT16 = const (0x0D )
43- PM10_UINT16 = const (0x0E )
44- CO2_UINT16 = const (0x12 )
45- TVOC_UINT16 = const (0x13 )
46- MOISTURE_UINT16 = const (0x14 )
47- HUMIDITY_UINT8 = const (0x2E )
48- MOISTURE_UINT8 = const (0x2F )
39+ ENERGY_UINT24 = const (0x0A ) # kWh
40+ POWER_UINT24 = const (0x0B ) # W
41+ VOLTAGE_UINT16 = const (0x0C ) # V
42+ PM2_5_UINT16 = const (0x0D ) # ug/m3
43+ PM10_UINT16 = const (0x0E ) # ug/m3
44+ CO2_UINT16 = const (0x12 ) # ppm
45+ TVOC_UINT16 = const (0x13 ) # ug/m3
46+ MOISTURE_UINT16 = const (0x14 ) # %
47+ HUMIDITY_UINT8 = const (0x2E ) # %
48+ MOISTURE_UINT8 = const (0x2F ) # %
4949 COUNT_UINT16 = const (0x3D )
5050 COUNT_UINT32 = const (0x3E )
51- ROTATION_SINT16 = const (0x3F )
52- DISTANCE_MM_UINT16 = const (0x40 )
53- DISTANCE_M_UINT16 = const (0x41 )
54- DURATION_UINT24 = const (0x42 )
51+ ROTATION_SINT16 = const (0x3F ) # °
52+ DISTANCE_MM_UINT16 = const (0x40 ) # mm
53+ DISTANCE_M_UINT16 = const (0x41 ) # m
54+ DURATION_UINT24 = const (0x42 ) # s
55+ CURRENT_UINT16 = const (0x43 ) # A
56+ SPEED_UINT16 = const (0x44 ) # m/s
57+ #TEMPERATURE_SINT16 = const(0x45) # °C
58+ UV_INDEX_UINT8 = const (0x46 )
59+ VOLUME_L_UINT16 = const (0x47 ) # L
60+ VOLUME_ML_UINT16 = const (0x48 ) # mL
61+ VOLUME_FLOW_RATE = const (0x49 ) # m3/hr
62+ #VOLTAGE_UINT16 = const(0x4A) # V
63+ GAS_UINT24 = const (0x4B ) # m3
64+ GAS_UINT32 = const (0x4C ) # m3
65+ ENERGY_UINT32 = const (0x4D ) # kWh
66+ VOLUME_UINT32 = const (0x4E ) # L
67+ WATER_UINT32 = const (0x4F ) # L
5568
5669 # There is more than one way to represent most sensor properties. This
5770 # dictionary maps the object id to the property name.
@@ -80,7 +93,19 @@ class BTHome:
8093 ROTATION_SINT16 : "rotation" ,
8194 DISTANCE_MM_UINT16 : "distance" ,
8295 DISTANCE_M_UINT16 : "distance" ,
83- DURATION_UINT24 : "duration"
96+ DURATION_UINT24 : "duration" ,
97+ CURRENT_UINT16 : "current" ,
98+ #TEMPERATURE_SINT16: "temperature",
99+ UV_INDEX_UINT8 : "uv_index" ,
100+ VOLUME_L_UINT16 : "volume" ,
101+ VOLUME_ML_UINT16 : "volume" ,
102+ VOLUME_FLOW_RATE : "volume_flow_rate" ,
103+ #VOLTAGE_UINT16: "voltage",
104+ GAS_UINT24 : "gas" ,
105+ GAS_UINT32 : "gas" ,
106+ ENERGY_UINT32 : "energy" ,
107+ VOLUME_UINT32 : "volume" ,
108+ WATER_UINT32 : "water"
84109 }
85110
86111 # Properties below are updated externally when sensor values are read.
@@ -149,6 +174,10 @@ def pack_local_name(self):
149174 def _pack_uint8_x1 (self , object_id , value ):
150175 return pack ("BB" , object_id , value )
151176
177+ # 8-bit unsigned integer with scaling of 10 (1 decimal place)
178+ def _pack_uint8_x10 (self , object_id , value ):
179+ return pack ("BB" , object_id , value * 10 )
180+
152181 # 16-bit signed integer with scalling of 10 (1 decimal place)
153182 def _pack_sint16_x10 (self , object_id , value ):
154183 return pack ("<Bh" , object_id , round (value * 10 ))
@@ -185,6 +214,10 @@ def _pack_uint24_x1000(self, object_id, value):
185214 def _pack_uint32_x1 (self , object_id , value ):
186215 return pack ("<BL" , object_id , round (value ))
187216
217+ # 32-bit unsigned integer with scaling of 1000 (3 decimal places)
218+ def _pack_uint32_x1000 (self , object_id , value ):
219+ return pack ("<BL" , object_id , round (value * 1000 ))
220+
188221 _object_id_functions = {
189222 BATTERY_UINT8 : _pack_uint8_x1 ,
190223 TEMPERATURE_SINT16 : _pack_sint16_x100 ,
@@ -210,7 +243,20 @@ def _pack_uint32_x1(self, object_id, value):
210243 ROTATION_SINT16 : _pack_sint16_x10 ,
211244 DISTANCE_MM_UINT16 : _pack_uint16_x1 ,
212245 DISTANCE_M_UINT16 : _pack_uint16_x10 ,
213- DURATION_UINT24 : _pack_uint24_x1000
246+ DURATION_UINT24 : _pack_uint24_x1000 ,
247+ CURRENT_UINT16 : _pack_uint16_x1000 ,
248+ SPEED_UINT16 : _pack_sint16_x100 ,
249+ #TEMPERATURE_SINT16: _pack_sint16_x10,
250+ UV_INDEX_UINT8 : _pack_uint8_x10 ,
251+ VOLUME_L_UINT16 : _pack_uint16_x10 ,
252+ VOLUME_ML_UINT16 : _pack_uint16_x1 ,
253+ VOLUME_FLOW_RATE : _pack_uint16_x1000 ,
254+ #VOLTAGE_UINT16: _pack_uint16_x10,
255+ GAS_UINT24 : _pack_uint24_x1000 ,
256+ GAS_UINT32 : _pack_uint32_x1000 ,
257+ ENERGY_UINT32 : _pack_uint32_x1000 ,
258+ VOLUME_UINT32 : _pack_uint32_x1000 ,
259+ WATER_UINT32 : _pack_uint32_x1000
214260 }
215261
216262 # Concatenate an arbitrary number of sensor readings using parameters
0 commit comments