device refactored

This commit is contained in:
Wolfgang Hottgenroth 2023-01-28 14:28:07 +01:00
parent ad21e10686
commit 30a8fe0732
Signed by: wn
GPG Key ID: 836E9E1192A6B132
2 changed files with 88 additions and 5 deletions

View File

@ -2,3 +2,84 @@ Sending messages downlink via MQTT: https://www.thethingsindustries.com/docs/int
Topics for messages at TTN: https://www.thethingsindustries.com/docs/integrations/mqtt/#publishing-downlink-traffic Topics for messages at TTN: https://www.thethingsindustries.com/docs/integrations/mqtt/#publishing-downlink-traffic
v3/de-hottis-saerbeck-monitoring@ttn/devices/eui-43fa12f400006c88/up {"end_device_ids":{"device_id":"eui-43fa12f400006c88","application_ids":{"application_id":"de-hottis-saerbeck-monitoring"},"dev_eui":"43FA12F400006C88","join_eui":"A05781000112AAF4","dev_addr":"260BB631"},"correlation_ids":["as:up:01GQW8KCKH4QP0HAZVGX76ZQPJ","gs:conn:01GQRVYYF3VRDHPXJ9SMPKCVE9","gs:up:host:01GQRVYYFEKAKBBHKQ7DFZRZP7","gs:uplink:01GQW8KCD2RFP288RVG4Y08221","ns:uplink:01GQW8KCD2NB2KTYAHREKA6157","rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01GQW8KCD20G5X5MQ4A573VJPQ","rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01GQW8KCKGXRMKDG9YT39W7ZRG"],"received_at":"2023-01-28T13:20:51.824921712Z","uplink_message":{"session_key_id":"AYXz7SWyVscRWxJ0n+li7Q==","f_port":2,"f_cnt":4883,"frm_payload":"AAAoxxH2YiABuJAJAAAoGcMKDQAAtKAJAAAojE9qDQAAlIAJAAAoNYZqDQAA1KAJAAA=","rx_metadata":[{"gateway_ids":{"gateway_id":"eui-e45f01fffeaf7c3d","eui":"B827EBFFFE8B01DD"},"time":"2023-01-28T13:20:51.542917013Z","timestamp":2243961114,"rssi":-49,"channel_rssi":-49,"snr":14.25,"location":{"latitude":51.4040448834672,"longitude":7.06016957759857,"altitude":110,"source":"SOURCE_REGISTRY"},"uplink_token":"CiIKIAoUZXVpLWU0NWYwMWZmZmVhZjdjM2QSCLgn6//+iwHdEJrCgK4IGgwIs8LUngYQq77KpgIgkJuFtKfzGQ==","received_at":"2023-01-28T13:20:51.598748264Z"}],"settings":{"data_rate":{"lora":{"bandwidth":125000,"spreading_factor":7,"coding_rate":"4/5"}},"frequency":"867100000","timestamp":2243961114,"time":"2023-01-28T13:20:51.542917013Z"},"received_at":"2023-01-28T13:20:51.618783358Z","confirmed":true,"consumed_airtime":"0.123136s","version_ids":{"brand_id":"heltec","model_id":"wifi-lora-32-class-c-otaa","hardware_version":"_unknown_hw_version_","firmware_version":"1.0","band_id":"EU_863_870"},"network_ids":{"net_id":"000013","tenant_id":"ttn","cluster_id":"eu1","cluster_address":"eu1.cloud.thethings.network"}}}
{
"end_device_ids": {
"device_id": "eui-43fa12f400006c88",
"application_ids": {
"application_id": "de-hottis-saerbeck-monitoring"
},
"dev_eui": "43FA12F400006C88",
"join_eui": "A05781000112AAF4",
"dev_addr": "260BB631"
},
"correlation_ids": [
"as:up:01GQW8KVMJW8XKQKVH2WDCFNQV",
"gs:conn:01GQRVYYF3VRDHPXJ9SMPKCVE9",
"gs:up:host:01GQRVYYFEKAKBBHKQ7DFZRZP7",
"gs:uplink:01GQW8KVE4N728REB8AABDJH0M",
"ns:uplink:01GQW8KVE4DH8HRT5BB402EY2J",
"rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01GQW8KVE4NRMWVAYP34TNDVER",
"rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01GQW8KVMJBCFVG2E347KBGAZZ"
],
"received_at": "2023-01-28T13:21:07.218686301Z",
"uplink_message": {
"session_key_id": "AYXz7SWyVscRWxJ0n+li7Q==",
"f_port": 2,
"f_cnt": 4884,
"frm_payload": "AAAoxxH2YiABuJgJAAAoGcMKDQAAtKAJAAAojE9qDQAAlIAJAAAoNYZqDQAA1KAJAAA=",
"rx_metadata": [
{
"gateway_ids": {
"gateway_id": "eui-e45f01fffeaf7c3d",
"eui": "B827EBFFFE8B01DD"
},
"time": "2023-01-28T13:21:06.937016963Z",
"timestamp": 2259350654,
"rssi": -49,
"channel_rssi": -49,
"snr": 14,
"location": {
"latitude": 51.4040448834672,
"longitude": 7.06016957759857,
"altitude": 110,
"source": "SOURCE_REGISTRY"
},
"uplink_token": "CiIKIAoUZXVpLWU0NWYwMWZmZmVhZjdjM2QSCLgn6//+iwHdEP7oq7UIGgsIw8LUngYQxpbWBSCwmKze4PMZ",
"received_at": "2023-01-28T13:21:06.992920891Z"
}
],
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 7,
"coding_rate": "4/5"
}
},
"frequency": "867900000",
"timestamp": 2259350654,
"time": "2023-01-28T13:21:06.937016963Z"
},
"received_at": "2023-01-28T13:21:07.012919474Z",
"confirmed": true,
"consumed_airtime": "0.118016s",
"version_ids": {
"brand_id": "heltec",
"model_id": "wifi-lora-32-class-c-otaa",
"hardware_version": "_unknown_hw_version_",
"firmware_version": "1.0",
"band_id": "EU_863_870"
},
"network_ids": {
"net_id": "000013",
"tenant_id": "ttn",
"cluster_id": "eu1",
"cluster_address": "eu1.cloud.thethings.network"
}
}
}

View File

@ -9,8 +9,9 @@ import struct
def mqttOnConnectCallback(client, userdata, flags, rc): def mqttOnConnectCallback(client, userdata, flags, rc):
logger.info("mqtt connected") logger.info("mqtt connected")
client.subscribe(config['MQTT_IN_TOPIC']) mqtt_in_topic = f"v3/{config['APPLICATION_TENANT']}/devices/+/up"
logger.info(f"subscribed to {config['MQTT_IN_TOPIC']}") client.subscribe(mqtt_in_topic)
logger.info(f"subscribed to {mqtt_in_topic}")
def mqttOnMessageCallback(client, userdata, message): def mqttOnMessageCallback(client, userdata, message):
try: try:
@ -18,13 +19,14 @@ def mqttOnMessageCallback(client, userdata, message):
payload = message.payload payload = message.payload
logger.debug(f"mqtt message received: {topic} -> {payload}") logger.debug(f"mqtt message received: {topic} -> {payload}")
parse_payload = json.loads(payload) parse_payload = json.loads(payload)
device_id = parse_payload['end_device_ids']['device_id']
frame = base64.b64decode(parse_payload['uplink_message']['frm_payload']) frame = base64.b64decode(parse_payload['uplink_message']['frm_payload'])
logger.info(f"{frame=}") logger.info(f"{frame=}")
status = struct.unpack('<H', frame[0:2])[0] status = struct.unpack('<H', frame[0:2])[0]
logger.info(f"{status=}") logger.info(f"{status=}")
if (status == 4): if (status == 4):
logger.info("Start up message received") logger.info(f"Start up message received from {device_id}")
# send downlink message with labels # send downlink message with labels
sensor_addrs = [] sensor_addrs = []
for i in range(0, 4): for i in range(0, 4):
@ -34,7 +36,7 @@ def mqttOnMessageCallback(client, userdata, message):
logger.debug(f"sensor {i}: 0x{sensor_addrs[i]:016x}") logger.debug(f"sensor {i}: 0x{sensor_addrs[i]:016x}")
else: else:
logger.info("Regular message received") logger.info(f"Regular message received from {device_id}")
# continue to parse and process message # continue to parse and process message
sensor_addrs = [] sensor_addrs = []
sensor_values = [] sensor_values = []
@ -63,7 +65,7 @@ REQUIRED_CONFIG_OPTIONS = [
'MQTT_BROKER', 'MQTT_BROKER',
'MQTT_PORT', 'MQTT_PORT',
'MQTT_CA', 'MQTT_CA',
'MQTT_IN_TOPIC' 'APPLICATION_TENANT'
] ]
config = {} config = {}