1. import datetime
    2. import paho.mqtt.client as paho
    3. import json
    4. import time
    5. import random
    6. # 设备的访问令牌
    7. accessToken = "T8Uqq3g7sVZoBKfDE8uc"
    8. # thingsboard的服务器IP地址
    9. host = 'thingsboard-local'
    10. # `mqtt`的端口号
    11. port = 1883
    12. def on_publish(client, userdata, result):
    13. print("时间: {}, client: {}, userdata: {}, result: {}".format(datetime.datetime.now(), client, userdata, result))
    14. print("publish ...")
    15. def on_connect(client, userdata, flag, rc):
    16. print("connect ...")
    17. def on_subscribe(client, userdata, mid, granted_qos):
    18. print("subscribe ...")
    19. def on_message(client, obj, msg):
    20. print('receive message ...')
    21. print(msg.payload)
    22. # print("平台发布的需要修改的寄存器值是:", json.loads(msg.payload)['params'])
    23. # 当收到平台发布的数据之后修改PLC的寄存器的值。modbus_tcp 的写操作。
    24. mqtt = paho.Client("device_id_dev_001")
    25. mqtt.on_publish = on_publish
    26. mqtt.on_connect = on_connect
    27. mqtt.username_pw_set(accessToken)
    28. mqtt.connect(host, port, keepalive=60)
    29. mqtt.loop_start()
    30. while True:
    31. # 来自PLC,实际状况中读 modbus TCP的读寄存器值。eg:40001
    32. data = {
    33. "ts": int(time.time() * 1000),
    34. "temperature": random.randint(0, 40),
    35. "humidity": random.randint(5, 50)
    36. }
    37. # 模拟`硬件设备` 上报数据到 `thingsboard`服务端
    38. mqtt.publish('v1/devices/me/telemetry', payload=json.dumps(data), qos=0)
    39. time.sleep(1 * 60) # 5秒发布一次数据

    image.png