Guest User

全備份1.0.0 all Node-red

a guest
Jun 2nd, 2017
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JSON 57.80 KB | None | 0 0
  1. [{"id":"c44afe1f.e0e35","type":"tab","label":"Basic"},{"id":"cd10f797.653218","type":"tab","label":"test"},{"id":"7e05a2af.cde3cc","type":"tab","label":"網站設計"},{"id":"f9d5b41a.8bfe08","type":"subflow","name":"Subflow 1","info":"","in":[],"out":[]},{"id":"decfd5f6.07ccf8","type":"mqtt-broker","z":"","broker":"broker.mqttdashboard.com","port":"8000","clientid":"clientId-U8NJaXTU2Q","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"6c64d3ab.053c2c","type":"websocket-listener","z":"c44afe1f.e0e35","path":"/ws/simpleled","wholemsg":"false"},{"id":"659f36f.285c0c8","type":"firebase config","z":"","firebaseurl":"iot-test-3fd24","loginType":"none"},{"id":"45fe57d9.cc0148","type":"twitter-credentials","z":"","screen_name":"@iot_asia_dev"},{"id":"56b038f7.434ba8","type":"twitter-credentials","z":"","screen_name":"@iot_asia_dev"},{"id":"545dbcd.4d90e44","type":"websocket-listener","path":"/ws/chat","wholemsg":"false"},{"id":"5eb364fd.329a7c","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":100,"y":80,"wires":[["2bf10541.00a29a"]]},{"id":"2b8e2019.70747","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":198.9999771118164,"y":201.9999771118164,"wires":[]},{"id":"2bf10541.00a29a","type":"function","z":"c44afe1f.e0e35","name":"","func":"var sensor = global.get('sensor');\n\nsensor.initialize(11, 4);\nvar readout = sensor.read();\nmsg.topic=\"temp\";\nmsg.payload = { 溫度:readout.temperature.toFixed(2) + \" 度C\" , 濕度:readout.humidity.toFixed(2) + \" %\" };\nconsole.log(msg);\nreturn msg;\n","outputs":1,"noerr":0,"x":159.99998474121094,"y":132.99998092651367,"wires":[["2b8e2019.70747"]]},{"id":"2fcd531d.91fffc","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"Hello Node-Red from Dweetio","payloadType":"str","repeat":"600","crontab":"","once":true,"x":370,"y":100,"wires":[["1e1abdea.73d812"]]},{"id":"1e1abdea.73d812","type":"dweetio out","z":"c44afe1f.e0e35","thing":"thingName","name":"","x":760,"y":100,"wires":[]},{"id":"fa0c186d.e81e48","type":"dweetio in","z":"c44afe1f.e0e35","thing":"thingName","name":"","x":370,"y":160,"wires":[["8888a094.dcd41"]]},{"id":"8888a094.dcd41","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"true","complete":"payload","x":780,"y":160,"wires":[]},{"id":"773637ca.f2b848","type":"comment","z":"c44afe1f.e0e35","name":"物聯網 資料傳輸測試","info":"test\n沒有傳回來\n","x":370,"y":40,"wires":[]},{"id":"f037affa.076b3","type":"mqtt in","z":"c44afe1f.e0e35","name":"","topic":"noderedlecture/sensor","qos":"0","broker":"decfd5f6.07ccf8","x":100,"y":360,"wires":[["13694149.2e7c9f"]]},{"id":"13694149.2e7c9f","type":"json","z":"c44afe1f.e0e35","name":"","x":110,"y":420,"wires":[["d599badb.39eb18"]]},{"id":"d599badb.39eb18","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":150,"y":480,"wires":[]},{"id":"a5653a42.ad6058","type":"inject","z":"c44afe1f.e0e35","name":"程式執行的頻率","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":360,"y":360,"wires":[["bb505fb5.ae5fb"]]},{"id":"bb505fb5.ae5fb","type":"http request","z":"c44afe1f.e0e35","name":"英國電力開放式資料","method":"GET","url":"http://realtimeweb-prod.nationalgrid.com/SystemData.aspx","tls":"","x":450,"y":440,"wires":[["15322404.63af4c"]]},{"id":"15322404.63af4c","type":"function","z":"c44afe1f.e0e35","name":"英國電力附載顯示","func":"// does a simple text extract parse of the http output to provide an\n// object containing the uk power demand, frequency and time\n\nif (~msg.payload.indexOf('<span')) {\n    var dem = msg.payload.split('Demand:')[1].split(\"MW\")[0];\n    var fre = msg.payload.split('Frequency:')[1].split(\"Hz\")[0];\n// 電綠\n\n\n    msg.payload = {};\n    msg.payload.demand = parseInt(dem.split(\">\")[1].split(\"<\")[0]);\n    msg.payload.frequency = parseFloat(fre.split(\">\")[1].split(\"<\")[0]);\n    \n    msg2 = {};\n    msg2.payload = (msg.payload.frequency >= 50) ? true : false;\n\n    return [msg,msg2];\n}\n\nreturn null;","outputs":"2","noerr":0,"x":545.0000152587891,"y":496,"wires":[["46add411.6f6e0c"],["ea729d73.809c9"]]},{"id":"46add411.6f6e0c","type":"debug","z":"c44afe1f.e0e35","name":"顯示供電數據","active":true,"console":"false","complete":"payload","x":634.9999847412109,"y":354.9999713897705,"wires":[]},{"id":"ea729d73.809c9","type":"debug","z":"c44afe1f.e0e35","name":"判斷有無超過負荷","active":true,"console":"false","complete":"payload","x":810,"y":500,"wires":[]},{"id":"9bd5dbfa.4258c8","type":"comment","z":"c44afe1f.e0e35","name":"從Web的OpenData抓數值下來","info":"","x":400,"y":320,"wires":[]},{"id":"932385c7.944838","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":120,"y":620,"wires":[["845030e4.a9e79"]]},{"id":"87660ea9.2f922","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":486.9999771118164,"y":627.9999122619629,"wires":[]},{"id":"845030e4.a9e79","type":"function","z":"c44afe1f.e0e35","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"x":308.00002670288086,"y":623.9998016357422,"wires":[["87660ea9.2f922"]]},{"id":"ecc6ea21.62dc98","type":"comment","z":"c44afe1f.e0e35","name":"LED 閃爍測試","info":"","x":110,"y":740,"wires":[]},{"id":"ab3e4487.d15128","type":"trigger","z":"c44afe1f.e0e35","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"250","extend":"false","units":"ms","name":"","x":400,"y":880,"wires":[["9fc090d6.e5332","7e3e9479.ff392c"]]},{"id":"9fc090d6.e5332","type":"function","z":"c44afe1f.e0e35","name":"","func":"if (msg.payload == \"off\")\n\tcontext.state = 0;\nif (msg.payload == \"on\")\n\tcontext.state = 1;\n\nif (context.state == 1)\n{\n\tif (msg.payload == 0)\n\t\treturn msg;\n\telse\n\t\treturn;\n}\nelse\n\treturn;","outputs":1,"x":490,"y":980,"wires":[[]]},{"id":"dd916aa9.3bd3d8","type":"switch","z":"c44afe1f.e0e35","name":"","property":"payload","rules":[{"t":"eq","v":"on"},{"t":"eq","v":"off"}],"checkall":"true","outputs":2,"x":181,"y":946,"wires":[["9fc090d6.e5332","ab3e4487.d15128"],["9fc090d6.e5332"]]},{"id":"7e3e9479.ff392c","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"LED","pin":"12","set":"","level":"0","out":"out","x":643,"y":849,"wires":[]},{"id":"f7fd728.99f939","type":"inject","z":"c44afe1f.e0e35","name":"On","topic":"","payload":"on","payloadType":"str","repeat":"","crontab":"","once":false,"x":121,"y":832,"wires":[["dd916aa9.3bd3d8","c080266a.20d938"]]},{"id":"c080266a.20d938","type":"delay","z":"c44afe1f.e0e35","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":275,"y":779,"wires":[["70bf0d7c.a56844"]]},{"id":"70bf0d7c.a56844","type":"change","z":"c44afe1f.e0e35","name":"Switch off","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"x":442,"y":775,"wires":[["dd916aa9.3bd3d8"]]},{"id":"6fd36f79.9b75d","type":"inject","z":"c44afe1f.e0e35","name":"Tick every 5 secs","topic":"test","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"x":170,"y":1240,"wires":[["3bfe606c.860f4"]]},{"id":"74fd26cf.b83cc8","type":"websocket out","z":"c44afe1f.e0e35","name":"led","server":"6c64d3ab.053c2c","client":"","x":570,"y":1240,"wires":[]},{"id":"3ceb8678.12330a","type":"http response","z":"c44afe1f.e0e35","name":"","x":550,"y":1180,"wires":[]},{"id":"6070ccd8.23fd84","type":"http in","z":"c44afe1f.e0e35","name":"","url":"/simpleled","method":"get","swaggerDoc":"","x":120,"y":1180,"wires":[["f0341266.9cbd"]]},{"id":"f0341266.9cbd","type":"template","z":"c44afe1f.e0e35","name":"Simple Web Page","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"<!DOCTYPE HTML>\n<html>\n    <head>\n    <title>simpleled Live Display</title>\n    <script type=\"text/javascript\">\n        var ws;\n        var wsUri = \"ws:\";\n        var loc = window.location;\n        console.log(loc);\n        if (loc.protocol === \"https:\") { wsUri = \"wss:\"; }\n        // This needs to point to the web socket in the Node-RED flow\n        // ... in this case it's ws/simpleled\n        wsUri += \"//\" + loc.host + loc.pathname.replace(\"simpleled\",\"ws/simpleled\");\n\n        function wsConnect() {\n            console.log(\"connect\",wsUri);\n            ws = new WebSocket(wsUri);\n            //var line = \"\";    // either uncomment this for a building list of messages\n            ws.onmessage = function(msg) {\n                var line = \"\";  // or uncomment this to overwrite the existing message\n                // parse the incoming message as a JSON object\n                var data = msg.data;\n                //console.log(data);\n                // build the output from the topic and payload parts of the object\n                line += \"<p>\"+data+\"</p>\";\n                // replace the messages div with the new \"line\"\n                document.getElementById('messages').innerHTML = line;\n                //ws.send(JSON.stringify({data:data}));\n            }\n            ws.onopen = function() {\n                // update the status div with the connection status\n                document.getElementById('status').innerHTML = \"connected\";\n                //ws.send(\"Open for data\");\n                console.log(\"connected\");\n            }\n            ws.onclose = function() {\n                // update the status div with the connection status\n                document.getElementById('status').innerHTML = \"not connected\";\n                // in case of lost connection tries to reconnect every 3 secs\n                setTimeout(wsConnect,3000);\n            }\n        }\n        \n        function doit(m) {\n            if (ws) { ws.send(m); }\n        }\n    </script>\n    </head>\n    <body onload=\"wsConnect();\" onunload=\"ws.disconnect();\">\n        <font face=\"Arial\">\n        <h1>simpleled Live Display</h1>\n        <div id=\"messages\"></div>\n        <button type=\"button\" onclick='doit(\"on\");'>Click to send message</button>\n        <hr/>\n        <div id=\"status\">unknown</div>\n        </font>\n    </body>\n</html>\n","x":350,"y":1180,"wires":[["3ceb8678.12330a"]]},{"id":"3bfe606c.860f4","type":"function","z":"c44afe1f.e0e35","name":"format time nicely","func":"msg.payload = Date(msg.payload).toString();\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":1240,"wires":[["74fd26cf.b83cc8"]]},{"id":"c8e00b14.7fa388","type":"websocket in","z":"c44afe1f.e0e35","name":"","server":"6c64d3ab.053c2c","client":"","x":127.9999885559082,"y":1297.0000114440918,"wires":[["f97098d7.db89f8","82092555.c3ef68","f2706bcb.634708"]]},{"id":"f97098d7.db89f8","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":433.99998474121094,"y":1298.0000114440918,"wires":[]},{"id":"c1dbf511.dec778","type":"trigger","z":"c44afe1f.e0e35","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"250","extend":"false","units":"ms","name":"","x":579.9999771118164,"y":1443.0000019073486,"wires":[["57645ae0.4f4db4","e6122776.4dc1d8"]]},{"id":"57645ae0.4f4db4","type":"function","z":"c44afe1f.e0e35","name":"","func":"if (msg.payload == \"off\")\n\tcontext.state = 0;\nif (msg.payload == \"on\")\n\tcontext.state = 1;\n\nif (context.state == 1)\n{\n\tif (msg.payload == 0)\n\t\treturn msg;\n\telse\n\t\treturn;\n}\nelse\n\treturn;","outputs":1,"x":443,"y":1562.9999961853027,"wires":[["509aeb7c.2ca004"]]},{"id":"509aeb7c.2ca004","type":"delay","z":"c44afe1f.e0e35","name":"","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":753,"y":1556.0000839233398,"wires":[["c1dbf511.dec778"]]},{"id":"f2706bcb.634708","type":"switch","z":"c44afe1f.e0e35","name":"","property":"payload","rules":[{"t":"eq","v":"on"},{"t":"eq","v":"off"}],"checkall":"true","outputs":2,"x":264.0000190734863,"y":1490.9999771118164,"wires":[["57645ae0.4f4db4","c1dbf511.dec778"],["57645ae0.4f4db4"]]},{"id":"e6122776.4dc1d8","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"LED","pin":"12","set":"","level":"0","out":"out","x":829.0000076293945,"y":1449.0000267028809,"wires":[]},{"id":"82092555.c3ef68","type":"delay","z":"c44afe1f.e0e35","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":465.9999809265137,"y":1356.0000305175781,"wires":[["331f16da.c943fa"]]},{"id":"331f16da.c943fa","type":"change","z":"c44afe1f.e0e35","name":"Switch off","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"x":622.9999732971191,"y":1356.0000104904175,"wires":[["f2706bcb.634708"]]},{"id":"1e928f6a.85a0f1","type":"http in","z":"c44afe1f.e0e35","name":"","url":"/chat","method":"post","x":90,"y":1760,"wires":[["92805c58.f3186"]]},{"id":"e819d5f4.6ecff8","type":"http response","z":"c44afe1f.e0e35","name":"","x":611,"y":1759,"wires":[]},{"id":"246728ab.67cb48","type":"template","z":"c44afe1f.e0e35","name":"","field":"payload","fieldType":"msg","syntax":"mustache","template":"\n  <iframe src=\"http://iot.local:1885/dialog\" name=\"iframe_a\" height=\"70%\"></iframe>\n  <form name=\"frm\" action=\"http://iot.local:1885/chat\" method=\"post\">\n  <b>Message from {{payload}}</b><br>\n  <input type=\"text\" name=\"message\" size=\"90%\"/>\n  <input type=\"hidden\" name=\"user\" value=\"{{payload}}\"><br>\n  <button type=\"submit\">Submit</button>\n  </form>\n  \n  <SCRIPT language=\"JavaScript\">\n  window.setInterval(\"reloadIFrame();\", 10000);\n  function reloadIFrame() { window.frames[\"iframe_a\"].location.reload(); }\n  </SCRIPT>\n","x":437,"y":1759,"wires":[["e819d5f4.6ecff8"]]},{"id":"6d3b845c.78a97c","type":"http in","z":"c44afe1f.e0e35","name":"","url":"/dialog","method":"get","x":93,"y":1820,"wires":[["3a1c0e07.e605f2"]]},{"id":"673c3b37.d59124","type":"http response","z":"c44afe1f.e0e35","name":"","x":611,"y":1820,"wires":[]},{"id":"57f6c6bf.7ac938","type":"template","z":"c44afe1f.e0e35","name":"","field":"payload","fieldType":"msg","syntax":"mustache","template":"{{{payload}}}","x":439,"y":1820,"wires":[["673c3b37.d59124"]]},{"id":"92805c58.f3186","type":"function","z":"c44afe1f.e0e35","name":"","func":"  if (msg.req.body[\"user\"] != \"\") {\n    msg.payload = msg.req.body[\"user\"]\n  }\n  if (msg.req.body[\"message\"] != undefined) {\n    context.global.dialog += \n    msg.req.body[\"user\"]+': '+msg.req.body[\"message\"]+\"<BR>\";\n  }\ncontext.global.dialog = context.global.dialog || \"\";\nreturn msg;","outputs":1,"x":260,"y":1759,"wires":[["246728ab.67cb48"]]},{"id":"3a1c0e07.e605f2","type":"function","z":"c44afe1f.e0e35","name":"","func":"msg.payload = context.global.dialog;\nreturn msg;","outputs":1,"x":262,"y":1819,"wires":[["57f6c6bf.7ac938"]]},{"id":"74b8d05f.77d3e","type":"http in","z":"c44afe1f.e0e35","name":"","url":"/login","method":"get","x":91,"y":1664,"wires":[["a9f44920.0e62d8"]]},{"id":"a9f44920.0e62d8","type":"template","z":"c44afe1f.e0e35","name":"","field":"payload","fieldType":"msg","syntax":"mustache","template":"\n  <form action=\"http://iot.local:1885/chat\" method=\"post\">\n  <b>User</b><br> <input type=\"text\" name=\"user\"/><br>\n  <button type=\"submit\">Submit</button>\n  </form>","x":251,"y":1664,"wires":[["1a3e5a8.62545a6"]]},{"id":"1a3e5a8.62545a6","type":"http response","z":"c44afe1f.e0e35","name":"","x":409,"y":1664,"wires":[]},{"id":"9c344d6f.356e5","type":"http in","z":"c44afe1f.e0e35","name":"","url":"/mypage","method":"get","x":806,"y":831.9999389648438,"wires":[["e177286f.2d45c8"]]},{"id":"774833cb.cd1edc","type":"http response","z":"c44afe1f.e0e35","name":"","x":881.9998779296875,"y":1050.9999389648438,"wires":[]},{"id":"afa4f46e.696338","type":"template","z":"c44afe1f.e0e35","name":"template","field":"payload","template":"This is the <b>message</b>: {{payload}}","x":874,"y":977,"wires":[["774833cb.cd1edc"]]},{"id":"e177286f.2d45c8","type":"function","z":"c44afe1f.e0e35","name":"where things happen","func":"if (msg.topic === \"new message\") {\n  context.value = msg.payload;\n  return null;\n} else {\n  msg.payload = context.value || \"never got anything\";\n  return msg;\n}","outputs":1,"x":939,"y":919,"wires":[["afa4f46e.696338"]]},{"id":"8313c666.057488","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"new message","payload":"Have a nice day","payloadType":"string","repeat":"","crontab":"","once":false,"x":1063,"y":771.9999389648438,"wires":[["e177286f.2d45c8"]]},{"id":"fd2ba743.63baa8","type":"comment","z":"c44afe1f.e0e35","name":"觀看溫溼度","info":"","x":90,"y":40,"wires":[]},{"id":"b9dd0d7e.ff9d1","type":"comment","z":"c44afe1f.e0e35","name":"HTTP 聊天室","info":"","x":110,"y":1620,"wires":[]},{"id":"8fb5895b.bf5808","type":"http in","z":"cd10f797.653218","name":"","url":"/looktemphum","method":"get","swaggerDoc":"","x":110,"y":120,"wires":[["5f5e344d.9cd3fc"]]},{"id":"10d02d81.50ef92","type":"comment","z":"cd10f797.653218","name":"網頁及時查看溫溼度","info":"","x":110,"y":60,"wires":[]},{"id":"5f5e344d.9cd3fc","type":"template","z":"cd10f797.653218","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"\n<a href=\"http://iot.local:1885/temphum\"  >\n    \n    \n    <button type=\"button\">\n   \n   查看資料\n    \n    </button>\n    \n    </a>","x":330,"y":120,"wires":[["98c7f24.f024a1"]]},{"id":"7858f439.2b151c","type":"function","z":"cd10f797.653218","name":"感測溫濕度","func":"var sensor = global.get('sensor');\n\nsensor.initialize(11, 4);\nvar readout = sensor.read();\nmsg.topic=\"temp\";\nmsg.payload = { 溫度:readout.temperature.toFixed(2) + \" 度C\" , 濕度:readout.humidity.toFixed(2) + \" %\" };\nconsole.log(msg);\nreturn msg;\n","outputs":1,"noerr":0,"x":390,"y":200,"wires":[["63992159.f0893","993200c2.9efee"]]},{"id":"63992159.f0893","type":"debug","z":"cd10f797.653218","name":"","active":true,"console":"false","complete":"false","x":670,"y":260,"wires":[]},{"id":"1c27785c.81f478","type":"http in","z":"cd10f797.653218","name":"","url":"/temphum","method":"get","swaggerDoc":"","x":110,"y":200,"wires":[["7858f439.2b151c"]]},{"id":"993200c2.9efee","type":"http response","z":"cd10f797.653218","name":"","x":690,"y":200,"wires":[]},{"id":"98c7f24.f024a1","type":"http response","z":"cd10f797.653218","name":"","x":490,"y":120,"wires":[]},{"id":"1336fec6.795f51","type":"comment","z":"c44afe1f.e0e35","name":"FreeBoard 使用教學","info":"範例建置\n1. 擷取開發放資料溫濕度 並呈現圖表化","x":110,"y":1920,"wires":[]},{"id":"ebef6a40.9c3518","type":"openweathermap in","z":"c44afe1f.e0e35","name":"台灣 台中的天氣","lon":"","lat":"","city":"Taichung","country":"TW","language":"en","x":99.99430084228516,"y":1967.7893562316895,"wires":[["edc01e30.45385","7b19af0c.3f8b8"]]},{"id":"edc01e30.45385","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":127.99999237060547,"y":2058.999937057495,"wires":[]},{"id":"7b19af0c.3f8b8","type":"freeboard","z":"c44afe1f.e0e35","name":"freeboard","x":140,"y":2120,"wires":[]},{"id":"5f408454.47e13c","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"7200","crontab":"","once":false,"x":330,"y":1960,"wires":[["98dbcd02.26254"]]},{"id":"98dbcd02.26254","type":"function","z":"c44afe1f.e0e35","name":"資料處理呈現","func":"var sensor = global.get('sensor');\n\nsensor.initialize(11, 4);\nvar readout = sensor.read();\nmsg.topic=\"temp\";\nmsg.payload = { \n    溫度:readout.temperature.toFixed(2) , \n    濕度:readout.humidity.toFixed(2)\n    \n};\nconsole.log(msg);\nreturn msg;\n","outputs":1,"noerr":0,"x":420.9999771118164,"y":2025.9999980926514,"wires":[["2daa93e7.1375ec"]]},{"id":"2daa93e7.1375ec","type":"freeboard","z":"c44afe1f.e0e35","name":"freeboard1","x":535.502815246582,"y":2089.8349118232727,"wires":[]},{"id":"1d725aea.132615","type":"comment","z":"c44afe1f.e0e35","name":"Freeboard室內溫溼度感測器資料呈現","info":"","x":374.4942932128906,"y":1920.0141830444336,"wires":[]},{"id":"c3462a4f.1abd38","type":"comment","z":"c44afe1f.e0e35","name":"MQTT 測試-沒成功","info":"","x":120.51705932617188,"y":300.29275131225586,"wires":[]},{"id":"309c48e2.7bc7d8","type":"comment","z":"c44afe1f.e0e35","name":"節點測試","info":"","x":104.51705169677734,"y":560.6563606262207,"wires":[]},{"id":"f5f1f717.528cc8","type":"comment","z":"c44afe1f.e0e35","name":"網頁觸發LED燈測試","info":"","x":152.51988220214844,"y":1127.3777542114258,"wires":[]},{"id":"fa759972.8c9fe8","type":"comment","z":"c44afe1f.e0e35","name":"lecture 1 Node-red","info":"","x":90,"y":2180,"wires":[]},{"id":"73a4e0e2.d0a1f","type":"openweathermap in","z":"c44afe1f.e0e35","name":"台灣 台中的天氣","lon":"","lat":"","city":"Taichung","country":"TW","language":"en","x":100,"y":2420,"wires":[["c559df48.cad4b"]]},{"id":"cd7a05a4.bd76c8","type":"comment","z":"c44afe1f.e0e35","name":"空氣警示使用twitter","info":"","x":90,"y":2360,"wires":[]},{"id":"c559df48.cad4b","type":"function","z":"c44afe1f.e0e35","name":"判別氣象Twitter","func":"if  (msg.payload.weather === \"Clouds\"){\n    msg.payload = \"今天台中天氣多雲 !\"\n    return msg;\n}\n\nif  (msg.payload.weather === \"Clear\"){\n    msg.payload = \"今天台中天氣晴朗 !\"\n    return msg;\n}\n\n\nif  (msg.payload.weather === \"Rain\"){\n    msg.payload = \"今天台中天氣下雨 !\"\n    return msg;\n}\n\n\n\n\nreturn null;","outputs":1,"noerr":0,"x":280,"y":2420,"wires":[["316676a9.08a09a"]]},{"id":"afc53f1d.9e31b","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"Red_LED","pin":"12","set":"","level":"0","out":"out","x":220,"y":2740,"wires":[]},{"id":"17c682ba.67674d","type":"trigger","z":"c44afe1f.e0e35","op1":"open1234","op2":"1","op1type":"str","op2type":"str","duration":"1","extend":false,"units":"s","reset":"","name":"","x":233.99999237060547,"y":2585.99991607666,"wires":[["afc53f1d.9e31b","fff2996d.351718"]]},{"id":"af69f5a4.81b358","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":127.99999237060547,"y":2651.999917984009,"wires":[]},{"id":"fff2996d.351718","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":380,"y":2700,"wires":[]},{"id":"537b1faf.2850b","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"true","x":410,"y":3520,"wires":[]},{"id":"684c286f.70fbb8","type":"catch","z":"c44afe1f.e0e35","name":"","x":264,"y":3520,"wires":[["537b1faf.2850b"]]},{"id":"37735646.5a3a7a","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"payload","x":603,"y":3360,"wires":[]},{"id":"913eb577.65ed08","type":"comment","z":"c44afe1f.e0e35","name":"firebase.once() example flow","info":"This flow is the same as the\nfirebase.on() example flow, \nexcept that it uses \nfirebase.once(\"value\") to query Firebase\nin the middle of a flow and return a \nresponse synchronously (as opposed to \nstarting a flow whenever the firebase.on()\nevent is triggered).\n\n\nThe inject node begins the flow\nevery 5 seconds and the debug node logs \nthe weather in San Francisco, CA.","x":153.5,"y":3324,"wires":[]},{"id":"8536e55d.abf438","type":"firebase.once","z":"c44afe1f.e0e35","name":"抓取舊金山氣象資料","firebaseconfig":"659f36f.285c0c8","childpath":"myHomeTown","repeatifnull":false,"eventType":"value","queries":[],"x":358,"y":3360,"wires":[["37735646.5a3a7a"]]},{"id":"d3317245.cacc7","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"18000","crontab":"","once":false,"x":160,"y":3360,"wires":[["8536e55d.abf438"]]},{"id":"7c338c66.a757c4","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":158,"y":3466,"wires":[["62836c98.ef5b34"]]},{"id":"62836c98.ef5b34","type":"change","z":"c44afe1f.e0e35","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"sdsssss","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":337,"y":3466,"wires":[["bb9912d2.cbb04"]]},{"id":"ba3d7853.cd9288","type":"comment","z":"c44afe1f.e0e35","name":"firebase modify example flow 寫入失敗","info":"This flow attempts to set data at the \nfirebase location.  \n\nUnfortunately, the open data set firebase\nwe are using has security rules in place\nand we are unauthorized!  \n\nThe set node will fail and generate a \nNode-Red error.  The catch node will \nreceive the message that caused this \nerror and log it to the debug tab.\n\nThis flow is fired once at Deploy time\nand when Node-Red is first started up.\nYou can also click the button on the \ninject node to fire it whenever you like.","x":183.5,"y":3429,"wires":[]},{"id":"b7e4ccc3.049dd","type":"firebase.on","z":"c44afe1f.e0e35","name":"test","firebaseconfig":"659f36f.285c0c8","childpath":"/test","atStart":true,"eventType":"value","queries":[],"x":139,"y":3249,"wires":[["acc35f50.bd195"]]},{"id":"acc35f50.bd195","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"payload","x":490,"y":3280,"wires":[]},{"id":"19f2f248.373e1e","type":"comment","z":"c44afe1f.e0e35","name":"firebase.on() example flow","info":"This flow provides a simple example which\nconnects to the firebase \n[weather](https://publicdata-weather.firebaseio.com/)\n[open data set](https://www.firebase.com/docs/open-data/).\n\nFirebase.on(\"value\") events are fired\nwhenever the weather changes in \nNashville, TN and sent to the debug node.\n抓取資料\n\n\nYou can view the data in the debug tab\nto the right.","x":146,"y":3211,"wires":[]},{"id":"69c16fe6.92d4a","type":"comment","z":"c44afe1f.e0e35","name":"-------------------CLICK ME AND READ THE INFO PANE-------------------","info":"Before clicking the Deploy button,\nYou need to configure login credentials \nfor each node with a Red Triangle (all of \nthe Firebase nodes)\n\nYou can add new credentials by double \nclicking on any firebase node and \nclicking on the pencil icon in the top \nright corner of the edit dialog box. \nOnce you have created a set of credentials\nthey will be available in the drop down\nbox.\n\nFor this example, you will want to set\nFirebase to \"publicdata-weather\" \n(without the quotes) and Auth Type to \nNone.","x":278.5,"y":3151,"wires":[]},{"id":"bb9912d2.cbb04","type":"firebase ondisconnect","z":"c44afe1f.e0e35","name":"","firebaseconfig":"659f36f.285c0c8","childpath":"/msgchildpath","method":"set","value":"msg.payload","priority":"msg.priority","x":800,"y":3420,"wires":[]},{"id":"d0c820a9.112a7","type":"wiotp out","z":"cd10f797.653218","authType":"d","qs":"true","qsDeviceId":"","deviceType":"","deviceId":"","event":"","format":"json","name":"","x":560,"y":4280,"wires":[]},{"id":"83b46515.2ddc68","type":"inject","z":"cd10f797.653218","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"x":160,"y":4280,"wires":[["ec6563f4.193fe"]]},{"id":"ec6563f4.193fe","type":"function","z":"cd10f797.653218","name":"Generate time data","func":"// Convert timestamp in milliseconds to a number in 0-20 range\nmsg.payload = Math.floor((msg.payload/1000))%20;\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":4280,"wires":[["d0c820a9.112a7"]]},{"id":"43586b1.899d794","type":"comment","z":"cd10f797.653218","name":"Simple time inject to Watson IoT","info":"Sends data to Watson IoT Platform every two seconds.\n\nAfter deploying the example, open the Watson IoT\nnode and click the button to take you to the Quickstart\ndashboard for your flow.\n\n","x":210,"y":4240,"wires":[]},{"id":"195ddf06.a6d141","type":"file in","z":"cd10f797.653218","name":"flows_vps.json","filename":"/home/pi/.node-red/flows_iot.json","format":"utf8","x":280,"y":420,"wires":[["730bf147.2990c"]]},{"id":"4657752d.f93b3c","type":"file","z":"cd10f797.653218","name":"","filename":"","appendNewline":false,"createDir":false,"overwriteFile":"true","x":650,"y":420,"wires":[]},{"id":"20a8d1d6.911d6e","type":"inject","z":"cd10f797.653218","name":"","topic":"","payload":"restarted","payloadType":"str","repeat":"","crontab":"","once":true,"x":70,"y":420,"wires":[["195ddf06.a6d141","ca97a510.f13e38"]]},{"id":"730bf147.2990c","type":"function","z":"cd10f797.653218","name":"","func":"msg.filename = \"~/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":510,"y":420,"wires":[["4657752d.f93b3c"]]},{"id":"ca97a510.f13e38","type":"file in","z":"cd10f797.653218","name":"flows_vps_cred.json","filename":"/home/pi/.node-red/flows_iot_cred.json","format":"utf8","x":300,"y":480,"wires":[["d4d04886.d77338"]]},{"id":"e2b8411c.19951","type":"file","z":"cd10f797.653218","name":"","filename":"","appendNewline":false,"createDir":false,"overwriteFile":"true","x":630,"y":480,"wires":[]},{"id":"d4d04886.d77338","type":"function","z":"cd10f797.653218","name":"","func":"msg.filename = \"~/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps_cred.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":510,"y":480,"wires":[["e2b8411c.19951"]]},{"id":"1b2725a8.8a098a","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"payload","x":350,"y":2880,"wires":[]},{"id":"64cf970e.48b1d8","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"GPIO_24","pin":"18","set":"","level":"0","out":"out","x":540,"y":2920,"wires":[]},{"id":"1764eb8c.984024","type":"trigger","z":"c44afe1f.e0e35","op1":"1","op2":"","op1type":"str","op2type":"nul","duration":"250","extend":false,"units":"ms","reset":"","name":"","x":360,"y":2920,"wires":[["64cf970e.48b1d8"]]},{"id":"350ffc14.a2f3b4","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"payload","x":550,"y":2980,"wires":[]},{"id":"614f2f1f.8f5ce","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"GPIO_24","pin":"18","set":"","level":"0","out":"out","x":540,"y":3080,"wires":[]},{"id":"fdebffcd.21081","type":"trigger","z":"c44afe1f.e0e35","op1":"0","op2":"","op1type":"str","op2type":"nul","duration":"250","extend":false,"units":"ms","reset":"","name":"","x":360,"y":3040,"wires":[["614f2f1f.8f5ce"]]},{"id":"1eff6edb.5df751","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":160,"y":2980,"wires":[["1764eb8c.984024"]]},{"id":"9b3c2496.e1af28","type":"inject","z":"c44afe1f.e0e35","name":"","topic":"","payload":"Node-RED","payloadType":"str","repeat":"","crontab":"","once":false,"x":100,"y":2480,"wires":[["65c8f483.319bec"]]},{"id":"5bacfb2a.f32f74","type":"function","z":"c44afe1f.e0e35","name":"Toggle 0/1 on input","func":"\ncontext.state = context.state || 0;\n\n(context.state == 0) ? context.state = 1 : context.state = 0;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"x":690,"y":2580,"wires":[["ff9212a3.6aefb","56139f5d.f525d"]]},{"id":"ff9212a3.6aefb","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"x":930,"y":2580,"wires":[]},{"id":"27dc3509.e6ddfa","type":"inject","z":"c44afe1f.e0e35","name":"tick every 1 sec","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":480,"y":2580,"wires":[["5bacfb2a.f32f74"]]},{"id":"56139f5d.f525d","type":"rpi-gpio out","z":"c44afe1f.e0e35","name":"Red_LED","pin":"18","set":false,"level":"1","out":"out","x":920,"y":2640,"wires":[]},{"id":"533b95b0.b3498c","type":"debug","z":"c44afe1f.e0e35","name":"","active":true,"console":"false","complete":"false","x":790,"y":2780,"wires":[]},{"id":"40968c.730d2974","type":"comment","z":"c44afe1f.e0e35","name":"需補血","info":"之後補上ㄔtwitter 節點\n並寫內容 (參考Evernote)\n","x":57,"y":2539.9998750686646,"wires":[]},{"id":"316676a9.08a09a","type":"twitter out","z":"c44afe1f.e0e35","twitter":"45fe57d9.cc0148","name":"Tweet","x":554.7925872802734,"y":2424.7500228881836,"wires":[]},{"id":"65c8f483.319bec","type":"twitter out","z":"c44afe1f.e0e35","twitter":"45fe57d9.cc0148","name":"Tweet","x":554.7925872802734,"y":2480.7585525512695,"wires":[]},{"id":"3a41441c.8ad24c","type":"twitter in","z":"c44afe1f.e0e35","twitter":"56b038f7.434ba8","tags":"#Nodered","user":"false","name":"","topic":"tweets","inputs":0,"x":403.7841033935547,"y":2761.4118728637695,"wires":[["533b95b0.b3498c"]]},{"id":"a3994338.68ad7","type":"comment","z":"cd10f797.653218","name":"另外種聊天室","info":"","x":119.01421356201172,"y":620.7329711914062,"wires":[]},{"id":"e5eb9b0a.652248","type":"websocket in","z":"cd10f797.653218","name":"","server":"545dbcd.4d90e44","x":114.5170669555664,"y":706.8351821899414,"wires":[["bea2b0eb.c6936"]]},{"id":"bea2b0eb.c6936","type":"function","z":"cd10f797.653218","name":"","func":"delete msg._session;\nreturn msg;\n\n","outputs":1,"x":288.5170669555664,"y":706.8351821899414,"wires":[["ab86d75d.eee1c8"]]},{"id":"ab86d75d.eee1c8","type":"websocket out","z":"cd10f797.653218","name":"","server":"545dbcd.4d90e44","x":469.5170669555664,"y":706.8351821899414,"wires":[]},{"id":"a078b771.084158","type":"http in","z":"cd10f797.653218","name":"","url":"/chatMe","method":"get","swaggerDoc":"","x":132.5170669555664,"y":774.8351821899414,"wires":[["c9f91dcf.7ae93"]]},{"id":"c9f91dcf.7ae93","type":"template","z":"cd10f797.653218","name":"","field":"","fieldType":"msg","syntax":"mustache","template":"<head>\n    \n    <script type=\"text/javascript\">\n  var wsUri1 = \"wss://{{req.headers.host}}/ws/chat\";\n  var ws1 = new WebSocket(wsUri1);\n\n  function createSystemMessage(message) {\n    var message = document.createTextNode(message);\n\n    var messageBox = document.createElement('p');\n    messageBox.className = 'system';\n\n    messageBox.appendChild(message);\n\n    var chat = document.getElementById('chat_box');\n    chat.appendChild(messageBox);\n  }\n\n  function createUserMessage(user, message) {\n    var user = document.createTextNode(user + ': ');\n\n    var userBox = document.createElement('span');\n    userBox.className = 'username';\n    userBox.appendChild(user);\n\n    var message = document.createTextNode(message);\n\n    var messageBox = document.createElement('p');\n    messageBox.appendChild(userBox);\n    messageBox.appendChild(message);\n\n    var chat = document.getElementById('chat_box');\n    chat.appendChild(messageBox);\n  }\n\n  ws1.onopen = function(ev) {\n    createSystemMessage('[Connected]');\n  };\n\n  ws1.onclose = function(ev) {\n    createSystemMessage('[Disconnected]');\n  }\n\n  ws1.onmessage = function(ev) {\n    var payload = JSON.parse(ev.data);\n    createUserMessage(payload.user, payload.message);\n\n    var chat = document.getElementById('chat_box');\n    chat.scrollTop = chat.scrollHeight;\n  }\n\n  function sendMessage() {\n    var user = document.getElementById('user');\n    var message = document.getElementById('message');\n\n    var payload = {\n      message: message.value,\n      user: user.value,\n      ts: (new Date()).getTime()\n    };\n\n    ws1.send(JSON.stringify(payload));\n    message.value = \"\";\n  };\n</script>\n    \n    \n  <meta name=\"viewport\" content=\"width=320, initial-scale=1\">\n  <title>Chat</title>\n</head>\n\n\n\n<body>\n    \n    <style type=\"text/css\">\n  * {\n    font-family: \"Palatino Linotype\", \"Book Antiqua\", Palatino, serif;\n    font-style: italic;\n    font-size: 24px;\n  }\n\n  html, body, #wrapper {\n    margin: 0;\n    padding: 0;\n    height: 100%;\n  }\n\n  #wrapper {\n    background-color: #ecf0f1;\n  }\n\n  #chat_box {\n    box-sizing: border-box;\n    height: 100%;\n    overflow: auto;\n    padding-bottom: 50px;\n  }\n\n  #footer {\n    box-sizing: border-box;\n    position: fixed;\n    bottom: 0;\n    height: 50px;\n    width: 100%;\n    background-color: #2980b9;\n  }\n\n  #footer .content {\n    padding-top: 4px;\n    position: relative;\n  }\n\n  #user { width: 20%; }\n  #message { width: 68%; }\n  #send_btn {\n    width: 10%;\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    margin: 0;\n  }\n\n  .content {\n    width: 70%;\n    margin: 0 auto;\n  }\n\n  input[type=\"text\"],\n  input[type=\"button\"] {\n    border: 0;\n    color: #fff;\n  }\n\n  input[type=\"text\"] {\n    background-color: #146EA8;\n    padding: 3px 10px;\n  }\n\n  input[type=\"button\"] {\n    background-color: #f39c12;\n    border-right: 2px solid #e67e22;\n    border-bottom: 2px solid #e67e22;\n    min-width: 70px;\n    display: inline-block;\n  }\n\n  input[type=\"button\"]:hover {\n    background-color: #e67e22;\n    border-right: 2px solid #f39c12;\n    border-bottom: 2px solid #f39c12;\n    cursor: pointer;\n  }\n\n  .system,\n  .username {\n    color: #aaa;\n    font-style: italic;\n    font-family: monospace;\n    font-size: 16px;\n  }\n\n  @media(max-width: 1000px) {\n    .content { width: 90%; }\n  }\n\n  @media(max-width: 780px) {\n    #footer { height: 91px; }\n    #chat_box { padding-bottom: 91px; }\n\n    #user { width: 100%; }\n    #message { width: 80%; }\n  }\n\n  @media(max-width: 400px) {\n    #footer { height: 135px; }\n    #chat_box { padding-bottom: 135px; }\n\n    #message { width: 100%; }\n    #send_btn {\n      position: relative;\n      margin-top: 3px;\n      width: 100%;\n    }\n  }\n</style>\n    \n    \n    \n  <div id=\"wrapper\">\n    <div id=\"chat_box\" class=\"content\"></div>\n\n    <div id=\"footer\">\n      <div class=\"content\">\n        <input type=\"text\" id=\"user\" placeholder=\"Who are you?\" />\n        <input type=\"text\" id=\"message\" placeholder=\"What do you want to say?\" />\n        <input type=\"button\" id=\"send_btn\" value=\"Send\" onclick=\"sendMessage()\">\n      </div>\n    </div>\n  </div>\n</body>\n\n\n\n\n","x":288.5170669555664,"y":774.8351821899414,"wires":[["9372b0b1.d92db"]]},{"id":"9372b0b1.d92db","type":"http response","z":"cd10f797.653218","name":"","x":431.5170669555664,"y":774.8351821899414,"wires":[]},{"id":"38887e14.b874c2","type":"template","z":"7e05a2af.cde3cc","name":"簡易版wootlalk","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, user-scalable=no\">\n  <link href=\"http://jqmdesigner.appspot.com/gk/lib/jquery.mobile/1.4.5/jquery.mobile-1.4.5.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <!-- Export CSS  -->\n  <style>\n    html{\n      height:100%;\n    }\n    body{\n      background:url('https://static.pexels.com/photos/37403/bora-bora-french-polynesia-sunset-ocean.jpg');\n      background-size:cover;\n      background-attachment: fixed;\n      height:100%;\n    }\n    div[data-role=\"page\"],.ui-content{\n      background:rgba(0,0,0,0);\n    }\n    #footer{\n      box-sizing:border-box;\n      padding:0 10px;\n    }\n    .name{\n      width:100%;\n      text-align:left;\n      font-size:12px;\n      color:#fff;\n      text-shadow:#000 0 0 5px,#000 0 0 2px;\n      margin:10px 0 10px 10px;\n    }\n    .me .name{\n      color:#ff5;\n      text-align:right;\n      margin:10px 15px 10px 0;\n    }\n    .message{\n      text-shadow:none;\n      box-sizing:border-box;\n      width:100%;\n      padding:10px 20px;\n      border-radius:10px;\n      margin-bottom:15px;\n      background:rgba(255,255,255,.6);\n      position:relative;\n      color:#000\n    }\n    .message::before{\n      content:'';\n      width:0;\n      height:0;\n      position:absolute;\n      bottom:-20px;\n      left:15px;\n      border-width:10px 7px;\n      border-style:solid;\n      border-top-color:rgba(255,255,255,.6);\n      border-left-color:rgba(0,0,0,0);\n      border-right-color:rgba(0,0,0,0);\n      border-bottom-color:rgba(0,0,0,0);\n    }\n    .me .message{\n      background:rgba(255,255,150,.6);\n    }\n    .me .message::before{\n      border-top-color:rgba(255,255,150,.6);\n      left:auto;\n      right:15px;\n    }\n  </style>\n  <script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n  <script src=\"//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js\"></script>\n  <!-- Uncomment the following to include cordova in your android project -->\n  <!--<script src=\"http://jqmdesigner.appspot.com/platforms/android/cordova.js\"></script>-->\n  <!-- Export JS  -->\n  <script>\n    (function (document, $) {\n\n      var now = new Date;\n      var genid = \"id_gen_\" + now.getTime(); // 利用時間作為 id 就不容易重複\n\n      $(document).on('pageinit', '#home', function () {\n        loadJS('https://cdn.firebase.com/js/client/1.1.1/firebase.js', function () {\n\n          var myDataRef = new Firebase('https://hellochat-ae7c2.firebaseio.com/');\n\n          $('#messageInput').keypress(function (e) {\n            if (e.keyCode == 13) {\n              var userid = genid;\n              var name = $('#nameInput').val();\n              var text = $('#messageInput').val();\n              myDataRef.push({\n                name: name,\n                text: text,\n                userid: userid // 增加一個 id\n              });\n              $('#messageInput').val('');\n            }\n          });\n          myDataRef.on('child_added', function (snapshot) {\n            var message = snapshot.val();\n            displayChatMessage(message.name, message.text, message.userid);\n          });\n\n          function displayChatMessage(name, text, userid) {\n            $('#messagesDiv').prepend(\n              '<div class=\"' + userid + '\">' +\n              '<div class=\"message\">' + text + '</div>' +\n              '<div class=\"name\">' + name + '</div>' +\n              '</div>'\n            );\n            if (userid == genid) {\n              $('.' + userid).addClass('me'); // id 相同就是自己\n            }\n          };\n\n        });\n      });\n\n\n      function loadJS(src, callback) {\n        var head = document.getElementsByTagName(\"head\")[0],\n          script = document.createElement('script');\n        script.src = src;\n        script.onload = callback;\n        script.onerror = function (e) {\n          alert(\"failed: \" + JSON.stringify(e));\n        };\n        head.appendChild(script);\n        head.removeChild(script);\n      }\n\n    }(document, jQuery));\n  </script>\n  <title>EZo App</title>\n</head>\n\n<body>\n  <!-- Page: home  -->\n  <div id=\"home\" data-role=\"page\">\n    <div data-role=\"header\" data-position=\"fixed\" data-theme=\"b\">\n      <h3>陌生人聊天室</h3>\n    </div>\n    <div role=\"main\" class=\"ui-content\">\n      <div id=\"messagesDiv\"></div>\n    </div>\n    <div id=\"footer\" data-role=\"footer\" data-position=\"fixed\" data-theme=\"b\">\n      <input type=\"text\" id=\"nameInput\" placeholder=\"Name\">\n      <input type=\"text\" id=\"messageInput\" placeholder=\"Message\">\n    </div>\n  </div>\n</body>\n\n</html>\n","x":157.5084991455078,"y":118.89773559570312,"wires":[["d89d2d06.5733c"]]},{"id":"e40a15b4.009c08","type":"http in","z":"7e05a2af.cde3cc","name":"","url":"/hellochat","method":"get","swaggerDoc":"","x":121.50850677490234,"y":62.94886779785156,"wires":[["38887e14.b874c2"]]},{"id":"d89d2d06.5733c","type":"http response","z":"7e05a2af.cde3cc","name":"","x":157.5198974609375,"y":183.91192626953125,"wires":[]},{"id":"62dc889e.3c34f8","type":"template","z":"7e05a2af.cde3cc","name":"書籍","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, user-scalable=no\">\n  <link href=\"http://jqmdesigner.appspot.com/gk/lib/jquery.mobile/1.4.5/jquery.mobile-1.4.5.min.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <!-- Export CSS  -->\n  <style>\n    html,body{\n      width:100%;\n      height:100%;\n      padding:0;\n      margin:0;\n    }\n    .title {\n       white-space: normal !important;\n       position:relative;\n       left:-20px;\n    }\n    .bookicon {\n      width:65px;\n      height:100%;\n    }\n    .ui-header .ui-title, .ui-footer .ui-title {\n        text-overflow: clip;\n        white-space: normal;\n    }\n    #login{\n      height:100%;\n      margin-top:-45px;\n      background:url('https://lh3.googleusercontent.com/-M_VtZf-xLyw/VEiV00BL_cI/AAAAAAAA-dU/5sX8CgUcf3A/s800/books.jpg');\n      background-size:cover;\n      position:relative;\n      text-align:center;\n    }\n    #login::before{\n      content:'';\n      display:inline-block;\n      width:0;\n      height:100%;\n      vertical-align:middle;\n      position:relative;\n      \n    }\n    #login .ui-content{\n      position:relative;\n      text-shadow:none;\n      margin:20px 0;\n      background:rgba(0,0,0,.8);\n      width:240px;\n      height:300px;\n      display:inline-block;\n      vertical-align:middle;\n      border-radius:8px;\n      border:1px solid #000;\n      padding:25px 20px 25px;\n      box-sizing:border-box;\n      box-shadow:#000 0 5px 20px;\n    }\n    #login .ui-content .ui-field-contain{\n     color:#fff; \n     margin-top:-10px;\n    }\n    #loginBtn{\n      margin-top:20px;\n      border-radius:5px;\n    }\n    \n    #books h3{\n      margin-bottom:-10px;\n    }\n    #search{\n      margin:0;\n    }\n  </style>\n  <script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n  <script>\n    $(document).on(\"mobileinit\", function () {\n      $.mobile.autoInitializePage = false;\n      $.mobile.hashListeningEnabled = false;\n    });\n\n    function mobileInitPage() {\n      $.mobile.hashListeningEnabled = true;\n      $.mobile.initializePage();\n    };\n  </script>\n  <script src=\"//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js\"></script>\n  <!-- Uncomment the following to include cordova in your android project -->\n  <!--<script src=\"http://jqmdesigner.appspot.com/platforms/android/cordova.js\"></script>-->\n  <!-- GK Loader use RequireJS to load module -->\n  <script src=\"http://requirejs.org/docs/release/2.1.11/minified/require.js\"></script>\n  <!--Plug in GK-->\n  <script src=\"http://jqmdesigner.appspot.com/components/jquery.gk/jquery.gk.min.js\"></script>\n  <!-- Load GK components -->\n  <script components=\"http://jqmdesigner.appspot.com/components/gk-jquerymobile/listview-li.html,http://jqmdesigner.appspot.com/components/gk-ext/gk-text.html,http://jqmdesigner.appspot.com/components/gk-jquerymobile/listview.html,http://jqmdesigner.appspot.com/components/gk-ext/image.html\"\n  callback=\"mobileInitPage\" src=\"http://jqmdesigner.appspot.com/components/gk-loader/gk-loader.js\"></script>\n  <!-- Export JS  -->\n  <script>\n    var user = {\n      _key: '0901f261-121e-6748-97f5-94deb654f97d',\n      app_code: 'tococo',\n      accName: 'guest',\n      passwd: 'guest'\n    };\n\n    $.getScript(\"http://tococo.coimapi.tw/coim.js\",\n      //$.getScript(\"http://app.ezoui.com/home/demo/coim.js\",\n      function (data, textStatus, jqxhr) {\n        $('#loginBtn').removeClass('ui-disabled');\n      });\n\n    $(document).on(\"pageshow\", function () {\n      $('#loginBtn').on('click', function () {\n        user.accName = $('#accName').val();\n        user.passwd = $('#passwd').val();\n        //login\n        coimlogin(user, function (data) {\n          if (data.errCode == 0) {\n            $.mobile.changePage('#books');\n            api(\"book/book/search\", {\n                \"kw\": \"HTML5\",\n                \"_ps\": 100\n              },\n              function (list) {\n                $('#booklist').show();\n                $('#booklist').gk('model', list);\n              });\n          }\n        });\n      });\n    });\n\n    $(document).on('pageinit', '#books', function () {\n      $('#booklist').hide();\n      //search keyin\n      $('#search').on('keyup', function (e) {\n        var keyword = e.target.value.trim();\n        if (keyword == '') {\n          $('#booklist').gk('model', []);\n        } else {\n          api(\"book/book/search\", {\n              \"kw\": keyword\n            },\n            function (list) {\n              $('#booklist').gk('model', list);\n            });\n        }\n      });\n      //select book\n      $('#booklist').gk('onRow', function (li) {\n        $.mobile.changePage('#bookinfo');\n        $('#bookicon').attr('src', li.find('img').attr('src'));\n        $('#bookname').html(li.find('h2').html());\n        var bkID = li.attr('bkID');\n        console.log('bkID', bkID);\n        api('book/book/info/' + bkID, {}, function (info) {\n          $('#price').html('售價 : ' + info.price);\n          $('#pages').html('頁數 : ' + info.pages);\n          $('#bnAbstract').html('<h2>摘要</h2>' + info.bnAbstract);\n        });\n      });\n\n    });\n\n    function api(name, param, callback) {\n      coim.send(\n        name, param,\n        function (result) {\n          var list = result.value.list;\n          if (list) {\n            var url = 'http://' + user.app_code + '.coimapi.tw/book/auxi/node?_key=' + user._key + '&path=';\n            $.each(list, function (idx, ele) {\n              if (ele.icon != \"undefined\") {\n                ele.icon = url + ele.icon;\n              }\n            });\n            callback(list);\n          } else {\n            callback(result.value);\n          }\n        },\n        function (err) {\n          // do your stuff with err\n        },\n        function () {\n          // do your stuff while token invalid\n        });\n    }\n\n    function coimlogin(user, callback) {\n      coim.setDebug(true);\n      coim.initSDK(user._key, user.app_code);\n      coim.login(\n        \"core/user/login\", {\n          \"accName\": user.accName,\n          \"passwd\": user.passwd\n        }, callback,\n        function (err) {\n          console.log('err:', err);\n          // do your stuff with err\n        });\n    }\n  </script>\n  <title>EZo App</title>\n</head>\n\n<body gk-app>\n  <!-- Page: login  -->\n  <div id=\"login\" data-role=\"page\">\n    <div data-role=\"header\" data-position=\"fixed\" data-theme=\"b\">\n      <h3>線上書籍庫</h3>\n    </div>\n    <div role=\"main\" class=\"ui-content\">\n      <div class=\"ui-field-contain\">\n        <label for=\"accName\">Username</label>\n        <input type=\"text\" name id=\"accName\">\n      </div>\n      <div class=\"ui-field-contain\">\n        <label for=\"passwd\">Password</label>\n        <input type=\"password\" name id=\"passwd\">\n      </div>\n      <a id=\"loginBtn\" class=\"ui-btn ui-btn-b ui-disabled\">Login</a>\n    </div>\n  </div>\n  <!-- Page: books  -->\n  <div id=\"books\" data-role=\"page\">\n    <div data-role=\"header\" data-position=\"fixed\" data-theme=\"b\" data-tap-toggle=\"false\" style=\"background:#000; padding:5px 0 0; box-sizing:border-box;  box-shadow:#000 0 0 10px;\">\n      <h3>15萬本書籍庫</h3>\n      <input type=\"search\" name id=\"search\" value=\"HTML5\" data-mini=\"true\">\n    </div>\n    <div role=\"main\" class=\"ui-content\">\n      <div id=\"data\"></div>\n      <ul data-role=\"listview\" data-inset=\"false\" is=\"listview\" id=\"booklist\">\n        <li is=\"listview-li\" bkid=\"{{bkID}}\" class=\"booklist-li\" style=\"box-shadow:rgba(0,0,0,.5) 0 0px 15px;\">\n          <a href=\"#\">\n            <img src=\"{{icon}}\" style=\"max-height: 10em\" class=\"bookicon\">\n            <h5 style=\"font-size:12px; font-weight:normal; margin-left:-20px;\">{{pubDate}}</h5>\n            <h2 class=\"title\" style=\"font-size:14px;\">{{title}}</h2>\n          </a>\n        </li>\n      </ul>\n    </div>\n  </div>\n  <!-- Page: bookinfo  -->\n  <div id=\"bookinfo\" data-role=\"page\">\n    <div data-role=\"header\" data-position=\"fixed\" data-tap-toggle=\"false\" style=\"background:#000; padding:10px 0 0; box-sizing:border-box; border:none; box-shadow:#000 0 0 10px;\">\n      <h3 id=\"booktitle\" style=\"text-shadow:none; color:#fff; margin-top:-6px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\">書籍詳細資訊</h3>\n      <a class=\"ui-btn ui-btn-left ui-btn-icon-notext ui-icon-arrow-l\" data-rel=\"back\" style=\"margin:5px 0 0 5px; background:none; border:none;\">aa</a>\n    </div>\n    <div role=\"main\" class=\"ui-content\" style=\"padding:0;\">\n      <div class=\"ui-grid-a\" style=\"height:195px; background:url('https://lh3.googleusercontent.com/-M_VtZf-xLyw/VEiV00BL_cI/AAAAAAAA-dU/5sX8CgUcf3A/s800/books.jpg'); padding:20px; box-sizing:boredr-box;\">\n        <div class=\"ui-block-a\" style=\"height:100%\">\n          <img id=\"bookicon\" style=\"width:100%;height:100%; box-shadow:#000 0 2px 10px;\" src=\"http://jqmdesigner.appspot.com/images/image.png\" is=\"image\">\n        </div>\n        <div class=\"ui-block-b\" style=\"height:100%\">\n          <h2 is=\"gk-text\" style=\"margin:10px; font-size:16px; color:#fff; text-shadow:#000 0 0 5px; font-weight:normal;\" id=\"bookname\"></h2>\n          <h2 is=\"gk-text\" style=\"margin:2px 10px; font-size:12px; color:#fff; text-shadow:#000 0 0 5px; font-weight:normal;\" id=\"price\"></h2>\n          <h2 is=\"gk-text\" style=\"margin:2px 10px; font-size:12px; color:#fff; text-shadow:#000 0 0 5px; font-weight:normal;\" id=\"pages\"></h2>\n          <h2 is=\"gk-text\" style=\"margin:2px 10px; font-size:12px; color:#fff; text-shadow:#000 0 0 5px; font-weight:normal;\" id=\"pubDate\"></h2>\n        </div>\n      </div>\n      <div id=\"bnAbstract\" style=\"font-size:15px; line-height:24px; padding:10px 20px 20px; box-shadow:#000 0 0 20px;\"></div>\n    </div>\n  </div>\n</body>\n\n</html>\n","x":112.50851440429688,"y":396.9118957519531,"wires":[["3246d27e.1bca5e"]]},{"id":"62052b18.dc0ae4","type":"http in","z":"7e05a2af.cde3cc","name":"","url":"/test001","method":"get","swaggerDoc":"","x":87.51988220214844,"y":334.94886016845703,"wires":[["62dc889e.3c34f8"]]},{"id":"3246d27e.1bca5e","type":"http response","z":"7e05a2af.cde3cc","name":"","x":108.5198974609375,"y":447.9090576171875,"wires":[]},{"id":"6b1fe5bf.0573ec","type":"comment","z":"c44afe1f.e0e35","name":"簡易網站互動測試","info":"","x":805.5,"y":763,"wires":[]},{"id":"1633e19f.8f26be","type":"http in","z":"7e05a2af.cde3cc","name":"","url":"/firebasetest","method":"get","swaggerDoc":"","x":475.5,"y":99,"wires":[["c5e193b8.38d38","2a6c51b9.ff44ae"]]},{"id":"c5e193b8.38d38","type":"template","z":"7e05a2af.cde3cc","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<!doctype html>\n<html>\n\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n  <title>溫濕度資料存入Firebase</title>\n  <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n  <script src=\"https://webduino.io/components/webduino-js/dist/webduino-all.min.js\"></script>\n  <script src=\"https://blockly.webduino.io/webduino-blockly.js\"></script>\n  <script src=\"https://blockly.webduino.io/lib/firebase.js\"></script>\n  <script src=\"https://blockly.webduino.io/lib/runtime.min.js\"></script>\n  \n  <script>\n    \n    var dht;\n    var myFirebase;\n    \n    function get_time(t) {\n        var varTime = new Date(),\n        varHours = varTime.getHours(),\n        varMinutes = varTime.getMinutes(),\n        varSeconds = varTime.getSeconds();\n        var varNow;\n    if (t == \"hms\") {\n        varNow = varHours + \":\" + varMinutes + \":\" + varSeconds;\n    } else if (t == \"h\") {\n        varNow = varHours;\n    } else if (t == \"m\") {\n        varNow = varMinutes;\n    } else if (t == \"s\") {\n        varNow = varSeconds;\n    }\n    return varNow;\n    }\n    \n    \n    var sensor = global.get('sensor');\n    sensor.initialize(11, 4);\n    var readout = sensor.read();\n    \n    myFirebase = new Firebase(\"https://sensortest-44af2.firebaseio.com\");\n    sensor.read(function(evt){\n    document.getElementById(\"demo-area-01-show\").innerHTML = ([readout.temperature.toFixed(2),' , ',readout.humidity.toFixed(2)].join(''));\n    myFirebase.push({\n      time:get_time(\"hms\"),\n      t:readout.temperature,\n      h:readout.humidity\n    });\n  }, 1000);\n    \n    \n    msg.topic=\"temp\";\n    msg.payload = { 溫度:readout.temperature.toFixed(2) + \" 度C\" , 濕度:readout.humidity.toFixed(2) + \" %\" };\n    \n    \n    \n    \n    console.log(msg);\n    return msg;\n    \n    \n    \n\n</script>\n  \n  <style>\n      \n      #demo-area-01-show { font-size: 60px; pointer-events: auto!important; }\n      \n  </style>\n  \n</head>\n\n<body>\n  <div><span id=\"demo-area-01-show\">123</span></div>\n</body>\n\n\n\n\n\n","x":494.5,"y":197,"wires":[["55af2435.24a17c"]]},{"id":"55af2435.24a17c","type":"http response","z":"7e05a2af.cde3cc","name":"","x":603.5,"y":459,"wires":[]},{"id":"37e63672.fe89da","type":"debug","z":"7e05a2af.cde3cc","name":"","active":true,"console":"false","complete":"false","x":850,"y":362,"wires":[]},{"id":"2a6c51b9.ff44ae","type":"function","z":"7e05a2af.cde3cc","name":"","func":" var dht;\n    var myFirebase;\n    \n    function get_time(t) {\n        var varTime = new Date(),\n        varHours = varTime.getHours(),\n        varMinutes = varTime.getMinutes(),\n        varSeconds = varTime.getSeconds();\n        var varNow;\n    if (t == \"hms\") {\n        varNow = varHours + \":\" + varMinutes + \":\" + varSeconds;\n    } else if (t == \"h\") {\n        varNow = varHours;\n    } else if (t == \"m\") {\n        varNow = varMinutes;\n    } else if (t == \"s\") {\n        varNow = varSeconds;\n    }\n    return varNow;\n    }\n    \n    \n    var sensor = global.get('sensor');\n    sensor.initialize(11, 4);\n    var readout = sensor.read();\n    \n    myFirebase = new Firebase(\"https://sensortest-44af2.firebaseio.com\");\n    sensor.read(function(evt){\n    document.getElementById(\"demo-area-01-show\").innerHTML = ([readout.temperature.toFixed(2),' , ',readout.humidity.toFixed(2)].join(''));\n    myFirebase.push({\n      time:get_time(\"hms\"),\n      t:readout.temperature,\n      h:readout.humidity\n    });\n  }, 1000);\n    \n    \n    msg.topic=\"temp\";\n    msg.payload = { 溫度:readout.temperature.toFixed(2) + \" 度C\" , 濕度:readout.humidity.toFixed(2) + \" %\" };\n    \n    \n    \n    \n    console.log(msg);\n    return msg;","outputs":1,"noerr":0,"x":698,"y":128,"wires":[["37e63672.fe89da"]]}]
Advertisement
Add Comment
Please, Sign In to add comment