DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

19 Jun 2018, 8:36

在Synology NAS上安裝Node-RED(繁體)

 

 

設置Node-RED並用Things Node從物聯網中獲取數據

 

獲得我的Things Node (135-9784) 並成功報告溫度後,我想要一種公開數據的方式。我查看了各種選擇;我已經嘗試過AllThingsTalk Maker和Cayenne,但似乎人們必須先註冊一個帳戶才能與他們共享數據。我想要比這些都要開放的東西,所以我看中了Node-RED。

 

我家裡有一台Synology Diskstation(如上圖所示,放置在櫥櫃中) - 一台運行基於Linux的操作系統DSM的NAS,我認為它應該能夠運行Node-Red,這將允許我能夠通過網站,電子郵件甚至Twitter分享數據。

 

我找到了一個討論話題能夠讓我開始這個計劃。 其中一種選擇是使用Docker進行安裝,但只能在高端Disktations上使用,而我的是比較低端的DS214。

 

使用安全外殼協議(SSH)

 

 

Node-RED取決於您的DiskStation上安裝的Node.js,您還需要確保在用戶>高級>家目錄下的控制面板中啟用了家目錄服務。我已經安裝了Node.js和啟用了家目錄服務,因此我繼續進行Node-Red安裝。

 

我需要通過SSH連接到我的NAS來安裝Node-Red。當我在Windows PC上進行安裝時,我使用了PuTTY,亦可以使用其他的SSH客戶端。我還需要在Synology DiskStation上啟用SSH - 您可以在DSM控制面板的“終端和SNMP”鏈接中找到該設置。當你在那裡設置端口號時,你的SSH客戶端需要它。

 

 

一旦我連接到DiskStation並登錄後,我可以使用https://nodered.org/docs/getting-started/installation中的命令以安裝Node-RED

 

sudo npm install -g --unsafe-perm node-red

 

一旦完成安裝,您只需鍵入'node-red'來啟動它。

 

 

自動啟動Node-RED

 

 

當您啟動時顯示在終端窗口中顯示[nas-ip-address]:1880,這是查看用戶界面的URL。現在我需要讓它在啟動時自動啟動。為此,我需要安裝pm2,Node.js的進程管理器,輸入:

 

sudo pm2 npm install -g pm2

 

作為守護進程成功地啟動了Node-RED,這意味著當我退出SSH會話時它會繼續運行。

 

我不能做的是讓pm2啟動時選項工作。這可能是由於Synology的古怪之處,或者可能是我的錯誤,但我決定使用Synology自己的Task Scheduler來迴避這個問題。我寫了一個簡單的腳本並設置了Task Scheduler在啟動時運行它。

 

#!/bin/sh
HOME=/root
source $HOME/.profile
PATH=/opt/bin:/opt/sbin:$PATH
/usr/local/bin/node-red

 

然後我想讓安裝更安全,所以我按照這裡的說明編輯了settings.js文件,該文件位於我的Synology根目錄中的.node-red文件夾中。

 

 

The Things Network節點

 

到現在為止還挺好。接下來是在Node-RED中安裝The Things Network節點。我跟從這個教學,但不斷收到錯誤訊息。我發現這是安裝了舊版本的Node.js引致的問題。我應該更仔細地閱讀Node-Red的安裝指南,並查看Synology的Node-js軟件包。它是跟Drive軟件包一起安裝的第4版(Synology自己非常棒的類“Drop-Box”應用程序)。

 

我決定最安全的是卸載Node-Red,安裝第8版本的Node.js,然後重新安裝Node-RED,默認情況下應該使用最新的Node.js版本。

 

我禁用了“啟動時啟動”任務並重新啟動NAS,然後再次使用PuTTY / SSH並使用:

 

sudo npm uninstall -g node-red

 

然後刪除Synology根目錄中的.node-red文件夾。

 

接下來我使用Synology的Package Manager安裝第8版本的Node.js,並重新安裝了Node-RED。

 

不幸的是,The Things Network節點仍然不能安裝在Node-RED中。我試著重複卸載過程並安裝第6版本的Node.js,但仍然不能運行。唯一有效的是安裝第1版的The Things Network節點。

 

npm i node-red-contrib-ttn@1.0.0

 

詳情看這裡

 

我嘗試安裝其他節點並能夠成功運行,所以我不確定是Synology和The Things Network節點的問題。

 

解決問題

 

 

我再次決定通過使用與Node-red捆綁在一起的MQTT節點來迴避這個問題。對於那些沒有使用過Node-RED的用戶,它是一種使用基於瀏覽器的編輯器將設備和服務連接在一起的工具,它允許您簡單地將想要連接的東西拖放到工作區中,並在它們之間連線。這是一個非常令人愉快的圖形界面,使用它可以相對簡單地啟動和運行。

 

 

我將一個MQTT輸入節點從左邊的“調色板”拖到工作區,然後是一個調試輸出節點,並將兩者連接在一起。現在我只需編輯MQTT節點,以便它連接到我的The Things Network節點並開始獲取數據。當我把它設置好後,我會在右側的Debug選項卡下看到它們的數據。

 

 

要連接到The Things Network,我給了服務器一個名稱 - TTN Broker - 然後點擊鉛筆圖標來編輯它的詳細信息。

 

 

我需要的信息是:

  • The Things節點服務器 - thethings.network
  • 端口 – 1883
  • 用戶名稱 - 我在The Things Network上的應用程序ID
  • 密碼 - 應用程序訪問密鑰

 

 

點擊“更新”,您將返回到節點屬性頁面。

 

決定一下主題內容:

 

+/devices/+/up/temperature

 

'+'是通配符,這是設置主題以訂閱任何上傅的設備並獲取有關溫度的數據。

 

我編輯了調試節點,輸出是msg.payload,確保'調試窗口'有勾選並單擊完成。

 

每次更改或編輯之後,需要單擊Node-RED窗口右上角的“Deploy”按鈕,我已經完成了該操作,稍後可以看到數據顯示在調試選項卡內。

 

在Pecket Well向世界宣佈溫度

 

我決定將溫度發送到我的電子郵件。我將Email Out節點拖到工作台上,雙擊它並輸入我的電子郵件詳細信息,單擊完成,然後單擊“Deploy”。這樣就我開始收到了這樣簡單的消息:

 

 

我認為可以從整理中得到一些好處。在MQTT和Email節點之間的功能節點將通過JavaScript函數傳遞消息。

 

將功能節點拖到工作區上,雙擊它進行編輯,輸入以下內容:

 

msg.payload = 'The temperature is: ' + msg.payload + 'C';

msg.topic = 'Pecket Well Temperature'
msg.to = 'dave@abopen.com'

return msg;

 

把所有東西連接起來,點擊“Deploy”,這是由此產生的電子郵件:

 

 

我也可以輕鬆地添加其他人的電子郵件地址並使用JavaScript條件語句發送消息,例如僅在寒冷或炎熱時。

 

結論

 

這並不是一個簡單的安裝過程,我試圖讓Synology Diskstation的DSM操作系統去做一些它本來沒有被設計的事情,最終我成功實現了我設定的目標。我可以與任何想要人分享我的The Things節點的溫度數據。

I am an Electronic Engineering student studying in Hong Kong University of Science and Technology. I am interested in design PCB board.

19 Jun 2018, 8:36