Ich verwende MQTT, um ein Thema zu abonnieren und Nachrichten zu empfangen. Ich habe diesen Code so weit geschrieben und es funktioniert gut Abonnieren und alle, aber ich habe Probleme mit der Bestimmung einer Möglichkeit, durch die Nutzlast, die ich von der MQTT-Broker erhalten Parsen. Ich habe versucht, die numerischen Werte zu erhalten, die ich in der Nutzlast sehe, aber ich kann den richtigen Ansatz nicht finden, um diese Daten zu analysieren. Irgendwelche Ideen/Vorschläge? Vielen Dank!Irgendwelche Ideen, wie man diese Nutzlast in Python analysieren kann?
Mein Code:
gibt es mehr Code, irrelevant ist. Dies ist nur ein Ausschnitt.
import paho.mqtt.client as mqtt
import json
#Call back functions
# gives connection message
def on_connect(client,userdata,rc):
print("Connected with result code:"+str(rc))
# subscribe for all devices of user
client.subscribe('+/devices/+/up')
def on_connect(client,userdata,rc):
print("Connected with result code:"+str(rc))
# subscribe for all devices of user
client.subscribe('+/devices/+/up')
def on_message(client,userdata,msg):
print"Topic",msg.topic + "\nMessage:" + str(msg.payload)
node_data = str(msg.payload)
print '\r\n test'
print node_data
j = json.loads(node_data)
print "\r\n after loads: "
print j
Meine Ausgänge:?
Message:{"payload":"Dgv+CggGBCYFAPMLAgc=","fields":{"Light":58.32,"Pressure":98569.5,"Temp":32.4375,"X_accel":0.6875,"Y_accel":-0.125,"Z_accel":0.625},"port":1,"counter":8,"dev_eui":"000000007D9050C1","metadata":[{"frequency":904.3,"datarate":"SF7BW125","codingrate":"4/5","gateway_timestamp":2090979635,"gateway_time":"2016-07-28T02:26:15.386371Z","channel":2,"server_time":"2016-07-28T02:06:13.075194806Z","rssi":-13,"lsnr":9.5,"rfchain":0,"crc":1,"modulation":"LORA","gateway_eui":"0080000000009BE6","altitude":911,"longitude":-93.19677,"latitude":45.10303}]}
test
{"payload":"Dgv+CggGBCYFAPMLAgc=","fields":{"Light":58.32,"Pressure":98569.5,"Temp":32.4375,"X_accel":0.6875,"Y_accel":-0.125,"Z_accel":0.625},"port":1,"counter":8,"dev_eui":"000000007D9050C1","metadata":[{"frequency":904.3,"datarate":"SF7BW125","codingrate":"4/5","gateway_timestamp":2090979635,"gateway_time":"2016-07-28T02:26:15.386371Z","channel":2,"server_time":"2016-07-28T02:06:13.075194806Z","rssi":-13,"lsnr":9.5,"rfchain":0,"crc":1,"modulation":"LORA","gateway_eui":"0080000000009BE6","altitude":911,"longitude":-93.19677,"latitude":45.10303}]}
after loads:
{u'fields': {u'Y_accel': -0.125, u'Temp': 32.4375, u'X_accel': 0.6875, u'Light': 58.32, u'Pressure': 98569.5, u'Z_accel': 0.625}, u'counter': 8, u'port': 1, u'dev_eui': u'000000007D9050C1', u'payload': u'Dgv+CggGBCYFAPMLAgc=', u'metadata': [{u'gateway_time': u'2016-07-28T02:26:15.386371Z', u'server_time': u'2016-07-28T02:06:13.075194806Z', u'datarate': u'SF7BW125', u'gateway_eui': u'0080000000009BE6', u'modulation': u'LORA', u'gateway_timestamp': 2090979635, u'longitude': -93.19677, u'crc': 1, u'frequency': 904.3, u'rfchain': 0, u'codingrate': u'4/5', u'lsnr': 9.5, u'latitude': 45.10303, u'rssi': -13, u'altitude': 911, u'channel': 2}]}
Ich möchte die numerischen Werte aus dieser ... Zeichenfolge extrahieren können Dict Json (Nutzlast) für die 'Temp', " Light ',' Pressure 'usw. Parameter. Jeder Rat wird sehr geschätzt. Ich habe Folgendes versucht, aber ich erhalte diesen Fehler. Hat mir nicht viel ...
data = json.loads(node_data)
Press = data['Pressure']
print Press
Datei "C: \ Python27 \ My_Py_27_Codes \ scratch_py_mqtt.py", Zeile 25, in ON_MESSAGE Press = data [ 'Druck']
KeyError: 'Pressure'
Anscheinend ist "Druck" kein Schlüssel in diesem Wörterbuch?
Drücken Sie = Daten ["Felder"] ['Druck'] – Backtrack
versuchen Sie 'Daten ['Felder'] ['Druck']'. – bananafish
müssen Sie die genaue Position des Feldes angeben. In Ihrem Fall "Druck" ist innerhalb "Felder" – Backtrack