From f52785e33592e332a16451bec37b31217c0ce1a3 Mon Sep 17 00:00:00 2001 From: Andrew Walbran Date: Wed, 15 May 2024 18:10:12 +0100 Subject: [PATCH] Fix panic displaying BTHome V2 reading with packet ID. --- btsensor/src/bthome/v2.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/btsensor/src/bthome/v2.rs b/btsensor/src/bthome/v2.rs index 16e381cb..1c7e9f1b 100644 --- a/btsensor/src/bthome/v2.rs +++ b/btsensor/src/bthome/v2.rs @@ -215,6 +215,7 @@ impl Element { /// Returns `None` if it is an event, floating-point or boolean property. pub fn value_int(&self) -> Option { match *self { + Self::PacketId(value) => Some(value.into()), Self::Battery(value) => Some(value.into()), Self::Co2(value) => Some(value.into()), Self::Count8(value) => Some(value.into()), @@ -471,6 +472,23 @@ mod tests { ); } + #[test] + fn decode_mho() { + assert_eq!( + BtHomeV2::decode(&[64, 0, 168, 1, 100, 2, 203, 9, 3, 38, 17]).unwrap(), + BtHomeV2 { + encrypted: false, + trigger_based: false, + elements: vec![ + Element::PacketId(168), + Element::Battery(100), + Element::TemperatureSmall(2507), + Element::Humidity(4390) + ] + } + ); + } + #[test] fn format() { assert_eq!( @@ -489,5 +507,19 @@ mod tests { .to_string(), "(unencrypted) acceleration: 22.151m/s², temperature: 25.06°C, battery charging: true, button: none, button: long double press, dimmer: rotate left 3 steps" ); + assert_eq!( + BtHomeV2 { + encrypted: false, + trigger_based: false, + elements: vec![ + Element::PacketId(168), + Element::Battery(100), + Element::TemperatureSmall(2507), + Element::Humidity(4390), + ], + } + .to_string(), + "(unencrypted) packet ID: 168, battery: 100%, temperature: 25.07°C, humidity: 43.9%" + ); } }