Skip to content

Commit 61730b0

Browse files
bthome.py - add object_ids
1 parent 00f9dd8 commit 61730b0

File tree

1 file changed

+70
-24
lines changed

1 file changed

+70
-24
lines changed

src/bthome.py

Lines changed: 70 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)