MiFlora and LYWSD02 passive scanner
Project description
xiaomipassive
LYWSD02, LYWSD03MMC (custom firmware ATC) and MiFlora passive scanner
Installation
git clone https://github.com/afer92/xiaomipassive.git
cd xiaomipassive
pip3 install .
Command line tool
xiaomipassivec
Output:
mac: 80:EA:CA:89:xx:yy conductivity: 54 µS/cm (2023-02-26T00:42:25)
mac: C4:7C:8D:64:xx:yyconductivity: 837 µS/cm (2023-02-26T00:42:25)
mac: C4:7C:8D:6C:xx:yy light: 26 lux (2023-02-26T00:42:26)
...
A4:C1:38:09:xx:yy ATC_0990AB
=================
mac: A4:C1:38:09:xx:yyB rssi: -35 dBm (2023-02-26T00:42:39)
mac: A4:C1:38:09:xx:yy temperature: 21.6 °C (2023-02-26T00:42:39)
mac: A4:C1:38:09:xx:yy moisture: 32 % (2023-02-26T00:42:39)
mac: A4:C1:38:09:xx:yyB battery: 93 % (2023-02-26T00:42:39)
mac: A4:C1:38:09:xx:yy volt: 3.04 V (2023-02-26T00:42:39)
class XiaomiPassiveScanner
loop = asyncio.get_event_loop()
scanner = XiaomiPassiveScanner(loop, callback, timeout_seconds=240)
callback
Function call at each received advertissement
def callback(self, data):
print(self.dump_result(data))
Output:
mac: C4:7C:8D:65:xx:yy conductivity: 376 µS/cm
mac: 80:EA:CA:89:xx:yy light: 283 lux
mac: 15:03:10:12:xx:yy moisture: 47.0 %
mac: C4:7C:8D:65:xx:yy temperature: 20.8 °C
mac: E7:2E:01:71:xx:yy battery: 18 %
Function dump_result format the data decoded in an advertisement
Dictionnary data:
{'ok': True,
'mac': 'C4:7C:8D:6C:xx:yy',
'sensor': 4100,
'stype': 'temperature',
'svalue': ListContainer([123, 0]),
'typeCst': ListContainer([113, 32, 152, 0]),
'num': 247,
'tab': 13,
'name': 'Flower care',
'rssi': -87,
'value': 12.3
}
timeout_seconds
Scan for timeout_seconds, default=240s
devices
After timeout_seconds scanning, data collected for each mac address
Function dump_device(mac) format the data for one mac address
E7:2E:01:71:xx:yy LYWSD02
=================
mac: E7:2E:01:71:xx:yy rssi: -93 dBm (2023-02-24T19:34:19)
mac: E7:2E:01:71:xx:yy moisture: 47.0 % (2023-02-24T19:32:44)
mac: E7:2E:01:71:xx:yy temperature: 20.6 °C (2023-02-24T19:34:18)
mac: E7:2E:01:71:xx:yy battery: 18 % (2023-02-24T19:33:37)
C4:7C:8D:65:B1:1D Flower care
=================
mac: C4:7C:8D:65:xx:yy rssi: -81 dBm (2023-02-24T19:34:19)
mac: C4:7C:8D:65:xx:yy light: 118 lux (2023-02-24T19:33:41)
mac: C4:7C:8D:65:xx:yy moisture: 21 % (2023-02-24T19:33:52)
mac: C4:7C:8D:65:xx:yy conductivity: 309 µS/cm (2023-02-24T19:34:04)
mac: C4:7C:8D:65:xx:yy temperature: 20.7 °C (2023-02-24T19:34:15)
Example
#!/usr/bin/python3
from xiaomipassive import xiaomipassive as xiaomi
import asyncio
def main():
def callback(self, result):
print(self.dump_result(result))
def get_data():
loop = asyncio.get_event_loop()
scanner = xiaomi.XiaomiPassiveScanner
miflora_scanner = scanner(loop, callback, timeout_seconds=240)
try:
loop.run_until_complete(miflora_scanner.run())
except KeyboardInterrupt as err:
print(err)
for mac, device in miflora_scanner.xdevices.items():
print(device)
get_data()
if __name__ == '__main__':
exit(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for xiaomipassive-2023.2.4.dev0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a140253418b0985ec9bfb77826e69e95875fa923991e5ac21f17cd7793fb7ca |
|
MD5 | 1a3a6430c4fd2aa6ce6468257e0bdbe7 |
|
BLAKE2b-256 | 579d16bd4df02e498b441d0addcc87a04a61e01a95a988b8d2a35c4ffd4d3080 |
Close
Hashes for xiaomipassive-2023.2.4.dev0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b16ef8acf69c36d53cc82f58b20be7f5df73e2a22be7901b8dd78fa6d7e17f37 |
|
MD5 | 5eb758a1115c8d08b883cb4c401bea6d |
|
BLAKE2b-256 | 92459b42c5a17324e5317da286c8da5df5f060d98ac49cbbef12483caf37483d |