Thingsboard的控件小部件声称“设备已脱机”。

时间:2019-12-05 12:46:51

标签: iot thingsboard

我在Raspberry Pi 3B上有一个python程序,可以在Thingsboard上发送数据。 Thingsboard中的设备作为单个实体连接到仪表板。运行该程序时,可以在仪表板的图表和卡片上显示数据,并且可以通过规则链发送服务器端RPC命令。但是控件控件声称“设备已离线”。

这是Raspberry的代码:

import paho.mqtt.client as mqtt
import time
import json
import random

def on_message(client, data, message):
  print json.loads(message.payload)

def main():
  client = mqtt.Client("python1")

  client.connected_flag=False
  client.suppress_puback_flag=False

  client.on_message = on_message

  token=[DEVICE ID]
  if token !="":
     pass
  client.username_pw_set(token, "")

  client.connect([MY THINGSBOARD HOST'S IP], 1883)
  client.subscribe("v1/devices/me/attributes", 1)
  client.subscribe("v1/devices/me/rpc/request/+", 1)
  time.sleep(2)

  while not client.connected_flag:
     client.loop()

  while True:
      message = {"number": random.randint(0, 100)};
      message_json = json.parse(message)

      client.publish("v1/devices/me/telemetry", message_json, 1)
      client.loop_start()
      time.sleep(3)
      client.loop_stop()

if __name__== '__main__':
    main()

如何获取控件小部件以实现设备在线?

1 个答案:

答案 0 :(得分:0)

打开仪表板控件小部件时,向您发送请求:

{"method":"getValue","params":{}}

您需要在超时之前对此消息做出响应。否则设备将离线,并且我不知道是否有使设备在线的方法。

编辑

J-Dobu,是的,您需要使用双向RPC。

请逐步查找路径:

要解决您的问题(假设您的API是HTML API),请执行以下操作: 1)当您打开仪表板时,RPC小部件会生成RPC命令 2)使用消息订阅此命令: curl -v -X GET http://localhost:8080/api/v1/ $ ACCESS_TOKEN / rpc 3)Thingsboard响应应类似于以下内容:{“ id”:956,“ method”:“ getValue”,“ params”:null} 4)使用命令对此进行答复(在您的情况下,用您的ID替换956):curl -v -X POST -d'20'https://cloud.thingsboard.io/api/v1/ $ ACCESS_TOKEN / rpc / 956 --header“ Content-Type:application / json”

Control RPC Widget超时(在编辑模式和“高级”选项卡上)。 确保您在此超时时间段内答复。否则,设备将再次使用另一个ID生成RPC命令,并且它不会监听上一个答复。

在根规则链中,我直接将“消息类型切换”连接到RPC调用请求。确保您的路径最短。就我而言,这就是问题所在。当我尝试添加一些逻辑时,它无法正常工作。

关于树莓派,如果您没有找到正确的答案,则可能使用了错误的API。您可以使用id和method看到正确的响应吗?