自宅でモルモットの温度管理にIoTを導入しています。しかし、目の前のホットカーペットの電源を入れるのに、アメリカと中国を経由する地球規模の仕組みは必要なのでしょうか?簡略化して再構築します。
今までのモルモット・スマートホーム
Webサービス連携の「IFTTT」とスマートプラグ「Meross」を使って、モルモット・スマートホームを運用していました。
室温が下がったら、ホットカーペットの電源を入れる。
ただそれだけの仕組みなのですが、アメリカと中国を経由しているようです。正確にはどこのサーバーを経由しているのか分かりません。
リレー回路でシンプルにする
モルモット・スマートホームを見直します。
ホットカーペットの電源をリレー回路でONにすることにしました。
室温に応じて電源のON/OFFを切り替えるくらいであれば、本来はインターネット不要です。
ただ、開発速度や管理のしやすさを考え、obnizは利用し続けることにします。
加湿器を追加する
簡略化したら、設備追加したくなりました。湿度も管理できるように、加湿器を接続できるにします。
ホットカーペットと加湿器、2つの家電をリレーで制御します。写真では動作テストのため、スマホのブラウザで家電を操作しています。
実際は温度センサーを取り付けて、家電の電源管理を自動化します。
温度・湿度センサー取り付け
温度・湿度センサー「SHT20」を使うことにしました。
2つのリレーとSHT20、obnizへの接続は下記です。
IO 0・・・リレー1と2 GND
IO 1・・・リレー1と2 VCC
IO 2・・・リレー1 SIG(ホットカーペットのON/OFF)
IO 3・・・リレー2 SIG(加湿器のON/OFF)
IO 4・・・SHT20 GND
IO 5・・・SHT20 VCC
IO 6・・・SHT20 SDA
IO 7・・・SHT20 SCL
モルモット・スマートホームのコード
配線が完了したら、HTMLのJavaScriptで、スマートホームを運用します。ラズパイでブラウザを立ち上げっぱなしで運用している状態です。
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>モルモットスマートホーム2.0</title> <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> <script src="hue-weather.js"></script> </head> <body> <div id="obniz-debug"></div> <main> <h1>モルモットスマートホーム</h1> </main> <script> const obniz = new Obniz("obnizID"); let isIO2 = false, isIO3 = false, nowM, oldM, temp, humid; obniz.onconnect = async () => { const sensor = obniz.wired("SHT20", {vcc: 5, sda:6, scl:7, gnd:4}); obniz.io0.output(false); obniz.io1.output(true); obniz.io2.output(false); obniz.io3.output(false); const timer = async () => { oldM = nowM; nowM = new Date().getMinutes() if(nowM % 30 === 0 && oldM % 30 !== 0){ //30分毎で処理 let t = await sensor.getTempWait().catch(e => { return temp; //前回の値代入 }); let h = await sensor.getHumidWait().catch(e => { return humid; //前回の値代入 }); //不正値の場合前回の値代入 if(t === -2){ t = temp; } if(h === -2){ h = humid; } temp = Math.round(t * 10) / 10; humid = Math.round(h * 10) / 10; console.log(temp + "℃", humid +"%"); checkData(temp, humid); } }; const checkData = async (t, h) => { // ホットカーペット if(t < 18 && !isIO2){ obniz.io2.output(true); isIO2 = true; }else if(t > 20 && isIO2){ obniz.io2.output(false); isIO2 = false; } // 加湿器 if(h < 40 && !isIO3){ obniz.io3.output(true); isIO3 = true; }else if(h > 45 && isIO3){ obniz.io3.output(false); isIO3 = false; } }; setInterval(timer, 30000); //30秒毎 }; </script> </body> </html> |
18℃未満でホットカーペットの電源ON。
湿度40%未満で加湿器ON。
これで、アメリカや中国のサーバーがダウンしても、モルモットは快適な生活が送れるでしょう。