Skip to content

Commit dbd3512

Browse files
bthome.py remove repetition
1 parent 5ae8266 commit dbd3512

File tree

1 file changed

+16
-40
lines changed

1 file changed

+16
-40
lines changed

bthome.py

Lines changed: 16 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -41,54 +41,30 @@ def _pack_device_name():
4141
device_name_bytes = bytes([len(device_name_bytes)]) + device_name_bytes
4242
return device_name_bytes
4343

44-
# Functions to conver integer or float values to little endian fixed-point decimal
45-
def _pack_battery():
46-
return pack('BB', BATTERY_UINT8, battery)
47-
48-
def _pack_temperature(object_id):
49-
if object_id == TEMPERATURE_SINT16:
50-
temperature_bytes = pack('<Bh', TEMPERATURE_SINT16, round(temperature * _TEMPERATURE_SINT16_SCALING))
51-
else:
52-
temperature_bytes = bytes()
53-
return temperature_bytes
54-
55-
def _pack_humidity(object_id):
56-
if object_id == HUMIDITY_UINT16:
57-
humidity_bytes = pack('<Bh', HUMIDITY_UINT16, round(humidity * _HUMIDITY_UINT16_SCALING))
58-
else:
59-
humidity_bytes = bytes()
60-
return humidity_bytes
61-
62-
def _pack_pressure(object_id):
63-
if object_id == PRESSURE_UINT24:
64-
pressure_bytes = pack('<BL', PRESSURE_UINT24, round(pressure * _PRESSURE_UINT24_SCALING))[:-1]
65-
else:
66-
pressure_bytes = bytes()
67-
return pressure_bytes
68-
69-
def _pack_illuminance(object_id):
70-
if object_id == ILLUMINANCE_UINT24:
71-
illuminance_bytes = pack('<BL', ILLUMINANCE_UINT24, round(illuminance * _ILLUMINANCE_UINT24_SCALING))[:-1]
44+
# The BTHome object ID determines the number of bytes and fixed point decimal multiplier.
45+
def _pack_bthome_data(object_id):
46+
if object_id == BATTERY_UINT8:
47+
bthome_bytes = pack('BB', BATTERY_UINT8, battery)
48+
elif object_id == TEMPERATURE_SINT16:
49+
bthome_bytes = pack('<Bh', TEMPERATURE_SINT16, round(temperature * _TEMPERATURE_SINT16_SCALING))
50+
elif object_id == HUMIDITY_UINT16:
51+
bthome_bytes = pack('<Bh', HUMIDITY_UINT16, round(humidity * _HUMIDITY_UINT16_SCALING))
52+
elif object_id == PRESSURE_UINT24:
53+
bthome_bytes = pack('<BL', PRESSURE_UINT24, round(pressure * _PRESSURE_UINT24_SCALING))[:-1]
54+
elif object_id == ILLUMINANCE_UINT24:
55+
bthome_bytes = pack('<BL', ILLUMINANCE_UINT24, round(illuminance * _ILLUMINANCE_UINT24_SCALING))[:-1]
7256
else:
73-
illuminance_bytes = bytes()
74-
return illuminance_bytes
57+
bthome_bytes = bytes()
58+
print("Packing with data:", bthome_bytes.hex().upper())
59+
return bthome_bytes
7560

7661
# Concatenate an arbitrary number of sensor readings using parameters of sensor data constants to indicate what's included.
7762
def _pack_service_data(*args):
7863
service_data_bytes = pack('B', _SERVICE_DATA_UUID16) # indicates a 16-bit service UUID follows
7964
service_data_bytes += pack('<h', _SERVICE_UUID16)
8065
service_data_bytes += pack('B', _DEVICE_INFO_FLAGS)
8166
for object_id in args:
82-
if object_id == BATTERY_UINT8:
83-
service_data_bytes += _pack_battery()
84-
if object_id == TEMPERATURE_SINT16:
85-
service_data_bytes += _pack_temperature(TEMPERATURE_SINT16)
86-
if object_id == HUMIDITY_UINT16:
87-
service_data_bytes += _pack_humidity(HUMIDITY_UINT16)
88-
if object_id == PRESSURE_UINT24:
89-
service_data_bytes += _pack_pressure(PRESSURE_UINT24)
90-
if object_id == ILLUMINANCE_UINT24:
91-
service_data_bytes += _pack_illuminance(ILLUMINANCE_UINT24)
67+
service_data_bytes += _pack_bthome_data(object_id)
9268
service_data_bytes = pack('B', len(service_data_bytes)) + service_data_bytes
9369
return service_data_bytes
9470

0 commit comments

Comments
 (0)