Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

A BLE tool library to decode some advertising data in object mode (used on ESP32 and Pycom modules)

License

Notifications You must be signed in to change notification settings

jczic/BLEAdvReader

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A BLE tool library to decode some advertising data in object mode (used on ESP32 and Pycom modules)

HC²

Very easy to integrate and very light with one file only :

  • "bleAdvReader.py"

BLEAdvReader features :

  • 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)

Example of using BLEAdvReader easily :

# 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!')

Using BLEAdvReader main class :

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

Using BLEAdvReader.Flags class :

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

Using BLEAdvReader.AdoptedService16bits class :

Name Property Type
UUID adoptedSvc.UUID int
StrUUID adoptedSvc.StrUUID string

Using BLEAdvReader.AdoptedService32bits class :

Name Property Type
UUID adoptedSvc.UUID int
StrUUID adoptedSvc.StrUUID string

Using BLEAdvReader.AdoptedService128bits class :

Name Property Type
UUID adoptedSvc.UUID bytes
StrUUID adoptedSvc.StrUUID string

Using BLEAdvReader.ShortName class :

Directly usable as string

Using BLEAdvReader.CompleteName class :

Directly usable as string

Using BLEAdvReader.TXPowerLevel class :

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)

Using BLEAdvReader.ServiceData class :

Name Property Type
UUID svcData.UUID int
StrUUID svcData.StrUUID string
Data svcData.Data bytes

Using BLEAdvReader.ManufacturerData class :

Name Property Type
CompanyID mfacturerData.CompanyID int
StrCompanyID mfacturerData.StrCompanyID string
Data mfacturerData.Data bytes

Using BLEAdvReader.AppleService class :

Name Property Type
TypeName appleSvc.TypeName string
Data appleSvc.Data bytes
TypeName value
Empty (unknown type)
"AirDrop"
"AirPods"
"AirPlay Destination"
"AirPlay Source"
"HandOff"
"Nearby"

Using BLEAdvReader.AppleIBeacon class :

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)

Using BLEAdvReader.EddyStoneUID class :

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)

Using BLEAdvReader.EddyStoneURL class :

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)

Using BLEAdvReader.EddyStoneTLMUnencrypted class :

Name Property Type
VBatt beaconEddyStone.VBatt int
Temp beaconEddyStone.Temp int
AdvCnt beaconEddyStone.AdvCnt int
SecCnt beaconEddyStone.SecCnt int

Using BLEAdvReader.EddyStoneTLMEncrypted class :

Name Property Type
ETLM beaconEddyStone.ETLM bytes
SALT beaconEddyStone.SALT int
MIC beaconEddyStone.MIC int

Using BLEAdvReader.EddyStoneEID class :

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)

Using BLEAdvReader.ProximityHelper "static" class :

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 👍

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.