顯示具有 2019 勤益RFID 標籤的文章。 顯示所有文章
顯示具有 2019 勤益RFID 標籤的文章。 顯示所有文章

2020年8月31日 星期一

Introductory IoT

 http://cc.ee.ntu.edu.tw/~rbwu//pages/course.html#IoT_Intro

Introductory IoT

Last Update: 7 months ago

Lecture Info

  • Invited Teachers: 賴怡吉博士、李健榮博士、廖書漢博士
  • TA:趙汝晉

  • 期末報告資訊:

    • 時間:

Lecture Notes - 2018

Download Examples

2020年8月25日 星期二

Storing IoT data in MySQL

 Storing IoT data in MySQL 

  1. Setting up MySQL server on local system.
  2. Setting up Node-red to get the temperature and humidity data from IoT device
  3. Creating Flow for database node in Node-red to store data into database

參考來源 https://aliakbarfani.wordpress.com/storing-iot-data-in-mysql-and-integrating-real-time-analytics/
















取小數電後1位數

var originalNumber = msg.payload

msg.payload = originalNumber.toFixed(1)

return msg;


===============================

temperature = msg.payload[0] ;

humidity = msg.payload[1];


//humidity = msg.payload.humidity

//temperature = msg.payload.temperature

msg.topic = "INSERT INTO sensors ( `temperature`, `humidity`) VALUES ( "+ temperature+", "+ humidity +");"

return msg;



Node-Red 程式

==================================================

[{"id":"df15bbaf.dd2c08","type":"tab","label":"流程4","disabled":false,"info":""},{"id":"7b7f0885.63a278","type":"mqtt out","z":"df15bbaf.dd2c08","name":"","topic":"alex9ufo/IOT/temperature_humidity","qos":"1","retain":"false","broker":"841df58d.ee5e98","x":480,"y":420,"wires":[]},{"id":"bb1d0332.5b2fd","type":"mqtt in","z":"df15bbaf.dd2c08","name":"","topic":"alex9ufo/IOT/temperature_humidity","qos":"1","datatype":"auto","broker":"841df58d.ee5e98","x":160,"y":80,"wires":[["e9fe04c3.e96618"]]},{"id":"3a140877.2c8a88","type":"inject","z":"df15bbaf.dd2c08","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":340,"wires":[["9a2d36e3.c37a18","aae3f56.23f5b08"]]},{"id":"9a2d36e3.c37a18","type":"random","z":"df15bbaf.dd2c08","name":" temperature","low":"0","high":"50","inte":"false","property":"payload","x":270,"y":320,"wires":[["f0b10e6c.edba8"]]},{"id":"aae3f56.23f5b08","type":"random","z":"df15bbaf.dd2c08","name":"humidity","low":"0","high":"100","inte":"false","property":"payload","x":260,"y":360,"wires":[["19a22c5b.3f80a4"]]},{"id":"19b8f913.5db8c7","type":"join","z":"df15bbaf.dd2c08","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":630,"y":340,"wires":[["7b7f0885.63a278"]]},{"id":"ae23998a.2b61b8","type":"function","z":"df15bbaf.dd2c08","name":"MySQL Function","func":"temperature = msg.payload[0] ;\nhumidity = msg.payload[1];\n\n//humidity = msg.payload.humidity\n//temperature = msg.payload.temperature\nmsg.topic = \"INSERT INTO sensors ( `temperature`, `humidity`) VALUES ( \"+ temperature+\", \"+ humidity +\");\"\nreturn msg;\n\n","outputs":1,"noerr":0,"x":590,"y":80,"wires":[["a5e2f3b1.0a897"]]},{"id":"f0b10e6c.edba8","type":"function","z":"df15bbaf.dd2c08","name":"取小數電後1位數","func":"var originalNumber = msg.payload\nmsg.payload = originalNumber.toFixed(1)\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":320,"wires":[["19b8f913.5db8c7"]]},{"id":"19a22c5b.3f80a4","type":"function","z":"df15bbaf.dd2c08","name":"","func":"var originalNumber = msg.payload\nmsg.payload = originalNumber.toFixed(1)\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":360,"wires":[["19b8f913.5db8c7"]]},{"id":"a5e2f3b1.0a897","type":"mysql","z":"df15bbaf.dd2c08","mydb":"3ec1eff7.3a59c","name":"MySQLDatabase","x":790,"y":80,"wires":[["63552ff9.dd45a"]]},{"id":"63552ff9.dd45a","type":"debug","z":"df15bbaf.dd2c08","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":870,"y":140,"wires":[]},{"id":"e9fe04c3.e96618","type":"json","z":"df15bbaf.dd2c08","name":"","property":"payload","action":"","pretty":false,"x":390,"y":80,"wires":[["ae23998a.2b61b8","4e5783a6.4385cc","d80bd55e.713468"]]},{"id":"30fed640.27d95a","type":"ui_gauge","z":"df15bbaf.dd2c08","name":"","group":"6c9116b.b62d4e8","order":14,"width":0,"height":0,"gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"50","colors":["#00b500","#e6e600","#ca3838"],"seg1":"20","seg2":"35","x":670,"y":140,"wires":[]},{"id":"4145d701.1c7608","type":"ui_gauge","z":"df15bbaf.dd2c08","name":"","group":"6c9116b.b62d4e8","order":15,"width":0,"height":0,"gtype":"gage","title":"gauge","label":"units","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"35","seg2":"60","x":670,"y":200,"wires":[]},{"id":"4e5783a6.4385cc","type":"function","z":"df15bbaf.dd2c08","name":"Get temperature","func":"msg.payload = msg.payload[0] ;\nreturn msg;\n\n","outputs":1,"noerr":0,"x":500,"y":140,"wires":[["30fed640.27d95a"]]},{"id":"d80bd55e.713468","type":"function","z":"df15bbaf.dd2c08","name":"Get humidity","func":"msg.payload = msg.payload[1] ;\nreturn msg;\n\n","outputs":1,"noerr":0,"x":490,"y":200,"wires":[["4145d701.1c7608"]]},{"id":"841df58d.ee5e98","type":"mqtt-broker","z":"","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"3ec1eff7.3a59c","type":"MySQLdatabase","z":"","name":"Storing IoT data","host":"127.0.0.1","port":"3306","db":"mysql_sensor","tz":"GMT +8"},{"id":"6c9116b.b62d4e8","type":"ui_group","z":"","name":"Test","tab":"eeb8e179.a47a4","order":1,"disp":true,"width":"6","collapse":false},{"id":"eeb8e179.a47a4","type":"ui_tab","z":"","name":"MySQL","icon":"dashboard","disabled":false,"hidden":false}]

2020年8月24日 星期一

Node-Red & MySQL & Line Notify

 Node-Red & MySQL & Line Notify  
















注意

S =msg.payload

msg.topic = "INSERT INTO led ( `LED_Status`) VALUES ( '" + S + "');"

return msg;


Node-Red 程式
=======================================================================

[{"id":"f869fa31.2f2508","type":"tab","label":"流程5","disabled":false,"info":""},{"id":"ae7468f4.24aea8","type":"mqtt in","z":"f869fa31.2f2508","name":"","topic":"alex9ufo/led/led_event","qos":"1","datatype":"auto","broker":"841df58d.ee5e98","x":120,"y":80,"wires":[["d90adb1e.55bb18","267de439.cf353c","814976c.686a388"]]},{"id":"d90adb1e.55bb18","type":"ui_text","z":"f869fa31.2f2508","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"name":"","label":"MQTT Suscribe Data","format":"{{msg.payload}}","layout":"col-center","x":380,"y":80,"wires":[]},{"id":"d11d794c.f6c4d8","type":"ui_button","z":"f869fa31.2f2508","name":"","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"passthru":false,"label":"On led","tooltip":"","color":"white","bgcolor":"","icon":"fa-circle","payload":"LED開","payloadType":"str","topic":"","x":90,"y":320,"wires":[["ad1c7f22.8f16b","971b5fae.98e77"]]},{"id":"ed1f01ca.24304","type":"ui_button","z":"f869fa31.2f2508","name":"","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"passthru":false,"label":"Off led","tooltip":"","color":"black","bgcolor":"","icon":"fa-circle-o","payload":"LED關","payloadType":"str","topic":"","x":90,"y":380,"wires":[["ad1c7f22.8f16b","971b5fae.98e77"]]},{"id":"ad1c7f22.8f16b","type":"mqtt out","z":"f869fa31.2f2508","name":"","topic":"alex9ufo/led/led_event","qos":"1","retain":"false","broker":"841df58d.ee5e98","x":360,"y":320,"wires":[]},{"id":"971b5fae.98e77","type":"ui_audio","z":"f869fa31.2f2508","name":"","group":"6c9116b.b62d4e8","voice":"zh-TW","always":"","x":320,"y":380,"wires":[]},{"id":"267de439.cf353c","type":"function","z":"f869fa31.2f2508","name":"Format timestamp","func":"var date = new Date();\nvar h = date.getHours();\nvar m = date.getMinutes();\nvar s = date.getSeconds();\nif(h<10){\n    h = '0'+h;\n}\nif(m<10){\n    m = '0' + m;\n}\nif(s<10){\n    s = '0' + s;\n}\nmsg.payload = msg.payload + ' --> Time:(' + h + ':' + m + ':' + s + ')' ;\n\nreturn msg;","outputs":1,"noerr":0,"x":190,"y":220,"wires":[["9ebd8c60.18215"]]},{"id":"9ebd8c60.18215","type":"function","z":"f869fa31.2f2508","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":370,"y":220,"wires":[["31dbb78.b800e48"]]},{"id":"31dbb78.b800e48","type":"http request","z":"f869fa31.2f2508","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":540,"y":220,"wires":[["da02d08f.6b501"]]},{"id":"da02d08f.6b501","type":"debug","z":"f869fa31.2f2508","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":690,"y":220,"wires":[]},{"id":"814976c.686a388","type":"function","z":"f869fa31.2f2508","name":"MySQL Function","func":"S =msg.payload\nmsg.topic = \"INSERT INTO led ( `LED_Status`) VALUES ( '\" + S + \"');\"\nreturn msg;\n\n//INSERT INTO `led` (`id`, `time_led`, `LED_Status`) VALUES ('1', current_timestamp(), 'LED開');","outputs":1,"noerr":0,"x":370,"y":120,"wires":[["97a0fefe.2112d","a08402e0.5d7e9"]]},{"id":"a08402e0.5d7e9","type":"mysql","z":"f869fa31.2f2508","mydb":"3ec1eff7.3a59c","name":"MySQLDatabase","x":590,"y":160,"wires":[[]]},{"id":"97a0fefe.2112d","type":"debug","z":"f869fa31.2f2508","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":120,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","z":"","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"6c9116b.b62d4e8","type":"ui_group","z":"","name":"Test","tab":"eeb8e179.a47a4","order":1,"disp":true,"width":"6","collapse":false},{"id":"3ec1eff7.3a59c","type":"MySQLdatabase","z":"","name":"","host":"127.0.0.1","port":"3306","db":"mysql_led","tz":"GMT +8"},{"id":"eeb8e179.a47a4","type":"ui_tab","z":"","name":"MySQL","icon":"dashboard","disabled":false,"hidden":false}]

Node-Red & MySQL random 2 number Store To MySQL Database

 Node-Red & MySQL random  2 number Store To MySQL Database











[{"id":"6a6300bd.5b3a6","type":"tab","label":"Flow 4","disabled":false,"info":""},{"id":"e85555cf.03b198","type":"debug","z":"6a6300bd.5b3a6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":570,"y":40,"wires":[]},{"id":"7fa0d45f.9028ec","type":"function","z":"6a6300bd.5b3a6","name":"MySQL Function","func":"temperature =  msg.payload[0]\nhumidity = msg.payload[1]\n\n//humidity = msg.payload.humidity\n//temperature = msg.payload.temperature\nmsg.topic = \"INSERT INTO temp_humi ( `temperature`, `humidity`) VALUES ( \"+ temperature+\", \"+ humidity +\");\"\nreturn msg;\n\n","outputs":1,"noerr":0,"x":450,"y":200,"wires":[["bb82ea59.32bd68","db671226.0ba2f"]]},{"id":"bb82ea59.32bd68","type":"mysql","z":"6a6300bd.5b3a6","mydb":"3ec1eff7.3a59c","name":"MySQLDatabase","x":690,"y":200,"wires":[[]]},{"id":"8a986dfc.3816c","type":"inject","z":"6a6300bd.5b3a6","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":80,"y":140,"wires":[["9ed27499.0d9ca8","7740e351.41719c"]]},{"id":"9ed27499.0d9ca8","type":"random","z":"6a6300bd.5b3a6","name":"","low":"-50","high":"50","inte":"true","property":"payload","x":240,"y":120,"wires":[["fd7b9e51.97bab"]]},{"id":"7740e351.41719c","type":"random","z":"6a6300bd.5b3a6","name":"","low":"1","high":"100","inte":"true","property":"payload","x":240,"y":160,"wires":[["fd7b9e51.97bab"]]},{"id":"fd7b9e51.97bab","type":"join","z":"6a6300bd.5b3a6","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":390,"y":120,"wires":[["e85555cf.03b198","7fa0d45f.9028ec"]]},{"id":"db671226.0ba2f","type":"debug","z":"6a6300bd.5b3a6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":660,"y":300,"wires":[]},{"id":"3ec1eff7.3a59c","type":"MySQLdatabase","z":"","name":"","host":"127.0.0.1","port":"3306","db":"mysql_test1","tz":"GMT +8"}]

2020年8月23日 星期日

Node-RED & MySQL (Insert , Delete , Update , Select )

 Node-RED & MySQL  (Insert , Delete , Update , Select )


Setting MySQL DataBase 


/Template

<table style="width:100%">

  <tr>

    <th>Index</th> 

    <th>Sensor</th>

    <th>Temperature</th> 

    <th>Humidity</th>

  </tr>

  <tr ng-repeat="x in msg.payload | limitTo:20">

    <td>{{$index}}</td>

    <td align="center">{{msg.payload[$index].SensorName}}</td>

    <td align="center">{{msg.payload[$index].Temperature}}</td> 

    <td align="center">{{msg.payload[$index].Humidity}}</td>

  </tr>

</table>


/Insert


INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor1', '25', '78');

INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor2', '45', '56');

INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor3', '38', '88');



SELECT * FROM sensor

DELETE FROM sensor WHERE Sensor_Id =  6

UPDATE sensor SET Temperature = 0 WHERE Sensor_Id = 7


/ PhpMyAdmin  Setting























[{"id":"5a02d23f.8784ec","type":"tab","label":"流程4","disabled":false,"info":""},{"id":"e8de394c.aad598","type":"mysql","z":"5a02d23f.8784ec","mydb":"73a92d28.0c3eb4","name":"Test","x":370,"y":300,"wires":[["3e0abcb2.4bb474","4edf2cfa.0ee964"]]},{"id":"e3ca7c3f.1e92f","type":"inject","z":"5a02d23f.8784ec","name":"Insert Data1","topic":"INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor1', '25', '78');","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":180,"wires":[["e8de394c.aad598"]]},{"id":"3e0abcb2.4bb474","type":"debug","z":"5a02d23f.8784ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":300,"wires":[]},{"id":"15998a8.733e176","type":"inject","z":"5a02d23f.8784ec","name":"Insert Data2","topic":"INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor2', '45', '56');","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":240,"wires":[["e8de394c.aad598"]]},{"id":"e5c239a7.944e78","type":"inject","z":"5a02d23f.8784ec","name":"Insert Data3","topic":"INSERT INTO `sensor` (`SensorName`, `Temperature`, `Humidity`) VALUES ('Sensor3', '38', '88');","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":300,"wires":[["e8de394c.aad598"]]},{"id":"595c5780.0c9f98","type":"inject","z":"5a02d23f.8784ec","name":"Select","topic":"SELECT * FROM sensor","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":340,"wires":[["e8de394c.aad598"]]},{"id":"d2cc1836.ca4e98","type":"inject","z":"5a02d23f.8784ec","name":"Delete","topic":"DELETE FROM sensor WHERE Sensor_Id =  6","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":380,"wires":[["e8de394c.aad598"]]},{"id":"a64a4ae2.71f728","type":"inject","z":"5a02d23f.8784ec","name":"UpDate Record 7","topic":"UPDATE sensor SET Temperature = 0 WHERE Sensor_Id = 7","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":420,"wires":[["e8de394c.aad598"]]},{"id":"4edf2cfa.0ee964","type":"ui_template","z":"5a02d23f.8784ec","group":"6c9116b.b62d4e8","name":"","order":9,"width":0,"height":0,"format":"<table style=\"width:100%\">\n  <tr>\n    <th>Index</th> \n    <th>Sensor</th>\n    <th>Temperature</th> \n    <th>Humidity</th>\n  </tr>\n  <tr ng-repeat=\"x in msg.payload | limitTo:20\">\n    <td>{{$index}}</td>\n    <td align=\"center\">{{msg.payload[$index].SensorName}}</td>\n    <td align=\"center\">{{msg.payload[$index].Temperature}}</td> \n    <td align=\"center\">{{msg.payload[$index].Humidity}}</td>\n  </tr>\n</table>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":560,"y":360,"wires":[[]]},{"id":"73a92d28.0c3eb4","type":"MySQLdatabase","z":"","name":"MySQL_Test2","host":"localhost","port":"3306","db":"mysql_test2","tz":""},{"id":"6c9116b.b62d4e8","type":"ui_group","z":"","name":"Test","tab":"eeb8e179.a47a4","order":1,"disp":true,"width":"6","collapse":false},{"id":"eeb8e179.a47a4","type":"ui_tab","z":"","name":"MySQL","icon":"dashboard","disabled":false,"hidden":false}]

MQTT 協定與 Modbus 通訊的遠端監控與控制系統架構

MQTT 協定與 Modbus 通訊的遠端監控與控制系統架構 這張圖片展示了一個 結合 MQTT 協定與 Modbus 通訊的遠端監控與控制系統架構 (主要透過 Node-RED 進行資料整合)。 系統包含三個核心部分,其運作功能說明如下: 1. ESP32 終端設備(硬體控制層...