import datetimeimport paho.mqtt.client as pahoimport jsonimport timeimport random# 设备的访问令牌accessToken = "T8Uqq3g7sVZoBKfDE8uc"# thingsboard的服务器IP地址host = 'thingsboard-local'# `mqtt`的端口号port = 1883def on_publish(client, userdata, result): print("时间: {}, client: {}, userdata: {}, result: {}".format(datetime.datetime.now(), client, userdata, result)) print("publish ...")def on_connect(client, userdata, flag, rc): print(str(rc)) print("connect ...") client.subscribe("v1/devices/me/rpc/request/+", qos=0);def on_subscribe(client, userdata, mid, granted_qos): print("subscribe ...")def on_message(client, obj, msg): print('receive message ...') print("msg.payload: {}".format(msg.payload)) print("json.loads(msg.payload): {}".format(json.loads(msg.payload))) # print("平台发布的需要修改的寄存器值是:", json.loads(msg.payload)['params']) # 当收到平台发布的数据之后修改PLC的寄存器的值。modbus_tcp 的写操作。mqtt = paho.Client("device_id_dev_001")mqtt.on_publish = on_publishmqtt.on_connect = on_connectmqtt.on_subscribe = on_subscribemqtt.on_message = on_messagemqtt.username_pw_set(accessToken)mqtt.connect(host, port, keepalive=60)mqtt.loop_start()while True: # 来自PLC,实际状况中读 modbus TCP的读寄存器值。eg:40001 data = { "ts": int(time.time() * 1000), "temperature": random.randint(0, 40), "humidity": random.randint(5, 50) } # 模拟`硬件设备` 上报数据到 `thingsboard`服务端 mqtt.publish('v1/devices/me/telemetry', payload=json.dumps(data), qos=0) time.sleep(1 * 60) # 5秒发布一次数据