BLE parser for passive BLE advertisements

Related tags

Networking bleparser
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:

    root@raspberrypi:/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
Web-server with a parser, connection to DBMS, and the Hugging Face.

Final_Project Web-server with parser, connection to DBMS and the Hugging Face. Team: Aisha Bazylzhanova(SE-2004), Arysbay Dastan(SE-2004) Installation

Aisha Bazylzhanova 2 Nov 18, 2021
A black hole for Internet advertisements

Network-wide ad blocking via your own Linux hardware The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content, without installi

Pi-hole 40.3k Jan 9, 2023
This code can help you with auto update for-TV-advertisements in the store.

Auto-update-files-for-TV-advertisements-in-the-store This code can help you with auto update for-TV-advertisements in the store. It was write for Rasp

Max 2 Feb 20, 2022
A script for performing OTA update over BLE on ESP32

A script for performing OTA update over BLE on ESP32

Felix Biego 18 Dec 15, 2022
Python bindings to the dutch NLP tool Frog (pos tagger, lemmatiser, NER tagger, morphological analysis, shallow parser, dependency parser)

Frog for Python This is a Python binding to the Natural Language Processing suite Frog. Frog is intended for Dutch and performs part-of-speech tagging

Maarten van Gompel 46 Dec 14, 2022
Py-Parser est un parser de code python en python encore en plien dévlopement.

PY - PARSER Py-Parser est un parser de code python en python encore en plien dévlopement. Une fois achevé, il servira a de nombreux projets comme glad

pf4 3 Feb 21, 2022
Lua-parser-lark - An out-of-box Lua parser written in Lark

An out-of-box Lua parser written in Lark Such parser handles a relaxed version o

Taine Zhao 2 Jul 19, 2022
Lol qq parser - A League of Legends parser for QQ data

lol_qq_parser A League of Legends parser for QQ data Sources This package relies

Tolki 3 Jul 13, 2022
Discord bot-CTFD-Thread-Parser - Discord bot CTFD-Thread-Parser

Discord bot CTFD-Thread-Parser Description: This tools is used to create automat

null 15 Mar 22, 2022
A Burp extension adding a passive scan check to flag parameters whose name or value may indicate a possible insertion point for SSRF or LFI.

BurpParamFlagger A Burp extension adding a passive scan check to flag parameters whose name or value may indicate a possible insertion point for SSRF

Allyson O'Malley 118 Nov 7, 2022
Passive TCP/IP Fingerprinting Tool. Run this on your server and find out what Operating Systems your clients are *really* using.

Passive TCP/IP Fingerprinting This is a passive TCP/IP fingerprinting tool. Run this on your server and find out what operating systems your clients a

Nikolai Tschacher 158 Dec 20, 2022
A passive recon suite designed for fetching the information about web application

FREAK Suite designed for passive recon Usage: python3 setup.py python3 freak.py warning This tool will throw error if you doesn't provide valid api ke

toxic v3nom 7 Feb 17, 2022
Broken Link Finder is a Burp Extension to detect broken links for a passive scanning domains and links.

Broken Link Finder Broken Link Finder is a Burp Extension to detect broken links for a passive scanning domains and links. Inspired by InitRoot's link

Red Section 10 Sep 11, 2021
Passive income method via SerpClix. Uses a bot to accept clicks.

SerpClixBotSearcher This bot allows you to get passive income from SerpClix. Each click is usually $0.10 (sometimes $0.05 if offer isnt from the US).

Jason Mei 3 Sep 1, 2021
A CRM department in a local bank works on classify their lost customers with their past datas. So they want predict with these method that average loss balance and passive duration for future.

Rule-Based-Classification-in-a-Banking-Case. A CRM department in a local bank works on classify their lost customers with their past datas. So they wa

ÖMER YILDIZ 4 Mar 20, 2022
Generalized hybrid model for mode-locked laser diodes with an extended passive cavity

GenHybridMLLmodel Generalized hybrid model for mode-locked laser diodes with an extended passive cavity This hybrid simulation strategy combines a tra

Stijn Cuyvers 3 Sep 21, 2022
Official implementation of NLOS-OT: Passive Non-Line-of-Sight Imaging Using Optimal Transport (IEEE TIP, accepted)

NLOS-OT Official implementation of NLOS-OT: Passive Non-Line-of-Sight Imaging Using Optimal Transport (IEEE TIP, accepted) Description In this reposit

Ruixu Geng(耿瑞旭) 16 Dec 16, 2022
log4j2 passive burp rce scanning tool get post cookie full parameter recognition

log4j2_burp_scan 自用脚本log4j2 被动 burp rce扫描工具 get post cookie 全参数识别,在ceye.io api速率限制下,最大线程扫描每一个参数,记录过滤已检测地址,重复地址 token替换为你自己的http://ceye.io/ token 和域名地址

null 5 Dec 10, 2021
A passive-recon tool that parses through found assets and interacts with the Hackerone API

Hackerone Passive Recon Tool A passive-recon tool that parses through found assets and interacts with the Hackerone API. Setup Simply run setup.sh to

elbee 4 Jan 13, 2022