17
17
from bleak import BleakClient , BleakError
18
18
from bleak .backends .device import BLEDevice
19
19
from bleak_retry_connector import BleakClientWithServiceCache , establish_connection
20
+ from bleak .backends .service import BleakGATTService
20
21
21
22
from airthings_ble .wave_enhance .request import (
22
23
WaveEnhanceRequest ,
@@ -662,7 +663,13 @@ async def _get_service_characteristics(
662
663
else :
663
664
await self ._wave_sensor_data (client , device , sensors , service )
664
665
665
- async def _wave_sensor_data (self , client , device , sensors , service ):
666
+ async def _wave_sensor_data (
667
+ self ,
668
+ client : BleakClient ,
669
+ device : AirthingsDevice ,
670
+ sensors : dict [str , str | float | None ],
671
+ service : BleakGATTService ,
672
+ ) -> None :
666
673
for characteristic in service .characteristics :
667
674
uuid = characteristic .uuid
668
675
uuid_str = str (uuid )
@@ -724,7 +731,14 @@ async def _wave_sensor_data(self, client, device, sensors, service):
724
731
# Stop notification handler
725
732
await client .stop_notify (characteristic )
726
733
727
- async def _wave_enhance_sensor_data (self , client , device , sensors , service ) -> None :
734
+ async def _wave_enhance_sensor_data (
735
+ self ,
736
+ client : BleakClient ,
737
+ device : AirthingsDevice ,
738
+ sensors : dict [str , str | float | None ],
739
+ service : BleakGATTService ,
740
+ ) -> None :
741
+ """Get sensor data from the Wave Enhance."""
728
742
if self .device_info .model .need_firmware_upgrade (self .device_info .sw_version ):
729
743
self .logger .warning (
730
744
"The firmware for this Wave Enhance is not up to date, "
@@ -744,6 +758,10 @@ async def _wave_enhance_sensor_data(self, client, device, sensors, service) -> N
744
758
atom_write = service .get_characteristic (COMMAND_UUID_WAVE_ENHANCE )
745
759
atom_notify = service .get_characteristic (COMMAND_UUID_WAVE_ENHANCE_NOTIFY )
746
760
761
+ if atom_write is None or atom_notify is None :
762
+ self .logger .error ("Missing characteristics for Wave Enhance" )
763
+ raise ValueError ("Missing characteristics for Wave Enhance" )
764
+
747
765
# Set up the notification handlers
748
766
await client .start_notify (atom_notify , command_data_receiver )
749
767
@@ -776,17 +794,19 @@ async def _wave_enhance_sensor_data(self, client, device, sensors, service) -> N
776
794
new_values ["voc" ] = voc
777
795
778
796
if (hum := command_sensor_data .get ("HUM" )) is not None :
779
- new_values ["humidity" ] = hum / 100.0
797
+ new_values ["humidity" ] = float ( hum ) / 100.0
780
798
781
799
if (temperature := command_sensor_data .get ("TMP" )) is not None :
782
800
# Temperature reported as kelvin
783
- new_values ["temperature" ] = round (temperature / 100.0 - 273.15 , 2 )
801
+ new_values ["temperature" ] = round (
802
+ float (temperature ) / 100.0 - 273.15 , 2
803
+ )
784
804
785
805
if (noise := command_sensor_data .get ("NOI" )) is not None :
786
806
new_values ["noise" ] = noise
787
807
788
808
if (pressure := command_sensor_data .get ("PRS" )) is not None :
789
- new_values ["pressure" ] = pressure / (64 * 100 )
809
+ new_values ["pressure" ] = float ( pressure ) / (64 * 100 )
790
810
791
811
self .logger .debug ("Sensor values: %s" , new_values )
792
812
0 commit comments