QNAP

Domoticz + NAS

最近在找尋一套完整度較高的 IoT Service, 功能需要有:
1. Dashboard
2. 簡易的控制畫面
3. 歷史紀錄(天, 月, 年)
4. 可以整合 MQTT
5. Open Source
6. 在 NAS 上直接使用
7. 重要的是直接使用 docker 安裝,然後無痛直接使用它.

之前認為, Node-Red + 內建的 dashboard 功能已經夠完整, 可惜的是 Node-Red 內建的 dashboard 太吃資源, 一旦開啟歷史紀錄, 等於根本無法使用…XD

Freeboard 雖然簡單方便, 直接可以整合 Node-Red, 但多樣性不夠.

Domoticz 算是最近找到, 符合以上需求的 IoT Service.

Domoticz 相關 resources:
http://domoticz.com/wiki/Domoticz_Wiki_Manual
Docker: https://hub.docker.com/r/sdesbure/domoticz/

接下來開始來設定 Domoticz service

啟用 Domoticz service:

如果想要把資料存放在特定位置, 記得指向到該存放的位置:
-v /share/XXXXXX/domoticz:/config

成功啟動後, 可以透過網頁存取, http://your-ip:8181. 畫面是目前已經有設定好的感測器資料. 目前感測器的資料都是透過 MQTT + Virtual Sensor 來達成.

Domoticz 目前支援的裝置種類非常的多樣, 除了可以透過外接 USB 裝置的方式, 將 ZigBee, Z-wave, Wifi, BLE…, 透過各種不同的通訊方式將資料傳進 Domoticz 並管理.

整合 MQTT 是我會使用 Domoticz 真正的原因, 這樣一來我原先透過 MQTT 交換的感測裝置, 就可以透過 Node-Red 的方式重新導向到 Domoticz, 不用太多複雜的設定就可以完成, 資料處理部份可以使用 Node-Red 把所需要的資料分析整合起來.

目前整合的感測器有:

  1. 氣象站 (如何建立 Virtual Weather Device)
  2. 魚缸溫度, PH, EC, TDS
  3. 室內環境

接下來將透過 Domoticz 來建立 MQTT Hardware (Setup -> Hardware -> 選擇 type, 並找到 “MQTT Client Gateway with LAN interface” -> 設定相關資訊)

再安裝, Type: Dummy (Does nothing, use for virtual switches only), 用來建立虛擬裝置.

透過剛剛建立的 Dummy hardware 可以按下 “Create Virtual Sensors” 建立所需要的虛擬裝置,並與 MQTT Topic 整合起來.

建立成功的 Virtual Sensors, 可以從 device list 中找到. 記下欄位中的 Idx.

接下來要透過 Node-Red 把相關的資料透過 MQTT 傳至 Domoticz, Domoticz 將收到的 MQTT 資料透過 Idx 分別紀錄到對應的 device.

透過 Node-Red 將 Particle Cloud PH sensor device 資料透過 API 取得感測器資料, 再傳送到 topic: domoticz/in, 這個 topic 是給 Domoticz 使用, Domoticz 會監聽此 topic 一旦收到相對應的 JSON format 就會進行處理, 再分類給相關的 device.

傳送的 JSON format:

idx: 剛剛建立的 VS 裝置
nvalue: 0
svalue: PH sensor value

Domoticz 支援的裝置很多, 如果需要更多裝置的 JSON format, 可以參考官方的 Domoticz API/JSON URL’s wiki 網站.

Domoticz 的應用真的很多元, 蠻多功能都還在摸索, 有機會再分享了.

LASS4NAS

最近 PM 2.5 這個議題非常的熱門,這兩年也路續有 LASS4U, 空氣盒子… 等類似的產品出現,也幫助民眾瞭解空汙對於我們所造成的影響。

當然,在這空污這麼熱門的議題,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:

MQTT_LASS4U

成功建立 MQTT 連線後,接者找尋手邊 LASS4U 的編號:

LASS4U_No

目前手上的版本是 FT2_0018.

接著要開始來處理 LASS4U 的資料,下圖是透過 Node-Red 新增的 function node.

Screen Shot 2017-02-13 at 12.12.57 PM

此 node 主要用來處理透過 LASS4U 的 MQTT 訂閱 的資料,因為 LASS4U 是將所有裝置的資料,都打向 LASS/Test/LASS4U 這個 topic,所以如果要處理多台 LASS4U 時,可以透過 function node 多輸出的特性來建立各個不同的資料流。

2, 4 主要是分別將 FT2_0118 和 FT2_0004 兩台裝置分別導向兩個不同的輸出.

LASS4U_Node

透過 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 並呈現相關資料。

首先,需要透過 split node 將 LASS4U 的資料先做切割,並推送到 Process Sensor Data 進行處理;第二步,就是將處理好的資料透過輸出 1~7,分別推送到 Dashboard。

LASS4U_Sensor

一樣透過 function node 來處理感測的資料:

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

成功後,我們可以看到 LASS4U 的資料,呈現在 NAS 的 Dashboard 上了。

LASS4U_Dashboard

後續:除了可以即時呈現 LASS4U 的資料到 NAS 外,透過 Node-Red 也可以快速的將資料處理並且傳送到後端資料庫和前端網頁,甚至也可以將資料處理分析後,傳送到雲端的服務平台,讓資料變的更多元化。

 

Android Things + NAS

Android 最近也在 IoT 正火熱的時候,推出了 Android Things 的 preview 版本.

Android Things 基本上跟寫 mobile app 是差不多的,而且多了 Things Support Library 提供給開發者使用,非常的便利.

出自 https://developer.android.com/things/sdk/index.html

在第一次時間,也快速的測試 Android Things 是否可以連上 NAS,並透過 Node-Red + Dashboard 的方式,快速呈現 NAS IoT 的應用.

目前 Android Things 的 preview 版本,只有支援 3 種 IoT 開發裝置:

  • Intel Edison
  • NXP Pico i.MX6UL (台灣似乎不太好買到這一塊開發板)
  • Raspberry Pi 3

其它的開發裝置,未來應該會加入更多的選擇。

下面將開始介紹,如何使用 Android Things + NAS 的組合.

開始前,我們需要準備一些硬體工具:

  1. Raspberry Pi 3 + SD Card
  2. LED
  3. 電阻
  4. 開關
  5. 麵包板 + 跳線
  6. NAS 一台

軟體工具:

  1. Android Studio ( 需要使用 2.2 以上版本)
  2. Android adb debug tool
  3. Button and LED sample for Android Things

工具都準備完成後,可以先參考此連結,安裝 Android Things 到 Raspberry Pi 3上.

關於 Android Things image,這部份跟 Raspberry Pi 提供的 image 設定方式都一樣,只是跑在上面的作業系統不同.

完成後,將 Raspberry Pi 3 上電,過一會可以透過 adb 工具進行測試.

透過下面指令連到 Android Things, 成功連線會看到 connected to xxx 的訊息

$ adb connect "ip-address"
connected to xxxxx:5555

成功連線後,接下來就是開始來寫 Android Things 的 code.

將剛剛的範例先下載下來,並透過 Android Studio 進行編譯.

如果剛剛有透過 adb connect 連線成功,可以透過 Android Studio 直接編譯好的程式推送到 Android Things 上.

screen-shot-2016-12-30-at-5-37-49-pm

成功推送後,可以在 debug 的訊息欄裡面看到程式啟動成功的訊息.

12-30 10:01:48.665 20111-20111/com.example.androidthings.button I/ButtonActivity: Starting ButtonActivity
12-30 10:01:48.683 20111-20111/com.example.androidthings.button I/ButtonActivity: Configuring GPIO pins
12-30 10:01:48.690 20111-20111/com.example.androidthings.button I/ButtonActivity: Registering button driver

接著,我們要把剛剛準備好的 LED、電阻與 Button 接上,請參考下圖.

rpi3_schematics

來源: https://github.com/androidthings/sample-button

完成後,開啟 Android Things,再執行剛剛的程式,就可以直接透過按鈕控制 LED 的開關,按壓住按鈕 LED 燈會恆量,放開則熄滅. (臨時找不到按鈕開關,用觸摸式感測器代替)

2016-12-30-18-09-26

寫到這邊,先來講解一下 Things Support Library 多了些什麼!

從 gradle config 中可以發現,多了兩個 library.

第一行,主要用來處理按鈕事件的處理,主要是針對使用 GPIO 的按鈕進行處理.

第二行,是 Things Support Library, 主要是 Android Things 相關 dependency library.

Note: 目前 Android Things 提供用來處理硬體相關的 driver, 可以從 Android Things 的 GitHub 裡找到目前支援的類型有哪些(目前支援 12 種).

以下是使用 Things Support Library 來控制接上 GPIO 的按鈕.

1: PeripheralManagerService 是用來管理開發板上的硬體服務
4: 設定 LED GPIO pin, 目前是透過 BoardDefaults 取得使用 BCM6 的腳位(參考相關 pin out)
5: 設定 pin out 為低電位
10: 使用 driver-button library 來控制按鈕的狀態,使用 BCM21 作為輸入,並且預設當按下按鈕為高電位(PRESSED_WHEN_HIGH)
14: 註冊按鈕, 並且使用 KeyEvent 的方式處理按壓事件.

成功註冊按鈕後,可以透過 onKeyDown 和 onKeyUp callback 來處理按鈕的事件.

2, 14: 當按下或放開按鈕時的 callback.
30: 主要是用來處理當按鈕按下後,設定 LED 為高電位或低電位.

以上是如何透過按鈕來控制 LED 的亮滅,那我們要如何將 LED 的狀態傳回到 NAS 並將 LED 狀態進行回傳呢?其實很簡單,我們可以實作 MQTT 在 Android Things上,並將 LED 狀態回傳.

首先,先將 MQTT library 加入到 gradle config.

以下是如何實作 MQTT publish 和 subscribe,並將資料回傳到 MQTT Server

1, 19, 24, 29: 實作 MqttCallback
8: 資料暫存到 memory, 如果不使用此方式,會有錯誤訊息.
9: 連線資訊, 包含 MQTT server 位置, clientId
11: 套用 MqttCallback
12: subscribe PiLEDStatus
19: 連線失敗 callback
24: 收到 PiLEDStatus 的訊息

修改剛剛的 setLedValue, 並加上 MQTT 訊息的推送.

8 – 13: 建立 MQTT message 容器
15: publish PiLEDStatus 並將訊息送到 MQTT Server

完成 MQTT 的實作後,再一次編譯程式,並推送至 Android Things.

接下來,開啟 NAS 的 Node-Red,建立一個 MQTT Node, 並 subscribe PiLEDStatus, 把輸出指向 Node-Red Dashboard.

screen-shot-2016-12-31-at-12-07-22-am

完成 Node-Red 的佈署後,可以即時的觀察每次按壓按鈕的狀態.

2016-12-30-18-19-37

Android Things 目前雖然還是 preview 的版本,但依照目前的 support library 完整性還蠻高的,而且 image 的大小也壓縮在 200MB 上下,看來算是輕量化的 Android Things,希望未來正式的版本推出後,支援的功能可以更多.

 

NAS 氣象站

2016-08-14-15-08-30

有想過把自己 NAS 變成氣象站嗎?

其實很容易,你只需要透過 NAS 本身內建的 Docker (or Container Station),就可以達成自己在家架設一台專業的氣象站。

首先,需要準備:

  1. Weather Station WH2080 + 顯示面板 + USB
  2. NAS (需要支援 docker)
  3. Weather Station image for docker
  4. MQTT Server

如下圖,將 WH2080 的顯示面板透過 USB 插入到 NAS 上,透過 NAS 將氣象站資訊推送到 MQTT,最後透過 Node-Red 處理相關的資料後,就可以呈現氣象站的資料; 如果要儲存到資料庫或是雲端服務,再透過 Node-Red 處理資料並上傳或儲存到雲端或資料庫裡。

qnap_weather_station

 

將氣象站顯示面板連結到 NAS 後,直接建立新的 docker image,記得把 “your-mqtt-server” 換成自己架設好的 MQTT Server 喔!

# docker run -t -i --cap-add=SYS_ADMIN --privileged --security-opt seccomp:unconfined -v /dev/bus/usb:/dev/bus/usb jarvischung/weather-station node /root/weather.js your-mqtt-server

此 docker image 基本上已經自動設置好 USB 與 氣象站的資訊,每分鐘會透過USB的方式,將氣象站資料取得,並註冊 “jarvis-weather-station” 到發送到 MQTT Server,接下來可以透過 Node-Red MQTT node 註冊 “jarvis-weather-station” 後,就可以取得氣象站資料。

目前氣象站的 JSON 格式:

{
'rf.delay': 27,
'rf.hum_in': 43,
'rf.temp_in': 28.1,
'rf.hum_out': 51,
'rf.temp_out': 24.1,
'rf.abs_pressure': 1017.5,
'rf.wind_ave': 0,
'rf.wind_gust': 0,
'rf.wind_dir': 2880,
'rf.rain': 1687.2,
'rf.status': {
b1: false,
b2: false,
b3: false,
b4: false,
b5: false,
lost_sensor_contact: false,
rain_overflow: false,
b8: false
}
}

下圖是 Node-Red 目前處理的方式,處理的流程為:

MQTT –> Parsing JSON –> Node-Red Dashboard

screen_shot_2016-11-09_at_2_14_30_pm

如需要上面Node-Red Flow的檔案,可以直接在此下載(不含MQTT Server及DB的相關Flow)。

Node-Red Dashboard 呈現的畫面(當資料密度太細時,不太建議用 Node-Red Dashboard,會處理的非常緩慢)

pasted_image_09_11_2016__2_29_pm

 

有沒有覺得將氣象站連接 NAS 很簡單呢?!

之後會再介紹如何將資訊站的資料上傳到 WU Weather,為 open data 盡一點心力!

下圖是我目前將氣象站的資料分享到 WU Weather 上,名稱是 IMIAOLI3

pasted_image_09_11_2016__2_47_pm

當NAS遇見IoT – LightBlue Bean/Bean+

2016-11-02-11-24-14

今天要來介紹 Punch Through 所推出的 LightBlue Bluetooth BLE 方案的 start kit,目前推出的兩種裝置,都是透過 BLE 方式進行連結。

beanfamily-white-backg-border

出處:Punch Through

Bean 和 Bean+ (土豆和土豆進化版?)都是透過募資平台,然後經過一連串的研發、製作、測試,最後量產的產品,基本上去年年底下單到出貨,大概也歷經半年之久。

LightBlue Bean+

LightBlue Bean+

Bean 與 Bean+ 最大的差別,應該就是支持的 I/O 以及加入了 Grove 接口,並且從原本 Bean 使用的不能充電的鈕扣電池,改為可充電式鋰電池。另外最大的差別,我想就是 Bean 之前並沒有提供快速接口,甚至要使用還必需先準備烙鐵,把需要用的節點先焊上才可以使用。

出處:https://socialwearablesciid2015.wordpress.com/

出處:https://socialwearablesciid2015.wordpress.com/

軟體方面,Bean 系列都可以透過任何平台來進行開發,甚至還可以透過手機進行程式的修改,可以說非常的方便使用。至於 Bluetooth 最重要的 profile 竟然還支援多種類型,包含:

  • iBeacon: 支援 Apple 的 iBeacon
  • MIDI: 可將 MIDI 訊號導入至 Bean
  • HID: 可透過無線鍵盤、滑鼠,甚至還可以透過支援 HID 的藍芽遊戲手把來進行控制
  • ANCS: 可以接收 iOS 的訊息,類似 iWatch 的方式
  • OBSERVER: 用來傳送訊息到各種不同的裝置
出處:Punch Through

出處:Punch Through

讓我們開始整合 Bean/Bean+ 到 NAS 吧!

在開始與 Bean/Bean+ 進行連線之前,需要先準備 BLE USB 裝置,在這邊我使用的是 SENSE 推出的  BLE 裝置,記得一定要有支援 BLE (Bluetooth LE) 功能的喔!

USB BLE + NAS

USB BLE + NAS

如果要確定是否有安裝成功,可以透過 SSH 進到 NAS,利用 lsusb 將目前的 USB 裝置列出,目前我使用的是 “Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)”

 [~] # lsusb
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 003 Device 004: ID 1005:b155 Apacer Technology, Inc.
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

確認 USB 正確安裝成功後,接著安裝 Bean + Node-Red 的 docker image,此連結的 image 主要是已經將所需要的 Bean SDK 和 Node-Red 怖署完成的版本(連結包含相關教學)。

在這邊需要特別注意的是,無法直接透過 Container Station 的管理頁面進行 image 的佈署,要直接透過下面的指令去產生 image,最主要是要將 USB 相關裝置的資訊 pass-through 到 image 裡使用。

 [~] # docker run -t -i --name qbean_test --cap-add=SYS_ADMIN --privileged --net=host -v /dev/bus/usb:/dev/bus/usb -v /run/dbus:/run/dbus -v /var/run/dbus:/var/run/dbus jarvischung/qbean bash

建立完成後的 image,可以透過 http://your-nas-ip:1880 開啟 Node-Red,並且可以看到已經預設安裝好的 LightBlue Bean Node-Red 模組。從下面的 node 模組可以發現,Bean/Bean+ 預設是支援溫度、三軸以及 RGB LED 感測器的功能,下面會一一介紹。

安裝好的LightBlue Bean模組

安裝好的LightBlue Bean模組

除了已經安裝好的相關模組外,為了快速取得目前手上的 Bean/Bean+ 裝置相關的 UUID,可以透過 http://your-nas-ip:1880/bleScan/ 已經透過 Node-Red 建立好的 BLE Scan API 取得現有的裝置資訊。

預設產生好的 BLE Scan API

預設產生好的 BLE Scan API

呼叫此 API 後,需要等待約 30s 的時間,如果 USB BLE 與 Bean/Bean+ 有正確開啟,基本上會取得 Bean/Bean+ 相關裝置的資訊(此 API 並不會列出非 Bean/Bean+ 裝置)。

透過 Node-Red 產生 BLE Scan API

透過 Node-Red 產生 BLE Scan API

取得 Bean/Bean+ 裝置的 UUID 後,我們要開始來設定 Bean node。下圖是新增 Bean node 的頁面,UUID 部份就是剛剛透過 BLE API 取得的資訊; Connection部份有兩種模式:

  • “connection on event”: 代表當有事件時,才會進行 Bean/Bean+ 的連線(使用此方式,還需要設定 Timeout 的時間,也就是 event 結束後,多久的時間會自動斷線)。
  • “constantly connected”: 一旦 deploy 後,Bean/Bean+ 會直接連線,不會斷開。
新增 Bean config

新增 Bean config

為什麼要分兩種連線方式呢?

主要是 BLE 雖然省電,畢竟並不是每一種狀況都需要讓 startkit 都在工作模式下,透過此方式也可以讓 Bean/Bean+ 更省電喔!

下圖是直接使用 Node-Red 拉好的 flow,可以快速的取得 Bean/Bean+ 裝置內建的溫度感測器資訊。

透過 Node-Red 取得 Bean/Bean+ 溫度資訊

透過 Node-Red 取得 Bean/Bean+ 溫度資訊

換試另一個三軸感測器的 node,可以馬上取得資訊。

透過 Node-Red 取得 Bean/Bean+ 三軸感測器資訊

透過 Node-Red 取得 Bean/Bean+ 三軸感測器資訊

如果想要改變 Bean/Bean+ 裝置上 RGB LED 的顏色,直接將 inject node 改送 red string 即可以改變狀置的 RGB LED 顏色。支援的格式有:

  • 格式 1: 送進 node 的字串可以有 “Red”, “Green”, “Blue” 以及 “Off”
  • 格式 2: 送進 node 的字串可以是 RGB 數值的組合,例如:0,255,255 或是255,0,255
改變 Bean+ 的 RGB LED

改變 Bean+ 的 RGB LED

是不是覺得 NAS 整合 start kit 很方便啊!未來會分享更多 Bean/Bean+ 相關裝置的應用,像是:

  • 如何透過手機簡單的使用 Bean/Bean+
  • 如何自訂 scratch,更方便的取得其它感測器的資訊

當NAS遇見IoT – Particle Photon

2016-10-20-09-50-11

Particle公司擁有完善的開源物聯網硬體及平台,從2013年開始,就首先推出了基於TI CC3000的CORTEX M3的物聯網開發板。

目前推出的系列有:

  • Particle Core
  • Particle Photon
  • Particle Electron

其中,Particle Electron是基於3G連網為主的開發板,Core 和 Photon 都是使用wifi做為連結的方式。

Particle不管是韌體、軟體甚至硬體部份,目前都是開源的,開發者可以自行下載並客製屬於自己的物聯網硬體及平台:

首先,要讓Photon與QNAP NAS整合,需要先安裝相關的服務:

Step 1: 安裝 Container Station

Step 2: 透過 Container Station 安裝 Node-Red (原生的 Node-Red 預設並不支援 Particle 模組,需要請安裝此版本)

Step 3: 安裝完成後,可直接開啟 Node-Red 管理頁面,如下圖所示 (http://your-nas-ip:1880, 預設port為1880)

screen-shot-2016-10-20-at-10-53-45-am

Step 4: 成功開啟 Node-Red 後,可以找到 Particle 相關的 node 模組。目前支援三種類別,event, function 和 variable

screen-shot-2016-10-20-at-10-55-25-am

Step 5: 接下來,開始設置 Particle Photon之前,需要安裝相關的設定環境 (透過command line進行flash,可參考此方式)。

# how to install the particle-cli
$ npm install -g particle-cli
$ particle login

Step 6: 更新 Photon (注意:需要進入DFU mode)

如何進入DFU mode

  1. 從裝置上找到兩個按鈕,並同時按下 RESET 和  SETUP 按鈕
  2. 先放開 RESET 按鈕,並持續按壓住 SETUP
  3. 當燈號變為閃爍”黃燈“時,代表裝置已進入 DFU mode
$ particle update

particle update info

更新成功後,可以透過下面指令查詢目前版本

$ particle identify
Your device id is 2xx02b000xxxxxxxxx30xx3x
Your system firmware version is 0.5.2

Step 7: 第一次拿 Photon 需要先設定 wifi,並且連到 Particle Cloud (如果需要直接透過手機連結 Photon,可以參考此方式)。

連結 USB 啟動 Photon,第一次使用會持續閃爍”藍燈

$ particle setup

登入 Particle Cloud → 設定無線網路 → 命名你的 Photon → 成功設定好 Photon
一旦無線網路設定完成,可以發現從原本的閃爍的藍燈,會轉變成呼吸燈,代表已經成功連上 Particle Cloud.

particle setup

Step 8: 列出目前的 Particle 裝置,下面圖示可以看到剛剛設定完成的 Jarvis-NAS-Photon,後面的2d0xxxxxxxxxxx037是裝置id,可以先紀錄下來,等會會使用到。

$ particle list

particle list

設定好 Particle 裝置 以及 NAS後,開始串接裝置與 Node-Red。

首先,登入 Particle Build,這邊需要做兩件事情:
1. 放進測試用的原始碼,測試 event, function 以及 variable.
2. 取得存取相關 API 權限的 access token,之後要放到 Node-Red 使用。

我們先來將下面的測試的原始碼放進剛剛設置好的 Photon,功能主要是能夠透過event發送LED狀態、可透過function取得控制LED狀態以及目前LED狀態為何。

int ledStatus = 0;
int ledPin = D7;

// LED function
int getLedStatus(String cmd);
int setLedStatus(String cmd);

void setup() {
pinMode(ledPin, OUTPUT);

// Set a variable let user can get LED status.
Particle.variable("ledstatus", ledStatus);

// Set function let user can call it.
Particle.function("getLedStatus", getLedStatus);
Particle.function("setLedStatus", setLedStatus);
}

void loop() {
ledStatus = digitalRead(ledPin);

// Publish event to Particle cloud.
Particle.publish("ledstatus", String(ledStatus));

delay(5000);
}

int getLedStatus(String cmd){
ledStatus = digitalRead(ledPin);

return ledStatus;
}

int setLedStatus(String cmd){
if(cmd == "true"){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}

貼上程式碼後,就可以進行燒錄的動作,如下圖:
Particle build & flash

可以順便注意一下,當燒錄過程中,裝置的 LED 狀態會有黃藍燈一起亮,然後閃爍並連線,最後轉換成呼吸燈,代表燒錄成功。

現在已經完成裝置上的設定,接下來就是要取得存取相關 API 權限的 access token,之後要放到 Node-Red 使用,如下圖:
get token

取得 access token 後,將此 token 放進 Node-Red 提供的 Particle node 裡,
首先先建立一個新的 Particle Cloud config,接下來填入相關資料,例如:Name, Device ID, Event

Create new Particle config for Node-Red

完成後,如下圖,填上剛剛設定上去的 Event 名稱”ledstatus”,再將輸出的 node 與 Particle node 串接起來。

fill-in info

所輸出 event 的結果….

node-red output

Particle 除了透過網頁的方式取得裝置相關的資訊外,也可以透過 REST API 的方式取得目前裝置的狀態資訊

# GET
https://api.particle.io/v1/devices/2d002bxxxxxxxxxx03037?access_token=e2bd9e98axxxxxxxxxxf1970916xxxxxxx

particle rest api
取得 ledstatus variable 狀態

# GET
https://api.particle.io/v1/devices/2d002bxxxxxxxxxx03037/ledstatus?access_token=e2bd9e98axxxxxxxxxxf1970916xxxxxxx

particle

取得目前LED狀態,透過 Particle function

# POST
curl https://api.particle.io/v1/devices/2d002b00xxxxxxxxx53xx037/getLedStatus \
     -d access_token=e2bd9e98xxxxxxxxxxxxx19709xxxxxxxxxx6c92c
 
{
  "id": "2d002b000a47353235303037",
  "last_app": "",
  "connected": true,
  "return_value": 1
}

設定 LED 狀態 setLedStatus

# POST, args=true -> LED On; args=false -> LED off
curl https://api.particle.io/v1/devices/2d002b00xxxxxxxxx53xx037/setLedStatus \
     -d access_token=e2bd9e98xxxxxxxxxxxxx19709xxxxxxxxxx6c92c \
     -d "args=true"
 
{
  "id": "2d002b000a47353235303037",
  "last_app": "",
  "connected": true,
  "return_value": 536959528
}

除了可以透過 REST API 方式取得與控制裝置外,也可以透過 Node-Red 的方式控制,透過 inject node 來控制 LED 的開關.
node-red control led

透過 Node-Red 來控制裝置並不難,如果又不想要花錢申請雲端平台的話,又剛好 NAS 又支援 docker,其實自己搞一個 IoT 的簡易服務也並不難。

之後會針對更多 Particle 相關的應用介紹,包含:
1. 建置自己的 Particle Cloud
2. 整合水質感測裝置,打造屬於自己的魚缸監控系統
3. 介紹一下擁有 3G module 的 Particle Electron