DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

在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 Node 节点服务器 – eu.thethings.network
  • 端口 – 1883
  • 用户名称 – 我在The Things Network上的应用程序ID
  • 密码 – 应用程序访问密钥

点击“更新”,您将返回到节点属性页面。

决定一下主题内容:

+/devices/+/up/temperature

'+'是通配符,这是设置主题以订阅任何上傅的设备并获取有关温度的数据。

我编辑了调试节点,输出是msg.payload,确保'调试窗口'有勾选并单击完成。

每次更改或编辑之后,需要单击Node-RED窗口右上角的“Deploy”按钮,我已经完成了该操作,稍后可以看到数据显示在调试选项卡内。


向世界宣布Pecket Well的温度


我决定将温度发送到我的电子邮件。我将电子邮件输出节点拖到工作台上,双击它并输入我的电子邮件详细信息,单击完成,然后单击“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 look after production at AB Open. In my spare time I do a bit of DJing. I like tinkering and making things.

22 Jun 2018, 7:22