mirror of
https://github.com/esphome/esphome.git
synced 2025-06-15 06:46:59 +02:00
59 lines
1.2 KiB
Python
59 lines
1.2 KiB
Python
# Sourced from https://gist.github.com/agners/0338576e0003318b63ec1ea75adc90f9
|
|
import binascii
|
|
|
|
from esphome.const import CONF_CHANNEL
|
|
|
|
from . import (
|
|
CONF_EXT_PAN_ID,
|
|
CONF_MESH_LOCAL_PREFIX,
|
|
CONF_NETWORK_KEY,
|
|
CONF_NETWORK_NAME,
|
|
CONF_PAN_ID,
|
|
CONF_PSKC,
|
|
)
|
|
|
|
TLV_TYPES = {
|
|
0: CONF_CHANNEL,
|
|
1: CONF_PAN_ID,
|
|
2: CONF_EXT_PAN_ID,
|
|
3: CONF_NETWORK_NAME,
|
|
4: CONF_PSKC,
|
|
5: CONF_NETWORK_KEY,
|
|
7: CONF_MESH_LOCAL_PREFIX,
|
|
}
|
|
|
|
|
|
def parse_tlv(tlv) -> dict:
|
|
data = binascii.a2b_hex(tlv)
|
|
output = {}
|
|
pos = 0
|
|
while pos < len(data):
|
|
tag = data[pos]
|
|
pos += 1
|
|
_len = data[pos]
|
|
pos += 1
|
|
val = data[pos : pos + _len]
|
|
pos += _len
|
|
if tag in TLV_TYPES:
|
|
if tag == 3:
|
|
output[TLV_TYPES[tag]] = val.decode("utf-8")
|
|
else:
|
|
output[TLV_TYPES[tag]] = int.from_bytes(val)
|
|
return output
|
|
|
|
|
|
def main():
|
|
import sys
|
|
|
|
args = sys.argv[1:]
|
|
parsed = parse_tlv(args[0])
|
|
# print the parsed TLV data
|
|
for key, value in parsed.items():
|
|
if isinstance(value, bytes):
|
|
value = value.hex()
|
|
print(f"{key}: {value}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|