モルモットが快適に過ごすスマートホームを作っています。寒くなったら自動的にホットカーペットをONにします。前回はブラウザで動かしていましたが、実用的にするためobnizのサーバーレスイベントを利用します。
モルモットの生活が常に快適に
18℃を下回ると、モルモットのケージの下のホットカーペットが、自動でONになります。
人間よりモルモットを丁重に扱っている状態に、妻はあきれていました。
この仕組みはブラウザのJavaScriptで動作していましたが、それではPCを閉じたら動かないため、obnizのクラウド上で動かします。
調べると、obnizクラウドには、登録したイベントを自動的に実行する「サーバーレスイベント」があるようです。
モルモットスマートホーム全体図
前回パソコンだったものが、obnizクラウドに差し替わりました。
その他、μPRISMセンサーやmerossなどは前回の記事に掲載しています。
サーバーレスイベントは、10分おきで繰り返しに設定しました。
パソコンなしで、10分おきに温度をチェックして、寒ければホットカーペットのスイッチがONになり、暑ければOFFになります。
なお、持っているのが「obniz Board 1Y」なら、タイマーではなく公式ブログに書かれている方法で設定したほうが省電力です。
実行しているコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<html> <head> <meta charset="utf-8"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.11.0/obniz.js" crossorigin="anonymous"></script> </head> <body> <script> const obniz = new Obniz("obniz-ID"); const ifttt_secret_key = "IFTTT-ID"; let isWrit = false; obniz.onconnect = async () => { await obniz.ble.initWait(); const U_PRISM = Obniz.getPartsClass("uPRISM"); obniz.ble.scan.onfind = async (peripheral) => { if (U_PRISM.isDevice(peripheral)) { console.log("μPRISM発見"); const device = new U_PRISM(peripheral); device.ondisconnect = (reason) => { console.log(reason) } await device.connectWait(); console.log("μPRISM接続完了"); device.onNotify = async (r) => { const temp = r.temperature.toFixed(1); const humid = r.humidity.toFixed(1); postData = (url, data) => { fetch( url, { method: "POST", mode: "no-cors", body: data } ) .then(() => console.log(url + "にPOST成功")) .catch(error => console.log(error)); }; if(r.temperature < 18){ await postData('https://maker.ifttt.com/trigger/run_meross/with/key/' + ifttt_secret_key, ""); }else if(r.temperature > 20){ await postData('https://maker.ifttt.com/trigger/stop_meross/with/key/' + ifttt_secret_key, ""); } await obniz.wait(1000); if (typeof done === "function") { done(); } }; await device.startNotifyWait(); } }; await obniz.ble.scan.startWait(); } </script> </body> </html> |
「await」で待たないと、μPRISMセンサーから温度を取得している間に、イベントが終了してしまいます。
μPRISMとobnizを組み合わせる人は少ないと思いますが・・・参考まで。
次回はスプレッドシートに温度を自動で記述していきます。