合用Python与Node-RED实现IoT快速开发

起因

作为Python开发者,其实很羡慕JavaScript一种天生的开发能力:可视化编程。这不仅仅是指GUI,Web前端,还包括一些建模和原型规划方面的能力。其中包括基于Node.js的Node-RED,是IoT原型开发的利器。这种设计可以追溯到Yahoo的Pipe服务。作为一种基于Web的可视化编辑器,Node-RED可以定义IoT、Web开发中所需的各类组件。

在IoT日常开发中, 经常使用代码来实现的工作,有相当一部分设计可以用该工具完成。可是试用之后,我发现该工具是面向流的设计工具,如果前端的接入协议需要定制,或者需要复杂的状态机,那么这种设计可能无法替代人工编码。

加上,我的JavaScript编程能力不如Python熟悉,且Node-RED的文档,至少教程部分并不齐全。所以我并没有将其投入到实际的工程设计中。而且Node-RED是一个容易被遗忘的工具,一旦设计完成后,基本上也不会老是去修改。

Python与Node-RED

Node-RED与其他IoT所需组件的配合可以加快系统的开发速度:

  1. 消息队列,包括MQ和MQTT,甚至Redis中的PubSub都可以作为Node-RED与其他服务进程之间的耦合组件;
  2. 数据库,除了SQL RDBS,还有Redis/MongoDB和InfluxDB等;
  3. 云计算API,各类云计算都是通过API整合的,那么HTTP request就可以帮上忙了。
  4. 操作系统,包括调用操作系统的crontab和服务进程、脚本、文件系统、串口和服务等。

相对多数的IoT设计中,二进制协议是占据主体的。包括CoAP/MQTT都是如此。虽然ECMAScript 2015规定了JavaScript处理二进制的对象和方法,但大多数早期设计中JavaScript处理二进制数据比较麻烦。这些定制协议的数据处理和状态机,可以使用Python来做处理,并转换成JSON推送给Node-RED,更加方便使用。

Node.js早期的版本依赖项中甚至包含Python。所以Node.js其实和Python有一定相关性。这两种是可以互相依赖的。所以我在Nodest-RED里找到了一个很重要的Node:Python function。开发者可以用Node-RED设计合适的流,并使用Python Function Node来实现其中对于流的解析、转发和处理。

Node-RED的角色定位

原理上说,即使是类似于Xively的IoT设备云,也需要切割为:

  1. Connector,各类协议的转换和状态机,以及认证等;
  2. Web,管理界面,RBAC,API管理等;
  3. Data,包括缓存和持久保存等。

Node-RED可以作为三者间的连接设计器,也可以用过HTTP endpoint来充任部分的Web功能,不过我觉得在复杂系统中,在版本控制系统的协助下,用代码实现更加合理。用鼠标来产生三位数的URL,管理起来很有难度。或者至少需要另外的工具来一口气产生100多个endpoint nodes。但是查看起来,需要很大的显示器可视面积。

Node-RED感觉像是一个任何工作都可以实现的复合工具,但是它也不是万能的,在某些方面效率设置不如人工编码。

典型的IoT接入云平台需要包括:

  1. MQTT over TLS,可以使用mosquitto和许多MQ实现;
  2. CoAP over D-TLS,可以使用Python Twisted/Tornado实现;
  3. HTTP over TLS, 即HTTPS,标准化实现;
  4. WebSocket,标准化实现;
  5. 定制二进制协议,倾向于Twisted实现。

所以,Node-RED可以用于1/3/4三种协议实现,其他的可以交由Twisted/Tornado实现。

功能重合的选择

虽然,使用Twisted/Tornado可以实现大多数的协议,但是我个人越来越倾向于将应用层协议从Twisted Connector中剥离出来,所以Twisted虽然从Connector中可以直接访问各类数据库,但是数据库视图本质上是设备建模,直接的后果就是一旦协议或者设备建模任何一方发生变化,都不得不重新启动,且有版本失控的风险。

Client --> Twisted_Connector --> RBDS/TSDB --> WebAPI --> MobileAPP 

所以,我现在的方式是将Twisted Connector独立运行,将与设备连接有关的部分保留在Connector,数据在Connector中变化为JSON对象,通过mosquitoo推送。Node-RED处理后,保存在数据库中。这样处理的好处,还有一个就是可以通过mosquitoo直接通过Web API推送给API的利用者,比如第三方网站和移动应用。

Client --> Twisted_Connector --> mosquitoo --> RBDS/TSDB --> DataAnalyst
                                     |                          
                                     +--> WebAPI --> MobileAPP 

此图中看不出Node-RED的位置,但实际上,mosquitto --> DB以及mosquitto-->WebAPI可以用来实现粘合。当然,Python/Node.js里本来就可以用来实现MQTT client。

价值所在

利用PubSub/MQ/API是实现许多微服务的基础,那么Node-RED就是这种微服务的缝纫针和胶水。在此基础上,利用Python/Node.js开发一些基于Web和MQ的标准化API,即使单个API功能简单,但是通过Node-RED整合,就足够支撑一些复杂系统。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,273评论 6 428
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,499评论 4 418
  • 一、异同对比选择1、Python和ruby的相同点: * 都强调语法简单,都具有更一般的表达方式。python是缩...
    沃伦盖茨阅读 4,094评论 2 24
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,745评论 1 61
  • 今夜的风轻轻的 好像从没有来过 故事经过窗前 留下深深的印记 黑还是在夜里晕染 遮住了眺望的眼睛 远方的天空那么深...
    云中飘舞阅读 293评论 13 14