colmi_r02_client.hr_settings
Heart rate log settings for controlling if the ring should record heart rate periodically, and if so how often to record.
An odd packet set up as it's either a query for the current settings or trying to set the settings.
I don't know what byte 1 in the response is.
1""" 2Heart rate log settings for controlling if the ring should record heart rate periodically, and if so how often to record. 3 4An odd packet set up as it's either a query for the current settings or trying to set the settings. 5 6I don't know what byte 1 in the response is. 7""" 8 9from dataclasses import dataclass 10import logging 11 12from colmi_r02_client.packet import make_packet 13 14CMD_HEART_RATE_LOG_SETTINGS = 22 # 0x16 15 16READ_HEART_RATE_LOG_SETTINGS_PACKET = make_packet(CMD_HEART_RATE_LOG_SETTINGS, bytearray(b"\x01")) 17 18logger = logging.getLogger(__name__) 19 20 21@dataclass 22class HeartRateLogSettings: 23 enabled: bool 24 interval: int 25 """Interval in minutes""" 26 27 28def parse_heart_rate_log_settings(packet: bytearray) -> HeartRateLogSettings: 29 r""" 30 example: bytearray(b'\x16\x01\x01<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T') 31 """ 32 assert packet[0] == CMD_HEART_RATE_LOG_SETTINGS 33 34 raw_enabled = packet[2] 35 if raw_enabled == 1: 36 enabled = True 37 elif raw_enabled == 2: 38 enabled = False 39 else: 40 logger.warning(f"Unexpected value in enabled byte {raw_enabled}, defaulting to false") 41 enabled = False 42 43 return HeartRateLogSettings(enabled=enabled, interval=packet[3]) 44 45 46def hr_log_settings_packet(settings: HeartRateLogSettings) -> bytearray: 47 assert 0 < settings.interval < 256, "Interval must be between 0 and 255" 48 enabled = 1 if settings.enabled else 2 49 sub_data = bytearray([2, enabled, settings.interval]) 50 return make_packet(CMD_HEART_RATE_LOG_SETTINGS, sub_data)
CMD_HEART_RATE_LOG_SETTINGS =
22
READ_HEART_RATE_LOG_SETTINGS_PACKET =
bytearray(b'\x16\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17')
logger =
<Logger colmi_r02_client.hr_settings (WARNING)>
@dataclass
class
HeartRateLogSettings:
29def parse_heart_rate_log_settings(packet: bytearray) -> HeartRateLogSettings: 30 r""" 31 example: bytearray(b'\x16\x01\x01<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T') 32 """ 33 assert packet[0] == CMD_HEART_RATE_LOG_SETTINGS 34 35 raw_enabled = packet[2] 36 if raw_enabled == 1: 37 enabled = True 38 elif raw_enabled == 2: 39 enabled = False 40 else: 41 logger.warning(f"Unexpected value in enabled byte {raw_enabled}, defaulting to false") 42 enabled = False 43 44 return HeartRateLogSettings(enabled=enabled, interval=packet[3])
example: bytearray(b'\x16\x01\x01<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T')
47def hr_log_settings_packet(settings: HeartRateLogSettings) -> bytearray: 48 assert 0 < settings.interval < 256, "Interval must be between 0 and 255" 49 enabled = 1 if settings.enabled else 2 50 sub_data = bytearray([2, enabled, settings.interval]) 51 return make_packet(CMD_HEART_RATE_LOG_SETTINGS, sub_data)