close
最近 PM 2.5 这个议题非常的热门,这两年也陆续有 LASS4U、空气盒子… 等类似的产品出现,也帮助民众了解空污对于我们所造成的影响。其中在台湾的LASS (Location Aware Sensing System, http://lass-net.org/) 一套开源和公益的「环境传感器网络系统」带来许多有意义的资料并帮助民众一起监控环境的空气质量;LASS4U 是本文认为在众多项目中硬件规格与完整度最高的,除了可感测 CO2、Temperature、Humidity 、PM2.5, (PM1、PM10) 外,并加入触控屏幕让用户不用开启网页或是手机 App,便可得知实时信息。

当然,在这空污这么热门的议题,NAS 当然也是不可或缺的角色!因为数据的储存也是很重要的,接下来将简单介绍,如何透过 NAS 的 Node-Red 将 LASS4U 的数据导入到 NAS 之中,并透过 NAS 强大的 IoT 系统,处理空污的数据。

首先,需要准备(如果不清楚如何安装 Node-Red or Freeboard, 可以参考先前的文章):

  1. QNAP NAS

  2. Node-Red

  3. Freeboard or Dashboard


从 LASS4U 那边,可以取得相关的 MQTT 的信息:

MQTT Host: gpssensor.ddns.net:1883
MQTT Topic: LASS/Test/LASS4U


此时就可以直接透过 Node-Red 建立一个 MQTT node, 并新增 server 和填入 LASS4U topic:

[gallery columns="1" size="full" ids="3023"]

成功建立 MQTT 联机后,接者找寻手边 LASS4U 的编号:

[gallery columns="1" size="full" ids="3024"]

目前手上的版本是 FT2_0018.

接着要开始来处理 LASS4U 的数据,下图是透过 Node-Red 新增的 function node.

[gallery columns="1" size="full" ids="3026"]

此 node 主要用来处理透过 LASS4U 的 MQTT 订阅 的数据,因为 LASS4U 是将所有装置的数据,都打向 LASS/Test/LASS4U 这个 topic,所以如果要处理多台 LASS4U 时,可以透过 function node 多输出的特性来建立各个不同的数据流。
if(msg.payload.indexOf("FT2_0118")!=-1){
return [msg, null];
}else if(msg.payload.indexOf("FT2_0004")!=-1){
return [null, msg];
}

 

2, 4 主要是分别将 FT2_0118 FT2_0004 两台装置分别导向两个不同的输出.

[gallery columns="1" size="full" ids="3027"]

透过 debug node, 可以简查一下是否有正常抓取到 LASS4U 的资料.
以下是从 LASS4U 抓取 FT2_0118 这台装置的环境数据:

|ver_format=3|FAKE_GPS=1|app=LASS4U|ver_app=beta|device_id=FT2_0118|date=2017-02-13|time=04:23:57|device=Ameba|gps_lon=24.796937|gps_lat=121.005882|s_t2=21.41|s_h2=50.61|s_d0=10.00|s_g8=664.00|s_d2=8.00|s_d1=10.00

各个字段数据定义:
date: 日期
time: 时间
gps_lon: 此装置目前设定的 GPS 位置
gps_lat: 此装置目前设定的 GPS 位置
s_t2: 目前温度
s_h2: 目前湿度
s_g8: 目前二氧化碳浓度
s_d2: 目前 PM 2.5
s_d1: 目前 PM 1.0

取得资料各个字段的定义后,接着需要再一次处理 LASS4U 的资料,并将所需要的感测数据处理后,推送到 Dashboard 并呈现相关数据。

[gallery columns="1" size="full" ids="3028"]

首先,需要透过 split node 将 LASS4U 的资料先做切割,并推送到 Process Sensor Data 进行处理;第二步,就是将处理好的数据透过输出 1~7,分别推送到 Dashboard。

一样透过 function node 来处理感测的数据:
var sensorData = msg.payload;
if(sensorData.indexOf("gps_lon")!=-1){
var sensorValue = sensorData.replace('gps_lon=', '')
msg.payload = sensorValue;

return [msg, null, null, null, null, null, null];
}else if(sensorData.indexOf("gps_lat")!=-1){
var sensorValue = sensorData.replace('gps_lat=', '')
msg.payload = sensorValue;

return [null, msg, null, null, null, null, null];
}else if(sensorData.indexOf("s_t2")!=-1){
var sensorValue = sensorData.replace('s_t2=', '')
msg.payload = sensorValue;

return [null, null, msg, null, null, null, null];
}else if(sensorData.indexOf("s_h2")!=-1){
var sensorValue = sensorData.replace('s_h2=', '')
msg.payload = sensorValue;

return [null, null, null, msg, null, null, null];
}else if(sensorData.indexOf("s_g8")!=-1){
var sensorValue = sensorData.replace('s_g8=', '')
msg.payload = sensorValue;

return [null, null, null, null, msg, null, null];
}else if(sensorData.indexOf("s_d2")!=-1){
var sensorValue = sensorData.replace('s_d2=', '')
msg.payload = sensorValue;

return [null, null, null, null, null, msg, null];
}else if(sensorData.indexOf("s_d1")!=-1){
var sensorValue = sensorData.replace('s_d1=', '')
msg.payload = sensorValue;

return [null, null, null, null, null, msg, null];
}

成功后,我们可以看到 LASS4U 的数据,呈现在 NAS 的 Dashboard 上了。1:  取得分割数据, 会依续将分割的数据分别传送进来.
2~6: 处理 gps_lon 的数据,并将 gps_lon= 的字符串去除.
6, 11, 16…: 主要是对应 function node 的各个输出位置
return [msg, null, null, null, null, null, null]; //输出 1
return [null, null, null, msg, null, null, null]; //输出 4

[gallery columns="1" size="full" ids="3029"]

后续:除了可以实时呈现 LASS4U 的数据到 NAS 外,透过 Node-Red 也可以快速的将数据处理并且传送到后端数据库和前端网页,甚至也可以将数据处理分析后,传送到云端的服务平台,让数据变的更多元化。




更多QIoT教学文 https://qiot.qnap.com/blog/tw/category/%E6%95%99%E5%AD%B8-tw/

 

 

 

 

 
arrow
arrow
    全站熱搜

    tttt 發表在 痞客邦 留言(0) 人氣()