合用Python與Node-RED實(shí)現(xiàn)IoT快速開發(fā)

起因

作為Python開發(fā)者,其實(shí)很羨慕JavaScript一種天生的開發(fā)能力:可視化編程。這不僅僅是指GUI塑顺,Web前端,還包括一些建模和原型規(guī)劃方面的能力俏险。其中包括基于Node.js的Node-RED严拒,是IoT原型開發(fā)的利器。這種設(shè)計(jì)可以追溯到Y(jié)ahoo的Pipe服務(wù)竖独。作為一種基于Web的可視化編輯器裤唠,Node-RED可以定義IoT、Web開發(fā)中所需的各類組件莹痢。

在IoT日常開發(fā)中种蘸, 經(jīng)常使用代碼來實(shí)現(xiàn)的工作,有相當(dāng)一部分設(shè)計(jì)可以用該工具完成竞膳『讲t?墒窃囉弥螅野l(fā)現(xiàn)該工具是面向流的設(shè)計(jì)工具坦辟,如果前端的接入?yún)f(xié)議需要定制刊侯,或者需要復(fù)雜的狀態(tài)機(jī),那么這種設(shè)計(jì)可能無法替代人工編碼锉走。

加上滨彻,我的JavaScript編程能力不如Python熟悉,且Node-RED的文檔挪蹭,至少教程部分并不齊全亭饵。所以我并沒有將其投入到實(shí)際的工程設(shè)計(jì)中。而且Node-RED是一個(gè)容易被遺忘的工具梁厉,一旦設(shè)計(jì)完成后辜羊,基本上也不會(huì)老是去修改。

Python與Node-RED

Node-RED與其他IoT所需組件的配合可以加快系統(tǒng)的開發(fā)速度:

  1. 消息隊(duì)列,包括MQ和MQTT八秃,甚至Redis中的PubSub都可以作為Node-RED與其他服務(wù)進(jìn)程之間的耦合組件碱妆;
  2. 數(shù)據(jù)庫(kù),除了SQL RDBS喜德,還有Redis/MongoDB和InfluxDB等山橄;
  3. 云計(jì)算API,各類云計(jì)算都是通過API整合的舍悯,那么HTTP request就可以幫上忙了航棱。
  4. 操作系統(tǒng),包括調(diào)用操作系統(tǒng)的crontab和服務(wù)進(jìn)程萌衬、腳本饮醇、文件系統(tǒng)、串口和服務(wù)等秕豫。

相對(duì)多數(shù)的IoT設(shè)計(jì)中朴艰,二進(jìn)制協(xié)議是占據(jù)主體的。包括CoAP/MQTT都是如此混移。雖然ECMAScript 2015規(guī)定了JavaScript處理二進(jìn)制的對(duì)象和方法祠墅,但大多數(shù)早期設(shè)計(jì)中JavaScript處理二進(jìn)制數(shù)據(jù)比較麻煩。這些定制協(xié)議的數(shù)據(jù)處理和狀態(tài)機(jī)歌径,可以使用Python來做處理毁嗦,并轉(zhuǎn)換成JSON推送給Node-RED,更加方便使用回铛。

Node.js早期的版本依賴項(xiàng)中甚至包含Python狗准。所以Node.js其實(shí)和Python有一定相關(guān)性。這兩種是可以互相依賴的茵肃。所以我在Nodest-RED里找到了一個(gè)很重要的Node:Python function腔长。開發(fā)者可以用Node-RED設(shè)計(jì)合適的流,并使用Python Function Node來實(shí)現(xiàn)其中對(duì)于流的解析验残、轉(zhuǎn)發(fā)和處理捞附。

Node-RED的角色定位

原理上說,即使是類似于Xively的IoT設(shè)備云胚膊,也需要切割為:

  1. Connector故俐,各類協(xié)議的轉(zhuǎn)換和狀態(tài)機(jī),以及認(rèn)證等紊婉;
  2. Web,管理界面辑舷,RBAC喻犁,API管理等;
  3. Data,包括緩存和持久保存等肢础。

Node-RED可以作為三者間的連接設(shè)計(jì)器还栓,也可以用過HTTP endpoint來充任部分的Web功能,不過我覺得在復(fù)雜系統(tǒng)中传轰,在版本控制系統(tǒng)的協(xié)助下剩盒,用代碼實(shí)現(xiàn)更加合理。用鼠標(biāo)來產(chǎn)生三位數(shù)的URL慨蛙,管理起來很有難度辽聊。或者至少需要另外的工具來一口氣產(chǎn)生100多個(gè)endpoint nodes期贫。但是查看起來跟匆,需要很大的顯示器可視面積。

Node-RED感覺像是一個(gè)任何工作都可以實(shí)現(xiàn)的復(fù)合工具通砍,但是它也不是萬能的玛臂,在某些方面效率設(shè)置不如人工編碼。

典型的IoT接入云平臺(tái)需要包括:

  1. MQTT over TLS封孙,可以使用mosquitto和許多MQ實(shí)現(xiàn)迹冤;
  2. CoAP over D-TLS,可以使用Python Twisted/Tornado實(shí)現(xiàn)虎忌;
  3. HTTP over TLS, 即HTTPS泡徙,標(biāo)準(zhǔn)化實(shí)現(xiàn);
  4. WebSocket呐籽,標(biāo)準(zhǔn)化實(shí)現(xiàn)锋勺;
  5. 定制二進(jìn)制協(xié)議,傾向于Twisted實(shí)現(xiàn)狡蝶。

所以庶橱,Node-RED可以用于1/3/4三種協(xié)議實(shí)現(xiàn),其他的可以交由Twisted/Tornado實(shí)現(xiàn)贪惹。

功能重合的選擇

雖然苏章,使用Twisted/Tornado可以實(shí)現(xiàn)大多數(shù)的協(xié)議,但是我個(gè)人越來越傾向于將應(yīng)用層協(xié)議從Twisted Connector中剝離出來奏瞬,所以Twisted雖然從Connector中可以直接訪問各類數(shù)據(jù)庫(kù)枫绅,但是數(shù)據(jù)庫(kù)視圖本質(zhì)上是設(shè)備建模,直接的后果就是一旦協(xié)議或者設(shè)備建模任何一方發(fā)生變化硼端,都不得不重新啟動(dòng)并淋,且有版本失控的風(fēng)險(xiǎn)。

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

所以珍昨,我現(xiàn)在的方式是將Twisted Connector獨(dú)立運(yùn)行县耽,將與設(shè)備連接有關(guān)的部分保留在Connector句喷,數(shù)據(jù)在Connector中變化為JSON對(duì)象,通過mosquitoo推送兔毙。Node-RED處理后唾琼,保存在數(shù)據(jù)庫(kù)中。這樣處理的好處澎剥,還有一個(gè)就是可以通過mosquitoo直接通過Web API推送給API的利用者锡溯,比如第三方網(wǎng)站和移動(dòng)應(yīng)用。

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

此圖中看不出Node-RED的位置哑姚,但實(shí)際上祭饭,mosquitto --> DB以及mosquitto-->WebAPI可以用來實(shí)現(xiàn)粘合。當(dāng)然蜻懦,Python/Node.js里本來就可以用來實(shí)現(xiàn)MQTT client甜癞。

價(jià)值所在

利用PubSub/MQ/API是實(shí)現(xiàn)許多微服務(wù)的基礎(chǔ),那么Node-RED就是這種微服務(wù)的縫紉針和膠水宛乃。在此基礎(chǔ)上悠咱,利用Python/Node.js開發(fā)一些基于Web和MQ的標(biāo)準(zhǔn)化API,即使單個(gè)API功能簡(jiǎn)單征炼,但是通過Node-RED整合析既,就足夠支撐一些復(fù)雜系統(tǒng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谆奥,一起剝皮案震驚了整個(gè)濱河市眼坏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酸些,老刑警劉巖宰译,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異魄懂,居然都是意外死亡沿侈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門市栗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缀拭,“玉大人,你說我怎么就攤上這事填帽≈肓埽” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵篡腌,是天一觀的道長(zhǎng)褐荷。 經(jīng)常有香客問我,道長(zhǎng)嘹悼,這世上最難降的妖魔是什么诚卸? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任葵第,我火速辦了婚禮绘迁,結(jié)果婚禮上合溺,老公的妹妹穿的比我還像新娘。我一直安慰自己缀台,他們只是感情好棠赛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膛腐,像睡著了一般睛约。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哲身,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天辩涝,我揣著相機(jī)與錄音,去河邊找鬼勘天。 笑死怔揩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脯丝。 我是一名探鬼主播商膊,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宠进!你這毒婦竟也來了晕拆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤材蹬,失蹤者是張志新(化名)和其女友劉穎实幕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堤器,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昆庇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吼旧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凰锡。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圈暗,靈堂內(nèi)的尸體忽然破棺而出掂为,到底是詐尸還是另有隱情,我是刑警寧澤员串,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布勇哗,位于F島的核電站,受9級(jí)特大地震影響寸齐,放射性物質(zhì)發(fā)生泄漏欲诺。R本人自食惡果不足惜抄谐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扰法。 院中可真熱鬧蛹含,春花似錦、人聲如沸塞颁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祠锣。三九已至酷窥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伴网,已是汗流浹背蓬推。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澡腾,地道東北人沸伏。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛋铆,于是被迫代替她去往敵國(guó)和親馋评。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,444評(píng)論 6 428
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富刺啦,涉及面非常廣留特。awesome-p...
    若與閱讀 18,615評(píng)論 4 418
  • 一、異同對(duì)比選擇1玛瘸、Python和ruby的相同點(diǎn): * 都強(qiáng)調(diào)語法簡(jiǎn)單蜕青,都具有更一般的表達(dá)方式。python是縮...
    沃倫蓋茨閱讀 4,134評(píng)論 2 24
  • 環(huán)境管理管理Python版本和環(huán)境的工具糊渊。p–非常簡(jiǎn)單的交互式python版本管理工具右核。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,783評(píng)論 1 61
  • 今夜的風(fēng)輕輕的 好像從沒有來過 故事經(jīng)過窗前 留下深深的印記 黑還是在夜里暈染 遮住了眺望的眼睛 遠(yuǎn)方的天空那么深...
    云中飄舞閱讀 302評(píng)論 13 14