Я подключаюсь к брокеру mqtt в своем коде Python, который отправляет мне объекты json с
{значение: 7504, отметка времени: 1562595566}
Я хочу декодировать отметку времени изатем отправьте значение через http post или другой клиент mqtt на другой сервер.Так что это в основном потоковая пересылка.
Поэтому, прежде чем начать отправлять его на сервер, я просто хотел сначала распечатать декодированное значение.Это должно быть возможно, поскольку я получаю сообщения только каждые 10 с.Однако, как только я добавлю декодирование (print (datetime.fromtimestamp (unix_time_from_json_object))), я больше не смогу печатать полезные данные.Никаких исключений не называется.Поэтому я поместил декодирование в функцию и подумал, что многопоточность здесь может помочь.Но это тоже не работает.У меня заканчиваются идеи.
# -*- coding: utf-8 -*-
# Author:
# Company:
#
# Program:
#
#
# ----------------------------------------------------------------------------------------------------------------------
# Module
import paho.mqtt.client as mqtt
import json
from threading import Thread
from datetime import datetime
from threading import Thread
# ----------------------------------------------------------------------------------------------------------------------
# Variablen
mqtt_broker = "broker_address"
client_id = "some_client_id"
client_user_id = "client_user_id"
client_pw = "some_password"
server = "http://{ip_adress}/"
topic = "topic/1/topic/#"
# ----------------------------------------------------------------------------------------------------------------------
# Functions
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
# Manual subscription to the topics of the charging stations on the sensor things server
#for x in range(54, 758):
# client.subscribe("v1.0/Datastreams(" + str(x) + ")/Observations")
client.subscribe(topic)
def time_decode(unix_time):
utc = datetime.fromtimestamp(unix_time)
return utc
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
# print(msg.topic +" "+str(msg.payload))
payload = json.loads(msg.payload)
utc = payload['timestamp']
print(time_decode(utc))
print(payload)
#threading.Thread(target=time_decode, args=(utc)).start()
#t = Thread(target=time_decode, args=(payload['timestamp'])
#t.start()
#print(datetime.utcfromtimestamp(payload['timestamp']).strftime('%Y-%m-%d %H:%M:%S'))
# ----------------------------------------------------------------------------------------------------------------------
# Main program
client = mqtt.Client()
client.username_pw_set(client_user_id, client_pw)
client.on_connect = on_connect
client.on_message = on_message
# client.connect("ip_adress", 1883, 60)
client.connect(mqtt_broker, 1883, 60)
client.loop_forever()
#thread2 = Thread(target=client.loop_forever)
#thread2.start()
Итак, в первую очередь мне хотелось бы печатать декодированное время каждый раз, когда я получаю сообщение.Во-вторых, я хочу создать новый объект json со значением и датой-временем и отправить его через http post или mqtt на другой сервер