BLE parser for passive BLE advertisements

Related tags

Networkingbleparser
Overview

BLE parser for passive BLE advertisements

This pypi package is parsing BLE advertisements to readable data for several sensors and can be used for device tracking, as long as the MAC address is static. The parser was originally developed as part of the BLE monitor custom component for Home Assistant, but can now be used for other implementations. The package does NOT take care of the data collecting of the BLE advertisements, you can use other packages like aioblescan or bleson to do that part.

Installation

pip install bleparser

Supported sensors

Supported sensor brands

  • ATC (custom firmware for Xiaomi/Qingping sensors)
  • Brifit
  • Govee
  • iNode sensors
  • Kegtron
  • Qingping
  • Ruuvitag
  • Teltonika
  • Thermoplus
  • Xiaomi MiBeacon
  • Xiaomi Scale

A full list of all supported sensors can be found on the BLE monitor documentation

Usage

When using default input parameters, you can use bleparser as follows (more working examples below).

ble_parser = BleParser()
sensor_msg, tracker_msg = ble_parser.parse_data(data)

You can set optional parameters, the example below shows all possible input parameters with default values.

ble_parser = BleParser(
    report_unknown=False,
    discovery=True,
    filter_duplicates=False,
    sensor_whitelist=[],
    tracker_whitelist=[],
    aeskeys={}
    )

report_unknown Report unknown sensors. Can be set to Xiaomi, Qingping, ATC, Mi Scale, Kegtron, Thermoplus, Brifit, Govee or Ruuvitag to report unknown sensors of a specific brand to the logger. You can set it to Other to report all unknown advertisements to the logger. Default: False

discovery Boolean. When set to False, only sensors in sensor_whitelist will be parsed. Default: True

filter_duplicates Boolean. Most sensors send multipe advertisements with the exact same data, to increase reception quality. When set to True, it will filter duplicate advertisements based on a packet_id that is send by the sensor. Only one advertisement will be parsed if it has the same packet_id. Note that not all sensors have packet_ids. Default: False

sensor_whitelist List with MAC addresses of devices that are being parsed, if discovery is set to False. If discovery is set to True, all supported sensors will be parsed. Default: []

tracker_whitelist List with devices to track. Default: []

aeskeys Dictionary with mac + encryption key pairs, for sensors that require an encryption key to decrypt the payload. Default: {}

Result

The parser result are two two dictionaries, one with sensor data (e.g. temperature readings) and one with tracking data.

Parsing sensor data

The following minimal example shows how to extract the sensor measurements out of a (supported) BLE advertisement:

from bleparser import BleParser

data_string = "043e2502010000219335342d5819020106151695fe5020aa01da219335342d580d1004fe004802c4"
data = bytes(bytearray.fromhex(data_string))

ble_parser = BleParser()
sensor_msg, tracker_msg = ble_parser.parse_data(data)
print(sensor_msg)

The output of sensor_msg is:

{'rssi': -60, 'mac': '582D34359321', 'type': 'LYWSDCGQ', 'packet': 218, 'firmware': 'Xiaomi (MiBeacon V2)', 'data': True, 'temperature': 25.4, 'humidity': 58.4}

If the advertisements can be parsed, it will always show the rssi, mac, type, packet, firmware and data fields. Additional fields with the measurements, like temperature and humidity will be available depending on the sensor type.

Parsing tracker data

A minimal example for tracking BLE devices is shown below. To prevent tracking of all devices that pass by, you will have to specify a whitelist with devices that you want to track. This needs to be a list with MAC addresses in lower case, without :.

from bleparser import BleParser

data_string = "043e2502010000219335342d5819020106151695fe5020aa01da219335342d580d1004fe004802c4"
data = bytes(bytearray.fromhex(data_string))

tracker_whitelist = []
track_mac = "58:2D:34:35:93:21"
track_mac = bytes.fromhex(track_mac.replace(":", ""))
tracker_whitelist.append(track_mac.lower())

ble_parser = BleParser(tracker_whitelist=tracker_whitelist)
sensor_msg, tracker_msg = ble_parser.parse_data(data)
print(tracker_msg)

The result is:

{'is connected': True, 'mac': '582D34359321', 'rssi': -60}

The output is always showing the mac, rssi and if it is connected.

Comments
  • Add support for Almendo bluSensor AIQ

    Add support for Almendo bluSensor AIQ

    Datasheet for this device: https://www.blusensor.com/zdn/pdf/datasheets/BSP02AIQ%20EN%20datasheet.pdf

    The parser is based on the documentation available at: https://github.com/blusensor/blusensor-api-bluetooth

    opened by Tamarinen 10
  • not compatible with python 3.8 due to dictionary union operator

    not compatible with python 3.8 due to dictionary union operator

    In some place the union operator (|) is used to merge dictionaries. Unfortunately this is only supported by python versions >= 3.9 (https://peps.python.org/pep-0584/). According to the setup.cfg python >= 3.8 is supported.

    To preserve compatibility with 3.8 the usage of the union operator for dictionaries should be avoided in the following files:

    • package/bleparser/altbeacon.py
    • package/bleparser/ibeacon.py
    • package/bleparser/tilt.py

    example for ibeacon.py:

    This:

    sensor_data = {
        CONF_TYPE: DEVICE_TYPE,
        CONF_PACKET: "no packet id",
        CONF_FIRMWARE: DEVICE_TYPE,
        CONF_MANUFACTURER: MANUFACTURER_DICT[comp_id] \
            if comp_id in MANUFACTURER_DICT \
            else DEFAULT_MANUFACTURER,
        CONF_DATA: True
    } | tracker_data
    

    Should be changed to:

    sensor_data = dict(
        {
            CONF_TYPE: DEVICE_TYPE,
            CONF_PACKET: "no packet id",
            CONF_FIRMWARE: DEVICE_TYPE,
            CONF_MANUFACTURER: MANUFACTURER_DICT[comp_id] \
                if comp_id in MANUFACTURER_DICT \
                else DEFAULT_MANUFACTURER,
            CONF_DATA: True
        },
        **tracker_data
    )
    

    I also created a branch with the fixes. But I'm not allowed to push anything ;)

    opened by cboxed 3
  • ImportError: cannot import name 'final' from 'typing' on bleparser 2.0

    ImportError: cannot import name 'final' from 'typing' on bleparser 2.0

    altbeacon.py references typing.Final was introduced in python 3.8.

    Edit: Prior to 3.8 typing.Final is available in package in package typing_extensions. If using python prior to 3.8, refrences to typing.Final need to be updated to import typing_extensions in altbeacon.py, const.py and ibeacon.py

    opened by iointerrupt 3
  • LYWSDCGQ battery is not parsed

    LYWSDCGQ battery is not parsed

    Hi All,

    I've noted that battery is not returned for LYWSDCGQ, at least in version 0.4. It is neither in the test nor in the example in the README. But this sensor reports battery, doesn't it?. Is this just an oversight or I am missing something?.

    Thanks and BR.

    opened by pulgarzito 2
  • preserve compatiblity with python 3.8

    preserve compatiblity with python 3.8

    The union operator ("|") for dictionaries was used in some places. For dictionaries it is only supported for python version >= 3.9 (https://peps.python.org/pep-0584/). In setup.cfg python >= 3.8 was defined (python_requires = >=3.8). To preserve compatibility with 3.8 I changed the union operators for dicts.

    opened by cboxed 1
  • Installation help

    Installation help

    Hello! I use pi zero. Would anyone help with the installation? How to set up? I want to transfer data from Xiaomi and iNode devices to a more remote Home Assistant server.

    opened by Benny2102 1
  • Missing requirement Cryptodome?

    Missing requirement Cryptodome?

    When installing this package from pypi (pip install bleparser) the Cryptodome package does not get installed, which seems to be a hard requirement (https://github.com/Ernst79/bleparser/blob/master/package/bleparser/xiaomi.py#L5).

    Should be added into setup.cfg under "install_requires".

    I would be happy to draft a PR for this, but a little unsure about the requirements_test.txt in this repo which specifies a specific version of Cryptodome. Any particular reason for pinning the version or would any version >3 be ok?

    opened by freol35241 1
  • December update

    December update

    Breaking changes

    • HA BLE has been renamed to BTHome V1

    New sensors

    • BTHome V1 and V2 [see note 1]
    • Jaalee JHT sensor
    • Xiaomi Smart Door lock E
    • XMZNMS08LM Xiaomi Smart Door lock 1S
    • Linptech HS1BB(MI) motion sensor
    • Linptech door/window sensor MS1BB(MI)
    • Inkbird IBS-THx external probe
    • Amazfit Smart Scale
    • Xiaomi Smart Pillow (MJZNZ018H)
    • 8H Intelligent Sleep Aid Natural Latex Pillow X (ZX1)
    • Brifit / Sensorpro WS08
    • Additional Air Mentor sensors
    • support for external probe for Inkbird IBS-TH when reporting as probe 3

    Fixes

    • Fix for negative temperatures for Govee sensors (thanks @jmccrohan)
    • Fix for negative temperatures in Brifit/Sensorpro sensors
    • Fix for Sensirion humidity readings

    [1] Please note that not all measurement types of BTHome have been added. In case you need a missing measurement type, let us know. Also note that the multiple measurements of the same type (e.g. two temperature sensors) are not supported.

    opened by Ernst79 0
  • govee: Fix H5072/H5075/H5101/H5102/H5177/H5178 temperature/humidity values

    govee: Fix H5072/H5075/H5101/H5102/H5177/H5178 temperature/humidity values

    Fix the temperature and humidity decoding functions:

    • Temperature is accurate only to one decimal place; remove duplicated humidity values in subsequent decimal places
    • Humidity values are incorrect when temperature is below freezing (2's complement); mask upper bit before decoding

    Govee tests updated accordingly and passing

    opened by jmccrohan 0
  • BREAKING CHANGE - 2nd July update

    BREAKING CHANGE - 2nd July update

    BREAKING CHANGES

    • Modified the ble-parser to be able to accept non-raw BLE data.

    If you like to work with the raw BLE data like before, update your code from

    ble_parser = BleParser()
    sensor_msg, tracker_msg = ble_parser.parse_raw_data(data) 
    

    to

    ble_parser = BleParser()
    sensor_msg, tracker_msg = ble_parser.parse_data(data)
    

    Fixes

    • Fix for negative temperatures Switchbot meter (thx for the help @DigiH)
    • Improved device_ids for Switchbot
    • Fix Dangerous default value [] as argument pylint error in code

    New sensors

    • SmartDry Cloth dryer
    • Petoneer Smart Odor Eliminator Pro SU001-T
    • Thermopro TP357
    opened by Ernst79 0
  • Update parser

    Update parser

    Breaking changes in PR

    • Modified the ble-parser to be able to accept non-raw BLE data. This change doesn't affect BLE monitor, but prepares for future changes in Home Assistant. RAW ble advertisements now have to be parsed with parse_raw_data instead of Breaking change,parse_databecomesparse_raw_data`)
    • Add support for LYWSD02MMC Xiaomi temperature and humidity clock
    • Add support for Swichbot Meter TH S1 with new device_id (0x1054)
    opened by Ernst79 0
  • Support for Sensorpush HT1 (older version of HT.w)

    Support for Sensorpush HT1 (older version of HT.w)

    Hello,

    I was hoping to see if I could help add support for the HT1 series of sensorpush devices as I noticed they're not part of the existing support. I've seen vague references to "unable to decode" on the homeassistant repos, but nothing further. I was curious to see where the problem lay.

    (caveats, it's been a while since I've done anything with BLE devices, and most of it was not for this purpose)

    Near as I can tell, the advertisement beacon is pretty straightforward:

    • len 2/type 01, flags indicating no BR/EDR support (0x06)
    • len 17/type 07, 128 bit UUID, static: {EC090AA9-9DD7-93B8-BA42-D611000009EF}
    • len 5, type FF (manufacturer specific data). This, I assume is where the temp/humidity is coming
    • len 2, type 09, complete local name. 0x73, "s".

    Here's where I fall down. I'm not 100% sure how to decode the manufacturer specific data above into a discrete temp and humidity. I've tried using the func you used for the HT.w and either my input isn't right or it's a different encoding, because I definitely don't get correct values.

    Is there anywhere I can go from here? I'm certainly not short on samples, though I confess I've been obtaining them via my phone's BLE app and not my ubertooth. For example, a temp/humidity of 21.6c/54.5% seems to come out to 0xBDE78E05.

    opened by ravenium 3
  • Petoneer Smart Odor Eliminator Pro SU001-T - none sensor data

    Petoneer Smart Odor Eliminator Pro SU001-T - none sensor data

    Hello,

    I'm trying to use bleparser to read sensor data from SU001-T device but it looks like I'm only getting tracker basic data and sensor data with motion etc is empty for whatever reason..

    here is code which I'm using:

    import aioblescan as aiobs
    from bleparser import BleParser
    
    SENSORS = [
        "DC:23:4D:2D:69:A7"
        ]
    TRACKERS = [
        "DC:23:4D:2D:69:A7"
        ]
    ## Setup parser
    parser = BleParser(
        discovery=False,
        filter_duplicates=True,
        sensor_whitelist=[bytes.fromhex(mac.replace(":", "").lower()) for mac in SENSORS],
        tracker_whitelist=[bytes.fromhex(mac.replace(":", "").lower()) for mac in TRACKERS]
    )
    
    ## Define callback
    def process_hci_events(data):
        sensor_data, tracker_data = parser.parse_raw_data(data)
    
        if tracker_data:
            print("Tracker: ", tracker_data)
            print("Sensor: ", sensor_data)
    
        if sensor_data:
            print("Sensor: ", sensor_data)
    
    ## Get everything connected
    loop = asyncio.get_event_loop()
    
    #### Setup socket and controller
    socket = aiobs.create_bt_socket(0)
    fac = getattr(loop, "_create_connection_transport")(socket, aiobs.BLEScanRequester, None, None)
    conn, btctrl = loop.run_until_complete(fac)
    
    #### Attach callback
    btctrl.process = process_hci_events
    loop.run_until_complete(btctrl.send_scan_request(0))
    
    ## Run forever
    loop.run_forever()
    

    Output is always:

    [email protected]:/home/pi# python3.8 petoneer.py
    Tracker:  {'is connected': True, 'mac': 'DC234D2D69A7', 'rssi': -80}
    Sensor:  None
    

    any idea what might be wrong with my code?

    opened by sienikam 5
  • Wellcore Beacons

    Wellcore Beacons

    Hello,

    I have a bunch of these Wellcore W912N beacons. I am not very fluent in BLE Packets and data...

    The manufacturer is super unhelpful so after 6 years of having them, I started to investigate again how to read the data as I have 50+ of these devices in a box.

    This parsing library is awesome, and I thought maybe I can post how the Wellcore beacons work should you want to add it to the ecosystem.

    Example of Advertising Packet (using esphome+ble_gateway): 043E4402010001F3849D8F15E7380201061AFF4C000215FDA50693A4E24FB1AFCFC6EB076478252733DCB2C50C166E353101F7C000146100000C095747585F69426561636F6EC8

    After this entire weekend I reverse engineered the data and found the following: There is this service uuid: 0x356e Providing the data: 0c166e353101f7c00014610000

    After moving, heating and rotating a lot of times I grouped the data in this way:

    0c166e3531 01f7c0 0014 61 0000

    0c166e3531: Not sure what this is 01f7c0: Accelerometer Data [01(x) f7(y) c0(z)] 0014: Temperature Data 61: Battery Level 0000: Not sure

    I added a wellcore.py file and is busy extracting the data in the format above. My question now is, due to a lack of knowledge of hex data and little indians and big indians etc... (yes I meant it as a joke)

    1stly for Accelerometer data: The app (provided as an .apk file by the manufacturer) shows negative and positive values for accelerometer x,y,z - I guess that the value is maybe offset to convert single hex to neg + pos decimal?

    2ndly for Temperature data: Converting the hex 14 to decimal does give the correct temperature, but how does negative decimals work in hex? Is that where the little and big endians come in?

    Am I on the right track or is there perhaps a standard that I do not know about that could make all this easier?

    opened by JacoBezuidenhout 2
Releases(3.7.1)
  • 3.7.1(Dec 28, 2022)

    Changes in 3.7.1

    Breaking changes

    • HA BLE has been renamed to BTHome V1

    New sensors

    • BTHome V1 and V2 [see note 1]
    • Jaalee JHT sensor
    • Xiaomi Smart Door lock E
    • XMZNMS08LM Xiaomi Smart Door lock 1S
    • Linptech HS1BB(MI) motion sensor
    • Linptech door/window sensor MS1BB(MI)
    • Inkbird IBS-THx external probe
    • Amazfit Smart Scale
    • Xiaomi Smart Pillow (MJZNZ018H)
    • 8H Intelligent Sleep Aid Natural Latex Pillow X (ZX1)
    • Brifit / Sensorpro WS08
    • Additional Air Mentor sensors
    • support for external probe for Inkbird IBS-TH when reporting as probe 3

    Fixes

    • Fix for negative temperatures for Govee sensors (thanks @jmccrohan)
    • Fix for negative temperatures in Brifit/Sensorpro sensors
    • Fix for Sensirion humidity readings

    [1] Please note that not all measurement types of BTHome have been added. In case you need a missing measurement type, let us know. Also note that the multiple measurements of the same type (e.g. two temperature sensors) are not supported.

    Source code(tar.gz)
    Source code(zip)
  • 3.7.0(Dec 28, 2022)

    Changes in 3.7.0

    Breaking changes

    • HA BLE has been renamed to BTHome V1

    New sensors

    • BTHome V1 and V2 [see note 1]
    • Jaalee JHT sensor
    • Xiaomi Smart Door lock E
    • XMZNMS08LM Xiaomi Smart Door lock 1S
    • Linptech HS1BB(MI) motion sensor
    • Linptech door/window sensor MS1BB(MI)
    • Inkbird IBS-THx external probe
    • Amazfit Smart Scale
    • Xiaomi Smart Pillow (MJZNZ018H)
    • 8H Intelligent Sleep Aid Natural Latex Pillow X (ZX1)
    • Brifit / Sensorpro WS08
    • Additional Air Mentor sensors
    • support for external probe for Inkbird IBS-TH when reporting as probe 3

    Fixes

    • Fix for negative temperatures for Govee sensors (thanks @jmccrohan)
    • Fix for negative temperatures in Brifit/Sensorpro sensors
    • Fix for Sensirion humidity readings

    [1] Please note that not all measurement types of BTHome have been added. In case you need a missing measurement type, let us know. Also note that the multiple measurements of the same type (e.g. two temperature sensors) are not supported.

    Source code(tar.gz)
    Source code(zip)
  • 3.6.0(Jul 28, 2022)

  • 3.5.0(Jul 26, 2022)

    BREAKING CHANGES

    • Modified the ble-parser to be able to accept non-raw BLE data.

    If you like to work with the raw BLE data like before, update your code from

    ble_parser = BleParser()
    sensor_msg, tracker_msg = ble_parser.parse_raw_data(data) 
    

    to

    ble_parser = BleParser()
    sensor_msg, tracker_msg = ble_parser.parse_data(data)
    

    Fixes

    • Fix for negative temperatures Switchbot meter (thx for the help @DigiH)
    • Improved device_ids for Switchbot
    • Fix Dangerous default value [] as argument pylint error in code

    New sensors

    • SmartDry Cloth dryer
    • Petoneer Smart Odor Eliminator Pro SU001-T
    • Thermopro TP357
    Source code(tar.gz)
    Source code(zip)
  • 3.4.0(Jul 10, 2022)

  • 3.3.0(Jul 8, 2022)

    BREAKING CHANGES in 3.3.0

    • Modified the ble-parser to be able to accept non-raw BLE data.

      RAW ble advertisements now have to be parsed with parse_raw_data instead of parse_data. Modify your code accordingly.

    new sensors

    • Add support for LYWSD02MMC Xiaomi temperature and humidity clock
    • Add support for Swichbot Meter TH S1 with new device_id (0x1054)
    Source code(tar.gz)
    Source code(zip)
  • 3.2.0(Jul 5, 2022)

    BREAKING CHANGES

    • HA legacy sensor support has been removed
    • Split up of alarm sensor of Govee H5183 (one for each probe)
    • Govee H5178 was mixing the battery readings of the indoor and outdoor sensor https://github.com/custom-components/ble_monitor/issues/907. With this PR, the Govee H5178 is split up in two devices, one for the indoor sensor and one for the outdoor sensor. The MAC address of the outdoor sensor in increased with 1 (compared to the indoor sensor), to do this. The outdoor temperature and humidity sensor are not used anymore after this update and are moved to the new H5178-outdoor device.

    NEW SENSORS

    • Govee H5185 meat sensor
    • Govee H5182
    • Added co2 and tvoc measurements to HA BLE
    • Mikrotik sensors
    • Thermopro TP359 sensor
    • XMWXKG01YL Xiaomi smart switch
    • Lockin Q2
    • Almendo bluSensor Mini (by @Tamarinen)

    OTHER FIXES

    • Move to_mac and to_unformatted_mac functions to helper
    • Some Qingping sensors weren't updating all information. This release should fix that issue
    • Fix for Xiaomi toothbrush
    • Fix for Linptech K9B switches not updating their state
    • Cleaner up logs for encrypted HA BLE sensors that didn't have an encryption key (yet)
    • Fix for XMWXKG01YL locks not working properly
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(Apr 29, 2022)

    • Added support for KKM K6 beaconsensor https://github.com/custom-components/ble_monitor/issues/835
    • Split up of Oral-B toothbrushes in SmartSeries 7000 and IO Series 7 (by @codyc1515). The toothbrush sensor can now distinguish between the SmartSeries 7000 and IO series 7.
    • Fix for missing Oral-B documentation https://github.com/custom-components/ble_monitor/issues/844
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Apr 20, 2022)

    April update

    This update brings bleparser in line with the parser in BLE monitor 8.6.1 and contains the following changes:

    BREAKING CHANGES

    • Xiaomi ZNMS17LM

      Lock states were reversed for the binary (lock) sensor: 0=>locked 1=>unlocked. This release fixes that issue. This applies to all all Xiaomi locks, although it has only been tested on the ZNMS17LM model (by @vincent-k).

      ZNMS17LM is reporting lock, anti-lock & child-lock events. Using these on the same sensor/lock leads to an incorrect global state. Eg. when the door is fully locked (main lock + anti-lock), if we release only the anti-lock then the sensor goes to unlocked state which is incorrect. This commit decouples the lock into three distinct sensors: 'lock', 'anti-lock' & 'child-lock' to avoid such issues (by @vincent-k).

      Note: this only targets ZNMS17LM model to keep a selective approach (some users may prefer the global version and some other Xiaomi locks may not be reporting those states).

    • iBeacon, Altbeacon

      iBeacon parser were showing the formatted mac address in the parser output, they now show the unformatted MAC address (without colons)

    new sensors

    • HA BLE diy sensors (see below)
    • MaxxMee Mod: QJ-J scale
    • HHCC plant sensor HHCCJCY10
    • Laica Smart Scale (PS7011/PS7020) sensors
    • Tilt sensors
    • Sensirion SHT4x
    • Inkbird P01B pool thermometer
    • Air Mentor pro 2
    • Switchbot Meter TH S1
    • Relsib EClerk Eco
    • Inkbird IBS-TH2 without humidity (temperature only)
    • Govee H5071
    • ATC firmware on CGDK2
    • Acconeer XM12 motion sensor

    new features

    • Add door sensor for ZNMS16LM/ZNMS17LM

    bug fixes

    • Fix for Inkbird IBS-TH(2) not being recognized in some cases
    • Fix for negative temperatures reported by b-parasites and v2 support
    • Fix for iBBQ sensors not reporting temperatures above 100°C
    • Improved Mi Scale V2 behavior
    • Fix for Oral-B when sending an non-defined state
    • Fix for short Altbeacon advertismement
    • Add extra filter for Teltonika Puck RHT
    • Bump pycryptodomex to 3.14.1
    • Improved Qingping CGDN1 support

    New HA BLE format This release brings a totally new HA BLE format. We have created a BLE advertisement format that you can use for your DIY sensors. The main advantages of the new format:

    • Developed by the makers of BLE monitor, so fully supported

    • Flexible format (choose your own number of digits, data size)

    • Supports encryption (if you want)

    • Energy efficient. We tried to make a format that is as short as possible, to reduce energy consumption, but at the same time to be as flexible as possible

    • Support for a wide range of sensor types (and others can be added easily)

    • More info about the format can be found here

    • Thanks for @pvvx for his suggestions on how to improve the HA BLE format. ATC firmware 3.7(b) has added support for HA BLE format in the sensors that support ATC firmware.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Feb 6, 2022)

    Changes in 2.0.0

    new sensors

    • Qingping Qingping Air Monitor Lite (CGDN1)
    • Xiaomi Mijia Mi Smart Door Lock Push Pull (XMZNMST02YD)
    • Xiaomi Door Lock Youth Edition (MJZNMSQ01YD)
    • Sensirion SCD4x CO₂ Gadget
    • iBeacon protocol
    • altBeacon protocol
    • Inkbird iBBQ-1, iBBQ-6 sensors
    • Inkbird iBBQ-2 and iBBQ-4 sensors that send their MAC in non-reversed order
    • Jinou BEC07-5 beacon temperature/humidity sensor
    • Thermoplus/Brifit/Oria thermometer hygrometer sensors with comp_id = 0x0015

    Improvements

    • Add support for BLE advertisements with multiple service data and manufacturer specific data packets
    • Add voltage sensors to CGG1 and MHO-C401, as they can send both in ATC and Xiaomi format, causing issues
    • Track devices based on the Beacon UUID (instead of the MAC address). This allows you to track devices that have a non-fixed, rotating MAC address

    Bugfixes

    • Fix for sensor_whitelist not working for some sensors (e.g. Inkbird)
    • Fix for mixing Thermoplus and iBBQ sensors
    • Removal of unknown sectors for Oral-B brushes [BREAKING CHANGE]
    • Renamed Inkbird IBS-TH2 to IBS-TH, as both TH1 and TH2 use the same format [BREAKING CHANGE]

    Python 3.8 support deprecated

    • Python 3.8 support is dropped. This doesn't mean that it won't work with Python 3.8 or lower, but it is not tested anymore.
    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Jan 10, 2022)

    New sensors

    • Added support for Inkbird IBS-TH2 sensor
    • Added support for Inkbird iBBQ-4 sensors
    • Added Govee Meat Thermometer (H5183)
    • Adding a switch and opening binary sensors to ATC devices

    Bug fixes

    • Fix in whitelist for Oral-B
    • Fix for new unknown sector Oral-B

    Improvements

    • Rewrite of the parser, to be able to use more data from different records for filtering (like name, service UUID, etc)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Jan 1, 2022)

    Changes in 1.6.0

    This release adds support for the following devices

    • Inkbird iBBQ thermometer (2 probes version) [1]
    • Oral-B toothbrush (7000 series)
    • b-parasite plant sensor

    [1] If you have a 4 or 6 probe Inkbird iBBQ device, please let us know by opening a new issue, such that we can create support for these.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Nov 19, 2021)

    • Add support for Xiaomi Mijia Smart Magic Cube (XMMF01JQD) (only rotation direction)
    • Adding iNode care sensors
    • Add button sensor for Xiaomi Water Leak Sensor (SJWS01LM)
    • Adding support for CGPR1 with unencrypted Qingping BLE advertisement format
    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Oct 29, 2021)

    Changes in 1.4.0

    • Add support for Xiaogui TZC4 Scale (Xiaomi Mi Scale clone)
    • Add support for Xiaomi Temperature and Humidity EInk sensor (XMWSDJ04MMC)
    • Improvements to report_unknown function
    • Fix for negative temperatures in Govee sensors
    • Bump pycryptodomex to 3.11.0
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Oct 16, 2021)

  • 1.2.0(Sep 15, 2021)

    • Fix for Xiaomi motion sensors not being parsed
    • Fix for YLYK01YL sensor not parsing the "button" (press type)
    • Moat S2 battery percentage redefined
    • Added test for Yeelight YLYK01YL
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Sep 11, 2021)

  • 1.0.0(Sep 10, 2021)

    The button/remote/switch/dimmer advertisements and light/motion/illuminance advertisements of Xiaomi sensors are now only returning the output that correspond to the device that has sent the advertisements.

    In the previous versions, bleparser was giving all possible outputs for all device types that use the same data object (0x000F and 0x1001) and the user had to filter which result was relevant for his sensor. It now only returns the device specific results (e.g. a dimmer won't return a bathroom remote command anymore).

    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Sep 7, 2021)

  • 0.9.0(Sep 5, 2021)

    Xiaomi toothbrush sensor has been rewritten

    • It now reports toothbrush (0 = off, 1 = on)
    • it also reports counter = time after start brushing
    • after finishing, it reports score
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Sep 4, 2021)

  • 0.7.0(Aug 31, 2021)

    BREAKING CHANGES

    • [Xiaomi parser] The opening sensor state has been reversed, to meet with Home Assistant/BLE monitor definitions for open and closed. Added an extra status output with description of the status.
    • removed the lower() from mac.lower() in the parsers and device tracker
    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Aug 30, 2021)

  • 0.5.1(Aug 25, 2021)

  • 0.5.0(Aug 25, 2021)

  • 0.4.0(Aug 16, 2021)

  • 0.3.0(Aug 13, 2021)

  • 0.2.0(Aug 2, 2021)

Owner
Ernst Klamer
Ernst Klamer
Best discord webhook spammer using proxy (support all proxy type)

Best discord webhook spammer using proxy (support all proxy type)

Iтѕ_Ѵιcнч#1337 25 Nov 01, 2022
📨 Share files easily over your local network from the terminal! 📨

Fileshare 📨 Share files easily over your local network from the terminal! 📨 Installation #

Dopevog 11 Sep 10, 2021
Socket programming is a way of connecting two nodes on a network to communicate with each other

Socket Programming in Python Socket programming is a way of connecting two nodes on a network to communicate with each other. One socket(node) listens

Janak raikhola 1 Jul 05, 2022
Visualize the electric field of a point charge network.

ElectriPy ⚡ Visualize the electric field of a point charges network. 🔌 Installation Install ElectriPy package: $ pip install electripy You are all d

Dylan Tintenfich 29 Aug 29, 2022
Automatically block traffic on Cloudflare's side based on Nginx Log parsing.

AutoRL This is a PoC of automatically block traffic on Cloudflare's side based on Nginx Log parsing. It will evaluate Nginx access.log and find potent

Nova Kwok 62 Dec 28, 2022
API Server for VoIP analysis (CDR + Audio CODECs)

Swagger generated server Overview This server was generated by the swagger-codegen project. By using the OpenAPI-Spec from a remote server, you can ea

Noor Muhammad Malik 1 Jan 11, 2022
A repo with study material, exercises, examples, etc for Devnet SPAUTO

MPLS in the SDN Era -- DevNet SPAUTO All of the study notes have now been moved to use auto-generated documentation to build a static site with Githu

Hugo Tinoco 67 Nov 16, 2022
pyngrok is a Python wrapper for ngrok

pyngrok is a Python wrapper for ngrok that manages its own binary, making ngrok available via a convenient Python API.

Alex Laird 329 Dec 31, 2022
A light-weight open-source project CLI utility for showing services running on ports in a host

Portable Port Scanner (ppscanner) Portable Port Scanner (ppscanner) is a light-weight open-source CLI utility that leverages on nmap to make quick and

1 Oct 30, 2021
Tripwire monitors ports and icmp to send the admin a message if somebody is scanning a machine that shouldn't be touched

Tripwire monitors ports and icmp to send the admin a message if somebody is scanning a machine that shouldn't be touched

3 Apr 05, 2022
This is a Client-Server-System which can send audio from a microphone from the server to client and in the other direction.

Audio-Streaming-Python This is a Client-Server-System which can send audio from a microphone from the server to client and in the other direction. You

VFX / Videoeffects Creator 0 Jan 05, 2023
MS Iot Device Can Platform

Kavo MS IoT Platform Version: 2.0 Author: Luke Garceau Requirements Read CAN messages in real-time Convert the given variables to engineering useful v

Luke Garceau 1 Oct 13, 2021
Socket Based Backdoor and Listener

The Project is mainly based on Sockets , File Handling and subprocess library for Creating backdoors For Hacking into one's Computer (Any OS-Platform Service) and listening on your computer and waiti

Shivansh Mehta 3 May 31, 2021
Python Scripts for Cisco Identity Services Engine (ISE)

A set of Python scripts to configure a freshly installed Cisco Identity Services Engine (ISE) for simple operation; in my case, a basic Cisco Software-Defined Access environment.

Roddie Hasan 9 Jul 19, 2022
Light, simple RPC framework for Python

Agileutil是一个Python3 RPC框架。基于微服务架构,封装了rpc/http/orm/log等常用组件,提供了简洁的API,开发者可以很快上手,快速进行业务开发。

16 Nov 22, 2022
Nexum is an open-source, remote administration tool written in Python 3

A full-featured remote administration tool written in Python 3. The goal of this project is to make the use of a remote administration tool as simple

z3phyrus 2 Nov 26, 2021
This tool will scans your wi-fi/wlan and show you the connected clients

This tool will scans your wi-fi/wlan and show you the connected clients

VENKAT SAI SAGAR 3 Mar 24, 2022
IPV4 network calculation project in Python

Curso de Python 3 do Básico ao Avançado Desafio: Calculando redes IPV4 Criar um programa que obtem um numero de IP com o prefixo da mascara de rede. O

Diego Guedes 3 Jan 21, 2022
This tool is for finding more detailed information of an IP Address.

This tool is for finding more detailed information of an IP Address.

3 Oct 08, 2021
NSX-T infrastructure as code - SDDC deployment

Deploy NSX-T Infrastructure - Simple Topology by Nicolas MICHEL @vpackets / LinkedIn Introduction The purpose of this entire repository is to automate

21 Nov 28, 2022