[NodeRed]-建置與基礎觀念

 


前言
    

大綱(目錄)




全備份 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:
  1. Install grunt, the build tool
    npm install -g grunt-cli
  2. Clone the code:
    cd node-red
  3. Install the node-red dependencies
    npm install
  4. Build the code
    grunt build
  5. Run
    node 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

mkdir bcm2835
cd bcm2835
./configure
make
sudo make check
sudo make install


危險預設不打
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

Alternatively, raspi-config can be used:
  1. Enter sudo raspi-config in a terminal window
  2. Select Interfacing Options
  3. Navigate to and select SSH
  4. Choose Yes
  5. Select Ok
  6. 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

In /etc/vsftpd/vsftpd.conf, ensure all all of the following are set:-
  • 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 +/etc/init.d/start_my_app

之後將Raspberry Pi重開機後就會自動執行VNC Server了


有使用 Pipline

管道其實是一種重定向技術,Linux所提供的管道符“|”將兩個命令隔開,

管道符左邊命令的輸出就會作為管道符右邊命令的輸入
。連續使用管道意味著第一個命令的輸出會作為第二個命令的輸入,
第二個命令的輸出又會作為第三個命令的輸入,依此類推。

現在,我們先來看看如何使用管道來為我們自動輸入密碼:
ex:
echo 123456 | sudo -S command





Step 3 – Install Apache

apt-get install apache2 apache2-doc apache2-utils
apt-get install php5-mysql
apt-get install mysql-server mysql-client

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.
showcase-flowshowcase-flow




安裝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保存到本地端並執行。


可以參考官方的NodeRED document,裡面有很清楚的使用說明。
我個人推薦這個Node-RED Programming Guide
裡面有很完整的“動手做”教學!讓我們能快速上手!






基礎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

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
將對談記錄串接起來,以供聊天內容呈現使用

PS:  template的網址需要更改IP 位址 :  http:// ip : port /

4.    提供了HTTP Get的基本範例,了解瀏覽器開啟網頁後運作方式
可使用http://ip:port/mypage驗證


5. 執行結果




圖片如下:


瀏覽器 輸入 http://ip:port/login 
即可進行登入動作,
登入後就有對談畫面,
可同時開多個瀏覽器測試對談,
參考畫面如下:






三. 參考文獻





進階練習---在 5 分钟内使用 Node-RED 构建实时的聊天应用程序(已完成)













使用 websocket 具有click 反應,即時 更新 Data 的簡單網頁
 
Simple Web page with live data updates via websocket

















OK 範例實作 – 閃爍LED燈

一. 目的

 OK ---> 閃爍LED燈5秒後,停止閃爍 

二. 實作過程

  1. 程式部分


  2. 程式圖
    綠色圈是多久要停止閃爍的流程,
    在五秒後,會從後方的switch輸出”off” 的值
     
    紫色圈是處理閃暗閃暗的流程,
    當開始輸入”on”後,就由藍框框中的邏輯開始運作。
    程式區使用了context來記錄目前的執行狀態,
    讓delay 250ms 以及trigger 250ms可以正常運作。


    這個範例接了pin 12作為輸出,
    請參考下圖,將LED供電線路接在GPIO 18上

  3. 可看到五秒內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:

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
































































































































































































































































































































嗨 朋友,我是程式設計師;專職網路網站開發與行銷設計執行,目前也有自己的事業。