{"id":16238342,"url":"https://github.com/jczic/bleadvreader","last_synced_at":"2025-08-01T10:43:22.782Z","repository":{"id":121870773,"uuid":"147059406","full_name":"jczic/BLEAdvReader","owner":"jczic","description":"A BLE tool library to decode some advertising data in object mode (used on ESP32 and Pycom modules)","archived":false,"fork":false,"pushed_at":"2023-01-03T09:33:00.000Z","size":45,"stargazers_count":31,"open_issues_count":1,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-17T09:01:36.257Z","etag":null,"topics":["advertising","advertising-data","beacon","beacons","ble","bluetooth","bluetooth-low-energy","decode","distance","eddystone","esp32","hc2","ibeacon","lopy","mycropython","proximity","pycom","tags","wipy"],"latest_commit_sha":null,"homepage":"https://bleadvreader.hc2.fr","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jczic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-02T06:09:17.000Z","updated_at":"2025-03-05T21:20:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"3d6c150d-903f-487f-8d52-b9d0b49c24f6","html_url":"https://github.com/jczic/BLEAdvReader","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FBLEAdvReader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FBLEAdvReader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FBLEAdvReader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FBLEAdvReader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jczic","download_url":"https://codeload.github.com/jczic/BLEAdvReader/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244463604,"owners_count":20456917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["advertising","advertising-data","beacon","beacons","ble","bluetooth","bluetooth-low-energy","decode","distance","eddystone","esp32","hc2","ibeacon","lopy","mycropython","proximity","pycom","tags","wipy"],"created_at":"2024-10-10T13:39:56.568Z","updated_at":"2025-03-19T16:30:46.038Z","avatar_url":"https://github.com/jczic.png","language":"Python","readme":"## A BLE tool library to decode some advertising data in object mode (used on ESP32 and [Pycom](http://www.pycom.io) modules)\n\n![HC²](hc2.png \"HC²\")\n\n#### Very easy to integrate and very light with one file only :\n- `\"bleAdvReader.py\"`\n\n#### BLEAdvReader features :\n- Access to all elements data in BLE advertising packets\n- Checking data format errors in lenght and structure\n- Getting objects (class) to read some specialized data\n- Works on data at different levels\n- Reading UUIDs in the good format (16bits, 32bits, 128bits)\n- Access to manufacturer data for custom ID of companies\n- Decoding and reading **Apple iBeacon** format\n- Decoding and reading **Google EddyStone** format :\n  - EddyStone UID\n  - EddyStone URL *(Beacon URI)*\n  - EddyStone TML Unencrypted\n  - EddyStone TML Encrypted\n  - EddyStone EID\n- Estimating device proximity with 3 equations :\n  - LogTX (path loss exponent variable)\n  - OldBconTX (on old iPhone/Android)\n  - NewBconTX (on recent iPhone/Android)\n\n### Example of using *BLEAdvReader* easily :\n```python\n# Getting \"advertisingData\" before via the BLE\n\nfrom bleAdvReader import BLEAdvReader\n\nadvReader = BLEAdvReader(advertisingData)\n\n# Gets the service data part in the advertising packet,\nsvcData = advReader.GetDataByDataType(BLEAdvReader.DATA_TYPE_SVC_DATA)\n\n# List all decoded and structured objects (class),\nfor advElement in advReader.GetAllElements() :\n    print(advElement)\n    # Finds an iBeacon with classes instances comparison,\n    if isinstance(advElement, BLEAdvReader.AppleIBeacon) :\n    \tprint('This is an iBeacon with UUID %s' % advElement.StrUUID)\n\n# Gets the same iBeacon more directly,\niBeaconElement = advReader.GetElementByClass(BLEAdvReader.AppleIBeacon)\nif iBeaconElement :\n\tprint('iBeacon found!')\n```\n\n### Using *BLEAdvReader* main class :\n\n| Name | Function |\n| - | - |\n| Constructor | `advReader = BLEAdvReader(advertisingData)` |\n| GetDataByDataType | `data = advReader.GetDataByDataType(dataType)` |\n| GetAllElements | `advElements = advReader.GetAllElements()` |\n| GetElementByClass | `advElement = advReader.GetElementByClass(elementType)` |\n\n| Element type (class) |\n| - |\n| BLEAdvReader.Flags |\n| BLEAdvReader.AdoptedService16bits |\n| BLEAdvReader.AdoptedService32bits |\n| BLEAdvReader.AdoptedService128bits |\n| BLEAdvReader.ShortName |\n| BLEAdvReader.CompleteName |\n| BLEAdvReader.TXPowerLevel |\n| BLEAdvReader.ServiceData |\n| BLEAdvReader.ManufacturerData |\n| BLEAdvReader.AppleService |\n| BLEAdvReader.AppleIBeacon |\n| BLEAdvReader.EddyStoneUID |\n| BLEAdvReader.EddyStoneURL |\n| BLEAdvReader.EddyStoneTLMUnencrypted |\n| BLEAdvReader.EddyStoneTLMEncrypted |\n| BLEAdvReader.EddyStoneEID |\n\n| Data type |\n| - |\n| BLEAdvReader.DATA_TYPE_FLAGS |\n| BLEAdvReader.DATA_TYPE_INCOMP_16BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_COMP_16BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_INCOMP_32BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_COMP_32BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_INCOMP_128BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_COMP_128BITS_UUIDS |\n| BLEAdvReader.DATA_TYPE_SHORT_NAME |\n| BLEAdvReader.DATA_TYPE_COMPLETE_NAME |\n| BLEAdvReader.DATA_TYPE_TX_POWER_LEVEL |\n| BLEAdvReader.DATA_TYPE_DEVICE_CLASS |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C192 |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R192 |\n| BLEAdvReader.DATA_TYPE_DEVICE_ID |\n| BLEAdvReader.DATA_TYPE_SECU_MNGR_TK_VAL |\n| BLEAdvReader.DATA_TYPE_SECU_MNGR_OOB_FLAGS |\n| BLEAdvReader.DATA_TYPE_SLAVE_CONN_INT_RNG |\n| BLEAdvReader.DATA_TYPE_16BITS_SVC_SOL_UUIDS |\n| BLEAdvReader.DATA_TYPE_128BITS_SVC_SOL_UUIDS |\n| BLEAdvReader.DATA_TYPE_SVC_DATA |\n| BLEAdvReader.DATA_TYPE_SVC_DATA_16BITS_UUID |\n| BLEAdvReader.DATA_TYPE_PUB_TARGET_ADDR |\n| BLEAdvReader.DATA_TYPE_RAND_TARGET_ADDR |\n| BLEAdvReader.DATA_TYPE_APPEARANCE |\n| BLEAdvReader.DATA_TYPE_ADV_INT |\n| BLEAdvReader.DATA_TYPE_LE_BLT_DEVICE_ADDR |\n| BLEAdvReader.DATA_TYPE_LE_ROLE |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C256 |\n| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R256 |\n| BLEAdvReader.DATA_TYPE_32BITS_SVC_SOL_UUIDS |\n| BLEAdvReader.DATA_TYPE_SVC_DATA_32BITS_UUID |\n| BLEAdvReader.DATA_TYPE_SVC_DATA_128BITS_UUID |\n| BLEAdvReader.DATA_TYPE_LE_SECU_CONN_RAND_VAL |\n| BLEAdvReader.DATA_TYPE_URI |\n| BLEAdvReader.DATA_TYPE_INDOOR_POS |\n| BLEAdvReader.DATA_TYPE_TRANS_DISCOV_DATA |\n| BLEAdvReader.DATA_TYPE_LE_SUPPORT_FEAT |\n| BLEAdvReader.DATA_TYPE_CHAN_MAP_UPD_INDIC |\n| BLEAdvReader.DATA_TYPE_PB_ADV |\n| BLEAdvReader.DATA_TYPE_MESH_MSG |\n| BLEAdvReader.DATA_TYPE_MESH_BEACON |\n| BLEAdvReader.DATA_TYPE_3D_INFO_DATA |\n| BLEAdvReader.DATA_TYPE_MANUFACTURER_DATA |\n\n### Using *BLEAdvReader.Flags* class :\n\n| Name | Property | Type |\n| - | - | - |\n| LE_LIMITED_DISC_MODE \t\t| `flags.LE_LIMITED_DISC_MODE`\t\t| bool |\n| LE_GENERAL_DISC_MODE \t\t| `flags.LE_GENERAL_DISC_MODE`\t\t| bool |\n| BR_EDR_NOT_SUPPORTED \t\t| `flags.BR_EDR_NOT_SUPPORTED`\t\t| bool |\n| LE_BR_EDR_CONTROLLER \t\t| `flags.LE_BR_EDR_CONTROLLER`\t\t| bool |\n| LE_BR_EDR_HOST\t\t\t| `flags.LE_BR_EDR_HOST`\t\t\t| bool |\n| LE_ONLY_LIMITED_DISC_MODE | `flags.LE_ONLY_LIMITED_DISC_MODE`\t| bool |\n| LE_ONLY_GENERAL_DISC_MODE | `flags.LE_ONLY_GENERAL_DISC_MODE`\t| bool |\n\n### Using *BLEAdvReader.AdoptedService16bits* class :\n\n| Name | Property | Type |\n| - | - | - |\n| UUID    | `adoptedSvc.UUID`    | int |\n| StrUUID | `adoptedSvc.StrUUID` | string |\n\n### Using *BLEAdvReader.AdoptedService32bits* class :\n\n| Name | Property | Type |\n| - | - | - |\n| UUID    | `adoptedSvc.UUID`    | int |\n| StrUUID | `adoptedSvc.StrUUID` | string |\n\n### Using *BLEAdvReader.AdoptedService128bits* class :\n\n| Name | Property | Type |\n| - | - | - |\n| UUID    | `adoptedSvc.UUID`    | bytes |\n| StrUUID | `adoptedSvc.StrUUID` | string |\n\n### Using *BLEAdvReader.ShortName* class :\nDirectly usable as string\n\n### Using *BLEAdvReader.CompleteName* class :\nDirectly usable as string\n\n### Using *BLEAdvReader.TXPowerLevel* class :\n\n| Name | Property | Type |\n| - | - | - |\n| DBM | `txPower.DBM` | int |\n\n| Name | Function |\n| - | - |\n| GetProximityByLogTX | `meters = txPowerLvl.GetProximityByLogTX(rssi, n_PathLossExp=2)` |\n| GetProximityByOldBconTX | `meters = txPowerLvl.GetProximityByOldBconTX(rssi)` |\n| GetProximityByNewBconTX | `meters = txPowerLvl.GetProximityByNewBconTX(rssi)` |\n\n### Using *BLEAdvReader.ServiceData* class :\n\n| Name | Property | Type |\n| - | - | - |\n| UUID | `svcData.UUID` | int |\n| StrUUID | `svcData.StrUUID` | string |\n| Data | `svcData.Data` | bytes |\n\n### Using *BLEAdvReader.ManufacturerData* class :\n\n| Name | Property | Type |\n| - | - | - |\n| CompanyID | `mfacturerData.CompanyID` | int |\n| StrCompanyID | `mfacturerData.StrCompanyID` | string |\n| Data | `mfacturerData.Data` | bytes |\n\n### Using *BLEAdvReader.AppleService* class :\n\n| Name | Property | Type |\n| - | - | - |\n| TypeName | `appleSvc.TypeName` | string |\n| Data | `appleSvc.Data` | bytes |\n\n| TypeName value |\n| - |\n| Empty *(unknown type)* |\n| `\"AirDrop\"` |\n| `\"AirPods\"` |\n| `\"AirPlay Destination\"` |\n| `\"AirPlay Source\"` |\n| `\"HandOff\"` |\n| `\"Nearby\"` |\n\n### Using *BLEAdvReader.AppleIBeacon* class :\n\n| Name | Property | Type |\n| - | - | - |\n| UUID | `iBeacon.UUID` | bytes |\n| StrUUID | `iBeacon.StrUUID` | string |\n| Major | `iBeacon.Major` | int |\n| Minor | `iBeacon.Minor` | int |\n| TxPower | `iBeacon.TxPower` | int |\n\n| Name | Function |\n| - | - |\n| GetProximityByLogTX | `meters = iBeacon.GetProximityByLogTX(rssi, n_PathLossExp=2)` |\n| GetProximityByOldBconTX | `meters = iBeacon.GetProximityByOldBconTX(rssi)` |\n| GetProximityByNewBconTX | `meters = iBeacon.GetProximityByNewBconTX(rssi)` |\n\n### Using *BLEAdvReader.EddyStoneUID* class :\n\n| Name | Property | Type |\n| - | - | - |\n| TxPower | `beaconEddyStone.TxPower` | int |\n| Namespace | `beaconEddyStone.Namespace` | bytes |\n| Instance | `beaconEddyStone.Instance` | bytes |\n\n| Name | Function |\n| - | - |\n| GetProximityByLogTX | `meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2)` |\n| GetProximityByOldBconTX | `meters = beaconEddyStone.GetProximityByOldBconTX(rssi)` |\n| GetProximityByNewBconTX | `meters = beaconEddyStone.GetProximityByNewBconTX(rssi)` |\n\n### Using *BLEAdvReader.EddyStoneURL* class :\n\n| Name | Property | Type |\n| - | - | - |\n| TxPower | `beaconEddyStone.TxPower` | int |\n| URL | `beaconEddyStone.URL` | string |\n\n| Name | Function |\n| - | - |\n| GetProximityByLogTX | `meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2)` |\n| GetProximityByOldBconTX | `meters = beaconEddyStone.GetProximityByOldBconTX(rssi)` |\n| GetProximityByNewBconTX | `meters = beaconEddyStone.GetProximityByNewBconTX(rssi)` |\n\n### Using *BLEAdvReader.EddyStoneTLMUnencrypted* class :\n\n| Name | Property | Type |\n| - | - | - |\n| VBatt | `beaconEddyStone.VBatt` | int |\n| Temp | `beaconEddyStone.Temp` | int |\n| AdvCnt | `beaconEddyStone.AdvCnt` | int |\n| SecCnt | `beaconEddyStone.SecCnt` | int |\n\n### Using *BLEAdvReader.EddyStoneTLMEncrypted* class :\n\n| Name | Property | Type |\n| - | - | - |\n| ETLM | `beaconEddyStone.ETLM` | bytes |\n| SALT | `beaconEddyStone.SALT` | int |\n| MIC | `beaconEddyStone.MIC` | int |\n\n### Using *BLEAdvReader.EddyStoneEID* class :\n\n| Name | Property | Type |\n| - | - | - |\n| TxPower | `beaconEddyStone.TxPower` | int |\n| EncryptedID | `beaconEddyStone.EncryptedID` | bytes |\n\n| Name | Function |\n| - | - |\n| GetProximityByLogTX | `meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2)` |\n| GetProximityByOldBconTX | `meters = beaconEddyStone.GetProximityByOldBconTX(rssi)` |\n| GetProximityByNewBconTX | `meters = beaconEddyStone.GetProximityByNewBconTX(rssi)` |\n\n### Using *BLEAdvReader.ProximityHelper* \"static\" class :\n\n| Name | Function |\n| - | - |\n| LogTX | `meters = BLEAdvReader.ProximityHelper.LogTX(rssi, rssiTX, n_PathLossExp=2)` |\n| OldBconTX | `meters = BLEAdvReader.ProximityHelper.OldBconTX(rssi, rssiTX)` |\n| NewBconTX | `meters = BLEAdvReader.ProximityHelper.NewBconTX(rssi, rssiTX)` |\n\n\n\n### By JC`zic for [HC²](https://www.hc2.fr) ;')\n\n*Keep it simple, stupid* :+1:\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjczic%2Fbleadvreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjczic%2Fbleadvreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjczic%2Fbleadvreader/lists"}