Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xiaomipassive-2023.2.6.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

xiaomipassive-2023.2.6-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file xiaomipassive-2023.2.6.tar.gz.

File metadata

  • Download URL: xiaomipassive-2023.2.6.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.2

File hashes

Hashes for xiaomipassive-2023.2.6.tar.gz
Algorithm Hash digest
SHA256 ab813bf19b934fcac2e2db7f06f7befc87c7e89e8614292bab854175dbf04d2d
MD5 13057663a01c89dc2ab3b27e1b4ee2dc
BLAKE2b-256 7f548596e827c07ad127851120c82b0c2a0f2036286ebbb74f13c992a667f708

See more details on using hashes here.

File details

Details for the file xiaomipassive-2023.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for xiaomipassive-2023.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 188396d48791e7b3323f7079309beca6c24e2e44695787ee9db3f3495df1eddd
MD5 a27726b594a1b290dcd306ced8ccc71b
BLAKE2b-256 581311fb9dfdcfbcc8341f92b25506d7d6f3f734cae21c6ddf12082d129c5efc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page