前言
大綱(目錄)
全備份 1.0.0:
all flows :
TEest
背景知識:
什麼是 WebSocket?
WebSocket 是 HTML5 開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。
WebSocket 通訊協定於 2011 年被 IETF 定為標準 RFC 6455,WebSocketAPI 被 W3C 定為標準。
在 WebSocket API 中,瀏覽器和伺服器只需要要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。
兩者之間就直接可以資料互相傳送。
簡單來說,就是有 Client & Server 兩端透過 WebSocket 互相傳遞與接收資料,並且即時顯示在頁面上。
什麼是NodeRED?
NodeRED是基於Node.js所開發出來的工具,
以網站的方式運作。原本是專門為了物聯網iot而設計,
但現在不論是http建網站、websocket、爬蟲等等…都有包辦! NodeRED安裝完成後,
我們就可以在任何電腦的瀏覽器上編輯我們的”node flows”。
windows 10 安裝
教學:
Developers
If you want to run the latest code from git, here's how to get started:
- Install grunt, the build toolnpm install -g grunt-cli
- Clone the code:git clone https://github.com/node-red/node-red.gitcd node-red
- Install the node-red dependenciesnpm install
- Build the codegrunt build
- Runnode red.js
Websocket 基礎範例:
Example 3.1送JSON資料到MQTT
Example 3.2 JSON 控制消息流向
Example 3.3 交換Node 訊息處理
資料分流:
Example 3.4 Using the rbe (report by exception) node
異常報告 使用範例
數值差異太大會顯示
Example 3.5 Scaling input with the range node
數值作對應 :
Example 3.6 Using an mqtt output node to test the flow
MQTT 輸出測試 並且會饋到本機端
Example 3.7 Using Websockets with Node-RED
Websocket 實例:
結果顯示如下:
節點設定
Example 3.8 Sending TCP requests.
TCP 協定傳送資料
建構基礎NODE
設定Request
解析回應 並緩衝 轉成字串
目前沒成功:
目標Server 問題
BlueMix
IBM id: | joviankingeli@gmail.com |
Alias: | iot0asia2code |
mqtt是什麼?
系統平台建置教學
Raspberry Pi
Win32DiskImager Sourceforge Project page
+
電腦
+
Coursera
IBM Bluemix
前置作業
進入系統:
Update the Operating System
sudo apt-get update
Install Node.JS and Node-RED
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install nodejs
PS:
sudo npm install -g node-red-contrib-sitewhere
sudo node-red -v
Install DHT Sensor Node
危險預設不打
sudo npm install -g --unsafe-perm node-dht-sensor
sudo npm install -g --unsafe-perm node-red-contrib-dht-sensor
sudo node-red -v
Conclusion
如果發生錯誤:
使用:
npm rebuild
重建套件庫相依
使用 SSH
- Enter sudo raspi-config in a terminal window
- Select Interfacing Options
- Navigate to and select SSH
- Choose Yes
- Select Ok
- Choose Finish
檔案共享FTP
sudo apt-get install vsftpd
sudo nano /etc/vsftpd.conf
remove "#" at line local enable =yes
remove "#" at line write enable =yes
- chroot_local_user=YES
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd.chroot_list
local_enable=YES, write_enable=YES
sudo service vsftpd restart
username password as pi / 妳好 >>> port: 22>>> Quickconnect
遠端控制
Raspberry Pi - 開機時自動啟動VNCserver
首先在LXTerminal視窗中打入下列指令
sudo nano /etc/init.d/tightvncserver
打好後按Ctrl+X後再按Enter儲存
之後在LXTerminal視窗中繼續打入下列指令
sudo chmod 755 /etc/init.d/tightvncserver
在繼續打入下面這一行
sudo update-rc.d tightvncserver defaults
In the file you put in /etc/init.d/ you have to set it executable with:
chmod +x /etc/init.d/start_my_app
之後將Raspberry Pi重開機後就會自動執行VNC Server了
有使用 Pipline
管道其實是一種重定向技術,Linux所提供的管道符“|”將兩個命令隔開,
管道符左邊命令的輸出就會作為管道符右邊命令的輸入
。連續使用管道意味著第一個命令的輸出會作為第二個命令的輸入,
第二個命令的輸出又會作為第三個命令的輸入,依此類推。
現在,我們先來看看如何使用管道來為我們自動輸入密碼:
ex:
echo 123456 | sudo -S command
Step 3 – Install Apache
MySQL
apt-get install phpmyadmin
需要修改 apache 設定,
cd /etc/apache2
vi apache2.conf
##我的習慣是加在設定檔文件的最後一行##
Include /etc/phpmyadmin/apache.conf
service apache2 restart
docker pull hypriot/rpi-dockerui
Node-Red
Programming the IoT
What is Node RED?
Node-RED is a visual tool for wiring the Internet of Things developed by IBM Emerging Technology and the open source community. Using Node-RED, developers wire up input, output and processing nodes to create flows to process data, control things, or send alerts. It works by allowing you to wire up web services or custom “nodes” to each other, or to things, to do things like:
- Send an email on a rainy weather forecast.
- Push sensor data to services like Twitter.
- Perform complex analysis on data with ease.
安裝NodeRed教學
自動安裝Node-Red 的腳本Script:
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
Introduction to Node RED
正文
Node-Red
談到如何實作,大家氣氛立刻冷了下來,涉及的範圍越廣,軟硬的結合、伺服器的穩度、演算法、例外處理等…就會顯得越重要,大家都害怕,只是個學生真的能實現這些Cool idea嗎?
有沒有簡單好用的開發工具能結合軟體和硬體,
引用各式微服務和資料庫,又能像畫圖一樣容易學習呢?
IBM的開源工具 Node-RED 正好符合以上條件。
使用Node-Red,可以輕鬆的建置屬於自己的專屬IFTTT應用 (If This Then That),更可以打造屬於自己的IOT (Internet Of Thing)
比如:
– 定期檢查網頁資訊,發現特殊變化,發送MQTT給指定topic
– 偵測伺服器是否存在,若不存在,發送Mail給指定收件者
– 指定時間,鬧鐘提醒
– 建立網路聊天室
– 指定時間開啟或關閉電燈
一、套件功能介紹
Node-Red是一個可視化的開發工具。它允許使用者通過組合多元化的視覺化元件來完成各式應用組合。
這些視覺化元件可以是
硬件設備(如:GPIO、智慧家庭周邊wemo)、
Web API(如:WebSocket、HTTP、UDP)、
功能函數(如:range)
或者在線服務(如:twitter、mqtt)。
NodeRED的編輯界面分成四個部分。
最左邊是已定義的各種node的列表;
中間是工作區,用戶可以拖拉左邊的node到工作區,
Node-RED為每個node設置唯一的ID,我們可以通過點擊node來編輯每個Node物件,
並通過連接node的input和output構成資料流;最右邊是debug node的輸出區,
和node的訊息顯示區,node的訊息顯示區顯示每node的使用方式。
右上角有‘Deploy’按鈕,用來把編輯完成的node flows保存到本地端並執行。
基礎node-red 概念:
建立帳號控管成功
(使用docker)
指令:
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-password-here
密碼加密之後
Editor & Admin API security
To enable user authentication on the Editor and Admin API, add the following to your settings.js file:
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
}]}
The users property is an array of user objects. This allows you to define multiple users, each of whom can have different permissions.
重啟Node-red
Node-Red 範例教學 – HTTP Request
引入數據
這個例子稍微複雜一些,開始從外部來源引入數據,以便在本地做一些有用的事情。
2. Add an HttpRequest node
The HttpRequest node can be used to retrieve a web-page when triggered.
After adding one to the workspace, edit it to set the URL property to:
http://realtimeweb-prod.nationalgrid.com/SystemData.aspx
You can optionally add a friendly name.
擷取網站資料
3. Add a function node
Add a Function node with the following code:
// does a simple text extract parse of the http output to provide an// object containing the uk power demand, frequency and time
if (~msg.payload.indexOf('<span')) {
var dem = msg.payload.split('Demand:')[1].split("MW")[0];
var fre = msg.payload.split('Frequency:')[1].split("Hz")[0];
msg.payload = {};
msg.payload.demand = parseInt(dem.split(">")[1].split("<")[0]);
msg.payload.frequency = parseFloat(fre.split(">")[1].split("<")[0]);
msg2 = {};
msg2.payload = (msg.payload.frequency >= 50) ? true : false;
return [msg,msg2];}return null;
Set the number of outputs for the function node to 2.
使用Nodejs寫 基本範例
您現在有一個流向互聯網的流量 - 獲得英國的總電力消耗 - 並將其轉換為具有MW需求和Hertz頻率的JavaScript對象。
該對像從功能節點的第一個輸出發出。
頻率是整體應力的一個指標 - 所以當頻率低於50HZ時,整個國家電網可能會有過載。這在功能節點的第二個輸出中發出的消息中指示; 如果有效載荷為真,則網格中有容量。
UK Power Demand擇是執行程式,依據從UK Power取得的資料進行解析,
輸出兩個值。
結果顯示
可直解導入flow
Source code : Node-red從Web抓數值下來顯示
PS:不要變動裡面的方塊
-成功
參考:
Need npm:
沒有
Node-Red 讀取 Opendata
ex:
以政府PM2.5為例子
架構如下:
函示撰寫:
結果顯示如下:
2017/7/5 W
OK
BMI 值計算
Body Mass Index Calculator
示例1.3使用Node-RED的內置HTTP節點構建簡單的Web服務
Example 2.2 A second flow: weather alerts
空氣警報 使用推特發通知
建立 Node :
Openweather
functions
twitter
程式處理部分:
Twitter 設定部分:
結果顯示:
自東推文撥放:
參考資料:
Node-RED: Lecture 4 – A tour of the core nodes
基本流程Node
2017/05/15 預計進度--->
線上學習進度
Backup:
MQTT 實作練習
目前有問題先不測
第二練習
HTTP 加減乘除
成功建構
AsiaIOT
Need npm:
使用NodeRed創造樣板網頁
Source cod: Web Node-Red
Post Data to Dweet.io using FRED
About Dweet.io
Dweet.io is simple publishing and subscribing for machines, sensors,
devices, robots, and gadgets (we just call them things).
We call published messages ‘dweets’. It’s helpful to think of dweet.io as a Twitter for things, in fact.
Dweet.io是一個有趣且簡單易用的IoT平台,
這個服務對於自己的說明是「Fast, free and ridiculously simple— it’s like Twitter for social machines.」,
它接受來自任何時間任何地方的JSON格式文字資訊的傳入,
並且保留24小時之後便自動清除,
在這段保存期間內我們可以去查詢或取出這些資訊進行後續的利用分析;
換句話說,Dweet.io接受任何來源的文字資訊,
只要將資訊集中到Dweet.io,
不同端點不同種類的設備便能進行溝通、整合、運算等等後端功能,
也可以再透過Dweet.io將訊息回傳給相關的設備,
因此,Dweet.io它是一種屬於M2M(Machine to Machineh環境的訊息溝通仲介平台。
丟資料到雲端範例 Posting Data
程式部分:
Need npm :
npm install node-red-node-dweetio
A Node-RED Dashboard using FreeBoard
資訊圖示化
freeboardred@ctmailing.us
j7^c%3Cd1eTQvP*43&9p
IOTvisual
weathIOT
openweathermap@ggg.pp.ua
^A16O&k^F6S5^9D#543e
openweathermap
1fe34bd60a83f823e6aa39e31608edb5
9e63ba5ec276c3db6174045b63f97ebb
使用NodeRed儀錶板用freeboard
可自己架設儀表板或是用網路的都可
Need npm :
亂數隨機數值測試
2014/05/14 W
實作過程:
好 上加好
以顯示台灣台中天氣為範例
獲取網站API Key
拉Node 顯示
在freeboard上的操作
編寫程式
範例建置 1. 擷取開發放資料溫濕度 並呈現圖表化
Freeboard室內溫溼度感測器資料呈現:
顯示室內感測器
版本 1.0
程式部分:
參考資料:
SenseHAT 測試 Device Simulator with Node RED
Source code:
使用broker教學 物聯網中繼站
利用IBM IOT 平台
Add a Watson IoT
可以讓使用者使用數據
過程如下:
- inject node - configure to send an empty string every 5 seconds
- random node
- debug node - to verify outgoing data is correct
- function node - use the following code in the node:
Device resbe001iot
Organization ID
gm3otm
Device Type
RaspberryPi
Device ID
resbe001iot
Authentication Method
token
Authentication Token
passw1rd
傳送數據到雲端上
Devices, Applications and Gateways
產生隨機變數到ibm broker tunnel
Need npm:
npm install node-red-node-cf-cloudant
Source code:
2017/4/9
終端對終端的 指派任務
Additional assistance for the end-to-end assignment
運作過程
Respberry Pi 的 pip 套件有問題
需用
sudo easy_install 套件名子
Websocket 測試 傳字串
Source code:
MQTT
上傳App 部屬到Bluemix
Deploying an application to Bluemix
創建目錄
打開 shell
npm init
建立 server.js
var express = require("express");
var app = express();
var serverPort = 3000;
var serverHost = 'localhost';
app.get('/', function(req, res) {
res.send('Hello Coursera');
});
var server = app.listen(serverPort, serverHost, function() {
var host = server.address().address;
var port = server.address().port;
console.log('Listening at http://%s:%s', host, port);
});
npm install express --save
npm start
結果:
先安裝 Eclipse
使用CF push 出現非預期錯誤 !
上傳App to Bluemix 第三部分
Deploying an application to Bluemix part 3
到目前的練習備份:
2017/04/20 再繼續
2017/04/21 開始
目前台灣的學術研究為: 物聯網核心技術及應用專題
2017/04/22 (六) 開始
Node-Red 範例教學 – HTTP網路聊天室
一. 目標
建立 HTTP Requestion
網路聊天室
二. 實作過程
1. 啟動node-red
2. 寫程式碼
在 5 分钟内使用 Node-RED 构建实时的聊天应用程序
3. 寫完程式,結果如下
在 5 分钟内使用 Node-RED 构建实时的聊天应用程序
前面三行提供了HTTP聊天室的API
HTTP GET /login
收到 GET /login,產生 html 登入頁面,並返回給瀏覽器
HTTP POST /chat
收到POST /chat2,產生對談頁面,包含 iframe以及 javescript 定期更新對話內容
HTTP GET /diaglog
將對談記錄串接起來,以供聊天內容呈現使用
4. 提供了HTTP Get的基本範例,了解瀏覽器開啟網頁後運作方式
可使用http://ip:port/mypage驗證
5. 執行結果
圖片如下:
可同時開多個瀏覽器測試對談,
參考畫面如下:
三. 參考文獻
進階練習---在 5 分钟内使用 Node-RED 构建实时的聊天应用程序(已完成)
使用 websocket 具有click 反應,即時 更新 Data 的簡單網頁
Simple Web page with live data updates via websocket
OK 範例實作 – 閃爍LED燈
一. 目的
OK ---> 閃爍LED燈5秒後,停止閃爍
二. 實作過程
- 程式部分
- 程式圖綠色圈是多久要停止閃爍的流程,在五秒後,會從後方的switch輸出”off” 的值紫色圈是處理閃暗閃暗的流程,當開始輸入”on”後,就由藍框框中的邏輯開始運作。程式區使用了context來記錄目前的執行狀態,讓delay 250ms 以及trigger 250ms可以正常運作。這個範例接了pin 12作為輸出,請參考下圖,將LED供電線路接在GPIO 18上
- 可看到五秒內LED 250ms閃爍一次
三. 參考資料
OK 實作e改寫 – 網路上遠端控制LED燈閃爍
Install DHT Sensor Node 溫溼度感測器 驅動安裝
Node-red 溫溼度感測器
Node-RED has support for the DHT11 sensor used in other SiteWhere tutorials. In order to enable the module, the BCM2835 library
Step 1: Install Sensor Libraries
第一步驟 安裝lib
For DHT11/DHT22/AM2302 sensors, you need to download and install:
- node-dht-sensor npm package
wget http://www.airspayce.com/mikem/bcm2835/壓縮檔名稱
tar zxvf bcm2835-1.46.tar.gz
cd bcm2835-1.46
./configure
make
sudo make check
sudo make install
sudo npm install -g node-dht-sensor
Need npm :
npm install node-red-contrib-dht-sensor
node-red 像 node.js 一樣調用 套件的方法
編輯 node-red
vim settings.js
setting.js
node js module version mismatch
cd ~
cd .node-red/
nodejs setting.js
or
sudo noed-red-start
註釋有錯部分
溫溼度感測
參考資料:
(重要!!!) :
var sensor = require('node-dht-sensor');
sensor.read(22, 4, function(err, temperature, humidity) {
if (!err) {
console.log('temp: ' + temperature.toFixed(1) + '°C, ' +
'humidity: ' + humidity.toFixed(1) + '%'
);
}
});
2017/04/27 還未開始
試用twitter 接收文章不能用
可使發文功能
可發文在twitter 自動發文程式 :
程式部分:
呈現結果:
Node-RED 接收 Twitter 訊息
目前未成功!!!!
錯誤訊息:
"stream error: http (401)"
問題解決參考:
猜想:可能驗證問題
限制次數IP 不能意旨用要等一段時間
接收twitter 資料有錯
錯誤如圖下
搜尋還是不知道問題所在
在 Raspberry Pi 2 Docker
Raspbian is a free OS based on Debian optimized for Raspberry Pi hardware. Maintained by Resin.io.
docker pull resin/rpi-raspbian
Dcocker 環境建立 LAMP + MySql + Node-red
參考:
docker run -d -p 80:80 -p 3306:3306 joaquindlz/rpi-docker-lamp
phpmyadmin
docker pull yanivsetton/rpi-lamp
Full LAMP Server based on ARM | Once a Month package & security updates to be up to date
LAMP + Phpmyadmin
docker pull yanivsetton/rpi-lamp
範例學習 Node-Red 範例教學 – 傳送資料到Google試算表中
2017/6/11 W
一. 目的
使用Google 表單的方式,將設備資料存入Google試算表內
二. 介紹
1. 啟動node-red 套件,並開啟UI介面
2017 8/27 再學 W