GPIO widgets 主要用来对设备的GPIO状态的显示和控制。
https://thingsboard.io/docs/reference/mqtt-api/#rpc-api

一、GPIO状态显示

显示画面大致如下:

1、【高级】:

主要设置GPIO LED的位置,默认颜色,Pin,标签,背景色等。
其中Pin(接脚)设置的值很重要,根据数据的值控制那个Pin的Led灯亮。

2、【数据】:

主要用来设置什么数据为TRUE时,控制那个Pin的Led灯亮。
下例中使用了函数,实际业务中可以使用设备对应的实体,数据源一般为时间序列或者属性。

数据键配置中,标签(label)设置的和前面的Pin对应,表示此值为true时,把对应Pin的Led灯点亮。

测试脚本如下:

var period = time % 1500;
return period < 500;

如果使用时间序列,需要指定使用设备发送数据中的那个Key,如数据类似:{status: 1},1表示打开的话,可以如下配置。

二、GPIO远程控制

显示画面大致如下:

1、调用过程:

  1. 当点击控制按钮时,会调用rpc远程接口,类似如下:
    官方说明:https://thingsboard.io/docs/user-guide/rpc/#server-side-rpc-api
http://127.0.0.1:8080/api/plugins/rpc/twoway/f8f18d90-11a8-11eb-be20-dba5ef0eb0f7// 数据如下:
{"method": "setGpioStatus","params": {"pin": 2,"enabled": true},"timeout": 500
}
  1. 服务器端收到请求后,会发布信息到mqtt主题。
    所以,如果设备需要接受服务器的控制,需要提前订阅此主题。

官方说明:https://thingsboard.io/docs/reference/mqtt-api/#server-side-rpc

v1/devices/me/rpc/request/+
  1. 设备端收到订阅的消息后处理,并通过mqtt返回相应消息。
v1/devices/me/rpc/response/$request_id

3、客户端代码

以下模拟设备的mqtt代码。

//Requires node.js and mqtt library installed.
var mqtt = require('mqtt');const thingsboardHost = process.argv[2];
const accessToken = process.argv[3];console.log('Connecting to: %s using access token: %s', thingsboardHost, accessToken);
var client  = mqtt.connect('mqtt://'+ thingsboardHost, { username: accessToken });
var datas = [];// 成功连接到Thingsboard server时触发
client.on('connect', function () {console.log('Client connected!');// 订阅GPIO控制client.subscribe('v1/devices/me/rpc/request/+');// 启动定时器setInterval(publishTelemetry, 1000);
});// 收到到Thingsboard server消息时触发
client.on('message', function (topic, message) {console.log('request.topic: ' + topic);console.log('request.body: ' + message.toString());// 取得请求ID和消息数据var requestId = topic.slice('v1/devices/me/rpc/request/'.length);var messageData = JSON.parse(message.toString());if (messageData.method === 'getGpioStatus') {// 如果取得GPIO状态,返回22,32为灯亮var data = {"22":true, "32":true};client.publish('v1/devices/me/rpc/response/' + requestId, JSON.stringify(data));} else if (messageData.method === 'setGpioStatus') {// 如果设置GPIO状态,返回设置的灯状态,及控制杆状态。var params = messageData.params;var data ={}; data[params.pin] = params.enabled;client.publish('v1/devices/me/attributes', JSON.stringify(data));client.publish('v1/devices/me/rpc/response/' + requestId, JSON.stringify(data));} else {  client.publish('v1/devices/me/rpc/response/' + requestId, message);}
});// 定时发送状态显示panel的Pin为7的LED属性
function publishTelemetry() {// 发送客户端属性,用于点亮和关闭Pin7的Ledvar period = Date.now() % 1500;client.publish('v1/devices/me/attributes', JSON.stringify({"7":  period < 500}));
}

3、画面效果


说明:

  1. 显示panel,7 为代码定时发送,灯亮灯灭交替变化。

  2. 控制panel,22,32,画面初始化,初始值为按钮打开。

  3. 点击控制panel的12,控制按钮变为打开,显示panle的12也同时灯亮。

Thingsboard 3.1.0 - 远程控制和GPIO状态显示相关推荐

  1. android 查看gpio状态_iTOP-iMX6开发板-GPIO读写配置文档_V1.0《2》

    本文档主要介绍 iMX6 板子 gpio 引脚读写配置.有关平台文件的设备注册的资料可以参 考"iTOP-iMX6-平台文件注册设备"文档.注册的设备名称是"gpio_c ...

  2. Linux通过GPIO状态实现按键上报(按键功能)

    GPIO是集成电路或电子电路板上未提交的数字信号引脚,用于将微控制器连接到其他电子设备的标准接口.当然,我们也可以通过几个GPIO口编写一个键盘驱动,驱动挂载后拥有按键功能.   示例驱动基于ARM6 ...

  3. 查看gpio状态_基于Arduino开发,借助blinker平台,让NodeMCU实现8路继电器APP端状态监视和控制...

    基于Arduino开发,借助blinker物联网平台,让NodeMCU实现8路继电器APP端状态监视和控制 先上开发板功能图: 本文利用了NodeMCU上的D0-D3,D5-D9,总共 8个 GPIO ...

  4. 高通平台获取和修改GPIO状态

    一.查看GPIO口状态 1.获取gpio状态,实质上就是调用show函数. 命令可以直接打印出所有的GPIO口状态 cd /sys/kernel/debug/cat gpio 打印示例: 注: 1.第 ...

  5. Linux应用层操作GPIO,查看GPIO状态

    1.操作GPIO system("echo 421 >/sys/class/gpio/export"); system("echo out >/sys/cla ...

  6. android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...

    AndroidStudio终于出3.0正式版了,内置了kotlin(虽然我安了插件一直能用).一直忍着没敢下rc版的好奇猫,总算装了正式版.当然,伴随每次大版本更新,总有一些恼人的后遗症,其中以gra ...

  7. Android4.1 如何实现状态栏上信号图标有SIM卡1,2标记,并且当处于2G状态显示“G”,处于3G状态显示“3G”

    [Android Version] 6577/6589 Android V4.1 [Description] 如何实现状态栏上信号图标有SIM卡1,2标记,并且当处于2G状态显示"G&quo ...

  8. Unity简单实现电量、充电状态显示

    简介: 很多游戏内都有显示当前网络.Ping值.电量.充电状态等需求,Unity给我们提供了丰富的API,可以简单实现这些功能. 在使用Ping类和FPSManager实现了对网络状态和fps状态的显 ...

  9. 单片机c语言怎么实现按键松开,灯还保持松开前的状态,单片机C语言程序设计:K1-K4按键状态显示...

    时间:2013-05-22 15:40:01 /*  名称:K1-K4  按键状态显示 说明:K1.K2 按下时 LED 点亮,松开时熄灭, */ K3.K4 按下并释放时 LED 点亮,再次按下并释 ...

  10. 在使用Repeater、DataList 或 DataGrid 的模板列表时,根据不同状态,显示不同颜色

    我们经常使用用于类似 Repeater.DataList 或 DataGrid 的模板列表,有时候需要根据不同状态,显示不同字帖颜色,以提示用户. 例如:在datagrid中,紧急显示红色,一般显示黑 ...

最新文章

  1. Cookie注入是怎样产生的
  2. Time zone BOGUS not found in registry
  3. 三、“涤纶纤维和棉纤维两组分纤维在涤/棉混纺织物燃烧过程中有着明显的物理相互作用和化学相互作用”,解释这两种作用。
  4. Layui--代码修饰器layui.code
  5. 管理Active Directory的工具
  6. web网页设计实例作业 ——二手书店-大学生书店(13页) 学生个人网站作业模板 简单个人网页制作
  7. 品优购项目——黑马程序员pink老师/完整源代码/项目讲解
  8. sql server 代理权限问题
  9. 数字游戏(数位dp)
  10. 【Android Gradle 插件】 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )
  11. 夏季养生:夏季养生必备五种中药材
  12. Java版数据结构之数组模拟环形队列demo
  13. git: cherry-pick
  14. 你BT我更BT!记一次入侵BT服务器
  15. addEvent()和addEventlistner()的区别
  16. 将json对象转换为数组,获取json对象的属性值
  17. 4四层电梯三菱fx2n系列plc独立程序带注释新3plc接线图io表
  18. 关系型数据库RDBMS
  19. C++练习题(附答案)
  20. TokenGazer CEO 范宏达:区块链技术助力工业供应链数字化转型

热门文章

  1. IOS 学习笔记(2) 视图UINavigationController
  2. Flutter 基础Widgets之容器Container详解
  3. virtualenv -p python3 venv报错
  4. Javascript This 机制
  5. 9-4NOIP模拟赛总结
  6. 1.Docker技术入门与实战 --- 初识Docker与容器
  7. 2.Linux/Unix 系统编程手册(上) -- 基本概念
  8. 10.数据管理(内存,文件锁)
  9. 50. 避免重定向(11)
  10. 70. 命名空间 与 自动加载