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.4.dev0.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

xiaomipassive-2023.2.4.dev0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file xiaomipassive-2023.2.4.dev0.tar.gz.

File metadata

  • Download URL: xiaomipassive-2023.2.4.dev0.tar.gz
  • Upload date:
  • Size: 7.8 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.4.dev0.tar.gz
Algorithm Hash digest
SHA256 3a140253418b0985ec9bfb77826e69e95875fa923991e5ac21f17cd7793fb7ca
MD5 1a3a6430c4fd2aa6ce6468257e0bdbe7
BLAKE2b-256 579d16bd4df02e498b441d0addcc87a04a61e01a95a988b8d2a35c4ffd4d3080

See more details on using hashes here.

File details

Details for the file xiaomipassive-2023.2.4.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for xiaomipassive-2023.2.4.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 b16ef8acf69c36d53cc82f58b20be7f5df73e2a22be7901b8dd78fa6d7e17f37
MD5 5eb758a1115c8d08b883cb4c401bea6d
BLAKE2b-256 92459b42c5a17324e5317da286c8da5df5f060d98ac49cbbef12483caf37483d

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