A BLE tool library to decode some advertising data in object mode (used on ESP32 and Pycom modules)
"bleAdvReader.py"
- Access to all elements data in BLE advertising packets
- Checking data format errors in lenght and structure
- Getting objects (class) to read some specialized data
- Works on data at different levels
- Reading UUIDs in the good format (16bits, 32bits, 128bits)
- Access to manufacturer data for custom ID of companies
- Decoding and reading Apple iBeacon format
- Decoding and reading Google EddyStone format :
- EddyStone UID
- EddyStone URL (Beacon URI)
- EddyStone TML Unencrypted
- EddyStone TML Encrypted
- EddyStone EID
- Estimating device proximity with 3 equations :
- LogTX (path loss exponent variable)
- OldBconTX (on old iPhone/Android)
- NewBconTX (on recent iPhone/Android)
# Getting "advertisingData" before via the BLE
from bleAdvReader import BLEAdvReader
advReader = BLEAdvReader(advertisingData)
# Gets the service data part in the advertising packet,
svcData = advReader.GetDataByDataType(BLEAdvReader.DATA_TYPE_SVC_DATA)
# List all decoded and structured objects (class),
for advElement in advReader.GetAllElements() :
print(advElement)
# Finds an iBeacon with classes instances comparison,
if isinstance(advElement, BLEAdvReader.AppleIBeacon) :
print('This is an iBeacon with UUID %s' % advElement.StrUUID)
# Gets the same iBeacon more directly,
iBeaconElement = advReader.GetElementByClass(BLEAdvReader.AppleIBeacon)
if iBeaconElement :
print('iBeacon found!')| Name | Function |
|---|---|
| Constructor | advReader = BLEAdvReader(advertisingData) |
| GetDataByDataType | data = advReader.GetDataByDataType(dataType) |
| GetAllElements | advElements = advReader.GetAllElements() |
| GetElementByClass | advElement = advReader.GetElementByClass(elementType) |
| Element type (class) |
|---|
| BLEAdvReader.Flags |
| BLEAdvReader.AdoptedService16bits |
| BLEAdvReader.AdoptedService32bits |
| BLEAdvReader.AdoptedService128bits |
| BLEAdvReader.ShortName |
| BLEAdvReader.CompleteName |
| BLEAdvReader.TXPowerLevel |
| BLEAdvReader.ServiceData |
| BLEAdvReader.ManufacturerData |
| BLEAdvReader.AppleService |
| BLEAdvReader.AppleIBeacon |
| BLEAdvReader.EddyStoneUID |
| BLEAdvReader.EddyStoneURL |
| BLEAdvReader.EddyStoneTLMUnencrypted |
| BLEAdvReader.EddyStoneTLMEncrypted |
| BLEAdvReader.EddyStoneEID |
| Data type |
|---|
| BLEAdvReader.DATA_TYPE_FLAGS |
| BLEAdvReader.DATA_TYPE_INCOMP_16BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_COMP_16BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_INCOMP_32BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_COMP_32BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_INCOMP_128BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_COMP_128BITS_UUIDS |
| BLEAdvReader.DATA_TYPE_SHORT_NAME |
| BLEAdvReader.DATA_TYPE_COMPLETE_NAME |
| BLEAdvReader.DATA_TYPE_TX_POWER_LEVEL |
| BLEAdvReader.DATA_TYPE_DEVICE_CLASS |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C192 |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R192 |
| BLEAdvReader.DATA_TYPE_DEVICE_ID |
| BLEAdvReader.DATA_TYPE_SECU_MNGR_TK_VAL |
| BLEAdvReader.DATA_TYPE_SECU_MNGR_OOB_FLAGS |
| BLEAdvReader.DATA_TYPE_SLAVE_CONN_INT_RNG |
| BLEAdvReader.DATA_TYPE_16BITS_SVC_SOL_UUIDS |
| BLEAdvReader.DATA_TYPE_128BITS_SVC_SOL_UUIDS |
| BLEAdvReader.DATA_TYPE_SVC_DATA |
| BLEAdvReader.DATA_TYPE_SVC_DATA_16BITS_UUID |
| BLEAdvReader.DATA_TYPE_PUB_TARGET_ADDR |
| BLEAdvReader.DATA_TYPE_RAND_TARGET_ADDR |
| BLEAdvReader.DATA_TYPE_APPEARANCE |
| BLEAdvReader.DATA_TYPE_ADV_INT |
| BLEAdvReader.DATA_TYPE_LE_BLT_DEVICE_ADDR |
| BLEAdvReader.DATA_TYPE_LE_ROLE |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_HASH_C256 |
| BLEAdvReader.DATA_TYPE_SMP_PAIR_RAND_R256 |
| BLEAdvReader.DATA_TYPE_32BITS_SVC_SOL_UUIDS |
| BLEAdvReader.DATA_TYPE_SVC_DATA_32BITS_UUID |
| BLEAdvReader.DATA_TYPE_SVC_DATA_128BITS_UUID |
| BLEAdvReader.DATA_TYPE_LE_SECU_CONN_RAND_VAL |
| BLEAdvReader.DATA_TYPE_URI |
| BLEAdvReader.DATA_TYPE_INDOOR_POS |
| BLEAdvReader.DATA_TYPE_TRANS_DISCOV_DATA |
| BLEAdvReader.DATA_TYPE_LE_SUPPORT_FEAT |
| BLEAdvReader.DATA_TYPE_CHAN_MAP_UPD_INDIC |
| BLEAdvReader.DATA_TYPE_PB_ADV |
| BLEAdvReader.DATA_TYPE_MESH_MSG |
| BLEAdvReader.DATA_TYPE_MESH_BEACON |
| BLEAdvReader.DATA_TYPE_3D_INFO_DATA |
| BLEAdvReader.DATA_TYPE_MANUFACTURER_DATA |
| Name | Property | Type |
|---|---|---|
| LE_LIMITED_DISC_MODE | flags.LE_LIMITED_DISC_MODE |
bool |
| LE_GENERAL_DISC_MODE | flags.LE_GENERAL_DISC_MODE |
bool |
| BR_EDR_NOT_SUPPORTED | flags.BR_EDR_NOT_SUPPORTED |
bool |
| LE_BR_EDR_CONTROLLER | flags.LE_BR_EDR_CONTROLLER |
bool |
| LE_BR_EDR_HOST | flags.LE_BR_EDR_HOST |
bool |
| LE_ONLY_LIMITED_DISC_MODE | flags.LE_ONLY_LIMITED_DISC_MODE |
bool |
| LE_ONLY_GENERAL_DISC_MODE | flags.LE_ONLY_GENERAL_DISC_MODE |
bool |
| Name | Property | Type |
|---|---|---|
| UUID | adoptedSvc.UUID |
int |
| StrUUID | adoptedSvc.StrUUID |
string |
| Name | Property | Type |
|---|---|---|
| UUID | adoptedSvc.UUID |
int |
| StrUUID | adoptedSvc.StrUUID |
string |
| Name | Property | Type |
|---|---|---|
| UUID | adoptedSvc.UUID |
bytes |
| StrUUID | adoptedSvc.StrUUID |
string |
Directly usable as string
Directly usable as string
| Name | Property | Type |
|---|---|---|
| DBM | txPower.DBM |
int |
| Name | Function |
|---|---|
| GetProximityByLogTX | meters = txPowerLvl.GetProximityByLogTX(rssi, n_PathLossExp=2) |
| GetProximityByOldBconTX | meters = txPowerLvl.GetProximityByOldBconTX(rssi) |
| GetProximityByNewBconTX | meters = txPowerLvl.GetProximityByNewBconTX(rssi) |
| Name | Property | Type |
|---|---|---|
| UUID | svcData.UUID |
int |
| StrUUID | svcData.StrUUID |
string |
| Data | svcData.Data |
bytes |
| Name | Property | Type |
|---|---|---|
| CompanyID | mfacturerData.CompanyID |
int |
| StrCompanyID | mfacturerData.StrCompanyID |
string |
| Data | mfacturerData.Data |
bytes |
| Name | Property | Type |
|---|---|---|
| TypeName | appleSvc.TypeName |
string |
| Data | appleSvc.Data |
bytes |
| TypeName value |
|---|
| Empty (unknown type) |
"AirDrop" |
"AirPods" |
"AirPlay Destination" |
"AirPlay Source" |
"HandOff" |
"Nearby" |
| Name | Property | Type |
|---|---|---|
| UUID | iBeacon.UUID |
bytes |
| StrUUID | iBeacon.StrUUID |
string |
| Major | iBeacon.Major |
int |
| Minor | iBeacon.Minor |
int |
| TxPower | iBeacon.TxPower |
int |
| Name | Function |
|---|---|
| GetProximityByLogTX | meters = iBeacon.GetProximityByLogTX(rssi, n_PathLossExp=2) |
| GetProximityByOldBconTX | meters = iBeacon.GetProximityByOldBconTX(rssi) |
| GetProximityByNewBconTX | meters = iBeacon.GetProximityByNewBconTX(rssi) |
| Name | Property | Type |
|---|---|---|
| TxPower | beaconEddyStone.TxPower |
int |
| Namespace | beaconEddyStone.Namespace |
bytes |
| Instance | beaconEddyStone.Instance |
bytes |
| Name | Function |
|---|---|
| GetProximityByLogTX | meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2) |
| GetProximityByOldBconTX | meters = beaconEddyStone.GetProximityByOldBconTX(rssi) |
| GetProximityByNewBconTX | meters = beaconEddyStone.GetProximityByNewBconTX(rssi) |
| Name | Property | Type |
|---|---|---|
| TxPower | beaconEddyStone.TxPower |
int |
| URL | beaconEddyStone.URL |
string |
| Name | Function |
|---|---|
| GetProximityByLogTX | meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2) |
| GetProximityByOldBconTX | meters = beaconEddyStone.GetProximityByOldBconTX(rssi) |
| GetProximityByNewBconTX | meters = beaconEddyStone.GetProximityByNewBconTX(rssi) |
| Name | Property | Type |
|---|---|---|
| VBatt | beaconEddyStone.VBatt |
int |
| Temp | beaconEddyStone.Temp |
int |
| AdvCnt | beaconEddyStone.AdvCnt |
int |
| SecCnt | beaconEddyStone.SecCnt |
int |
| Name | Property | Type |
|---|---|---|
| ETLM | beaconEddyStone.ETLM |
bytes |
| SALT | beaconEddyStone.SALT |
int |
| MIC | beaconEddyStone.MIC |
int |
| Name | Property | Type |
|---|---|---|
| TxPower | beaconEddyStone.TxPower |
int |
| EncryptedID | beaconEddyStone.EncryptedID |
bytes |
| Name | Function |
|---|---|
| GetProximityByLogTX | meters = beaconEddyStone.GetProximityByLogTX(rssi, n_PathLossExp=2) |
| GetProximityByOldBconTX | meters = beaconEddyStone.GetProximityByOldBconTX(rssi) |
| GetProximityByNewBconTX | meters = beaconEddyStone.GetProximityByNewBconTX(rssi) |
| Name | Function |
|---|---|
| LogTX | meters = BLEAdvReader.ProximityHelper.LogTX(rssi, rssiTX, n_PathLossExp=2) |
| OldBconTX | meters = BLEAdvReader.ProximityHelper.OldBconTX(rssi, rssiTX) |
| NewBconTX | meters = BLEAdvReader.ProximityHelper.NewBconTX(rssi, rssiTX) |
By JC`zic for HC² ;')
Keep it simple, stupid 👍
