I have improved the code a bit to work in Python3 and provide a simple CSV output showing packages received and signal strengths for each gateway.
Output example: > 2018-04-15T13:52:31.521984942Z, drone-mapper-new, 319, eui-3535303229005f00, -37, {‘alt’: 252, ‘lat’: 46.565055642429314, ‘lon’: 15.658404568338653, ‘hdop’: 2.2}
# https://www.thethingsnetwork.org/forum/t/a-python-program-to-listen-to-your-devices-with-mqtt/9036/6
# Get data from MQTT server
# Run this with python 3, install paho.mqtt prior to use
import paho.mqtt.client as mqtt
import json
import base64
APPEUI = "70B3D57EF00069A3"
APPID = "my_second_lora_app"
PSW = 'ttn-account-v2.<lots-of-chars>'
#Call back functions
# gives connection message
def on_connect(mqttc, mosq, obj,rc):
print("Connected with result code:"+str(rc))
# subscribe for all devices of user
mqttc.subscribe('+/devices/+/up')
# gives message from device
def on_message(mqttc,obj,msg):
try:
#print(msg.payload)
x = json.loads(msg.payload.decode('utf-8'))
device = x["dev_id"]
counter = x["counter"]
payload_raw = x["payload_raw"]
payload_fields = x["payload_fields"]
datetime = x["metadata"]["time"]
gateways = x["metadata"]["gateways"]
# print for every gateway that has received the message and extract RSSI
for gw in gateways:
gateway_id = gw["gtw_id"]
rssi = gw["rssi"]
print(datetime + ", " + device + ", " + str(counter) + ", "+ gateway_id + ", "+ str(rssi) + ", " + str(payload_fields))
except Exception as e:
print(e)
pass
def on_publish(mosq, obj, mid):
print("mid: " + str(mid))
def on_subscribe(mosq, obj, mid, granted_qos):
print("Subscribed: " + str(mid) + " " + str(granted_qos))
def on_log(mqttc,obj,level,buf):
print("message:" + str(buf))
print("userdata:" + str(obj))
mqttc= mqtt.Client()
# Assign event callbacks
mqttc.on_connect=on_connect
mqttc.on_message=on_message
mqttc.username_pw_set(APPID, PSW)
mqttc.connect("eu.thethings.network",1883,60)
# and listen to server
run = True
while run:
mqttc.loop()