|
31 | 31 | KEY_BINARY_DOOR = DeviceKey(key="door", device_id=None)
|
32 | 32 | KEY_BINARY_FINGERPRINT = DeviceKey(key="fingerprint", device_id=None)
|
33 | 33 | KEY_BINARY_MOTION = DeviceKey(key="motion", device_id=None)
|
| 34 | +KEY_BINARY_OCCUPANCY = DeviceKey(key="occupancy", device_id=None) |
34 | 35 | KEY_BINARY_LIGHT = DeviceKey(key="light", device_id=None)
|
35 | 36 | KEY_BINARY_LOCK = DeviceKey(key="lock", device_id=None)
|
36 | 37 | KEY_BINARY_OPENING = DeviceKey(key="opening", device_id=None)
|
@@ -3009,6 +3010,102 @@ def test_Xiaomi_XMPIRO2SXS():
|
3009 | 3010 | )
|
3010 | 3011 |
|
3011 | 3012 |
|
| 3013 | +def test_Xiaomi_XMOSB01XS_ILLUMINANCE(): |
| 3014 | + """Test Xiaomi parser for Xiaomi Occupancy(Human Presence) Sensor XMOSB01XS.""" |
| 3015 | + data_string = ( |
| 3016 | + b"\x48\x59\x83\x46\x0D\xDC\x21\x3C\xE9\x81\xDA\x7A\xE2\x02\x00\x44\x41\xF8\x8C" |
| 3017 | + ) |
| 3018 | + advertisement = bytes_to_service_info(data_string, address="0C:43:14:A1:41:1E") |
| 3019 | + bindkey = "0a4552cb19a639b72b8ed09bde6d5bfa" |
| 3020 | + |
| 3021 | + device = XiaomiBluetoothDeviceData(bindkey=bytes.fromhex(bindkey)) |
| 3022 | + assert device.supported(advertisement) |
| 3023 | + assert device.bindkey_verified |
| 3024 | + assert device.update(advertisement) == SensorUpdate( |
| 3025 | + title="Occupancy Sensor 411E (XMOSB01XS)", |
| 3026 | + devices={ |
| 3027 | + None: SensorDeviceInfo( |
| 3028 | + name="Occupancy Sensor 411E", |
| 3029 | + manufacturer="Xiaomi", |
| 3030 | + model="XMOSB01XS", |
| 3031 | + hw_version=None, |
| 3032 | + sw_version="Xiaomi (MiBeacon V5 encrypted)", |
| 3033 | + ) |
| 3034 | + }, |
| 3035 | + entity_descriptions={ |
| 3036 | + KEY_ILLUMINANCE: SensorDescription( |
| 3037 | + device_key=KEY_ILLUMINANCE, |
| 3038 | + device_class=DeviceClass.ILLUMINANCE, |
| 3039 | + native_unit_of_measurement=Units.LIGHT_LUX, |
| 3040 | + ), |
| 3041 | + KEY_SIGNAL_STRENGTH: SensorDescription( |
| 3042 | + device_key=KEY_SIGNAL_STRENGTH, |
| 3043 | + device_class=DeviceClass.SIGNAL_STRENGTH, |
| 3044 | + native_unit_of_measurement="dBm", |
| 3045 | + ), |
| 3046 | + }, |
| 3047 | + entity_values={ |
| 3048 | + KEY_ILLUMINANCE: SensorValue( |
| 3049 | + name="Illuminance", device_key=KEY_ILLUMINANCE, native_value=38 |
| 3050 | + ), |
| 3051 | + KEY_SIGNAL_STRENGTH: SensorValue( |
| 3052 | + name="Signal Strength", device_key=KEY_SIGNAL_STRENGTH, native_value=-60 |
| 3053 | + ), |
| 3054 | + }, |
| 3055 | + binary_entity_descriptions={}, |
| 3056 | + binary_entity_values={}, |
| 3057 | + ) |
| 3058 | + |
| 3059 | + |
| 3060 | +def test_Xiaomi_XMOSB01XS_OCCUPANCY(): |
| 3061 | + """Test Xiaomi parser for Xiaomi Occupancy(Human Presence) Sensor XMOSB01XS.""" |
| 3062 | + data_string = ( |
| 3063 | + b"\x58\x59\x83\x46\x1F\xBD\xB1\xC4\x67\x48\xD4" |
| 3064 | + b"\x9D\x1E\xFD\x8C\x04\x00\x00\xE5\x7E\x87\x3A" |
| 3065 | + ) |
| 3066 | + advertisement = bytes_to_service_info(data_string, address="D4:48:67:C4:B1:BD") |
| 3067 | + bindkey = "920ce119b34410d38251ccea54c0f915" |
| 3068 | + |
| 3069 | + device = XiaomiBluetoothDeviceData(bindkey=bytes.fromhex(bindkey)) |
| 3070 | + assert device.supported(advertisement) |
| 3071 | + assert device.bindkey_verified |
| 3072 | + assert device.update(advertisement) == SensorUpdate( |
| 3073 | + title="Occupancy Sensor B1BD (XMOSB01XS)", |
| 3074 | + devices={ |
| 3075 | + None: SensorDeviceInfo( |
| 3076 | + name="Occupancy Sensor B1BD", |
| 3077 | + manufacturer="Xiaomi", |
| 3078 | + model="XMOSB01XS", |
| 3079 | + hw_version=None, |
| 3080 | + sw_version="Xiaomi (MiBeacon V5 encrypted)", |
| 3081 | + ) |
| 3082 | + }, |
| 3083 | + entity_descriptions={ |
| 3084 | + KEY_SIGNAL_STRENGTH: SensorDescription( |
| 3085 | + device_key=KEY_SIGNAL_STRENGTH, |
| 3086 | + device_class=DeviceClass.SIGNAL_STRENGTH, |
| 3087 | + native_unit_of_measurement="dBm", |
| 3088 | + ), |
| 3089 | + }, |
| 3090 | + entity_values={ |
| 3091 | + KEY_SIGNAL_STRENGTH: SensorValue( |
| 3092 | + name="Signal Strength", device_key=KEY_SIGNAL_STRENGTH, native_value=-60 |
| 3093 | + ), |
| 3094 | + }, |
| 3095 | + binary_entity_descriptions={ |
| 3096 | + KEY_BINARY_OCCUPANCY: BinarySensorDescription( |
| 3097 | + device_key=KEY_BINARY_OCCUPANCY, |
| 3098 | + device_class=BinarySensorDeviceClass.OCCUPANCY, |
| 3099 | + ), |
| 3100 | + }, |
| 3101 | + binary_entity_values={ |
| 3102 | + KEY_BINARY_OCCUPANCY: BinarySensorValue( |
| 3103 | + device_key=KEY_BINARY_OCCUPANCY, name="Occupancy", native_value=False |
| 3104 | + ), |
| 3105 | + }, |
| 3106 | + ) |
| 3107 | + |
| 3108 | + |
3012 | 3109 | def test_Xiaomi_PTX_press():
|
3013 | 3110 | """Test Xiaomi parser for Xiaomi PTX YK1 QMIMB."""
|
3014 | 3111 | bindkey = "a74510b40386d35ae6227a7451efc76e"
|
|
0 commit comments