Raspberry Pi + Node-RED + DS18B20 防水型温度センサー でメダカ水槽の温度を管理する (2)
“Raspberry Pi + Node-RED + DS18B20 防水型温度センサー でメダカ水槽の温度を管理する (1)”の続きです。
季節が夏に向かうと気になるのが、リビングルームで飼育しているメダカが住んでいる水槽の水温です。我が家はマンション住まいなので、冬場は水槽用のヒーター要らずなのですが、夏場は気を付けていないと水温が高くなってしまいます。
今回は、前回のTALKの後半という位置づけで、“Node-RED”をメインに、水槽の水温管理の仕組みを作っていきます。
< Raspberry PiにNode-REDをインストールする >
先日のTALk (““Raspberry Pi + Node-RED + Google Home で明日の天気を定刻にアナウンス””)をご覧下さい。
< 室温センサー 専用ノードをインストール する>
今回は、”node-red-contrib-ds18b20-sensor” (rpi ds18b20)という温度センサー専用のノードを利用します。
パレットからノードをワークスペースにドラッグ&ドロップして、”inject” – “rpi ds18b20” – “debug”ノードの順に接続して下さい。
“inject”ノードはそのまま、”rpi ds18b20″ノードもそのまま、”debug”ノードは”対象”欄を”msgオブジェクト全体”に設定し、デプロイ後、”inject”ノードを実行して下さい。
今回は、“Aideepen 5個セット DS18B20 防水型温度センサ サーミスタ温度コントローラ 長さ1M プローブ付き” (DS18B20 防水型温度センサー)を1個しか接続していませんが、複数の”DS18B20 防水型温度センサー”を接続する場合は、”rpi ds18b20″ノードの”Topic”欄に識別名を入力しておくと便利かと思います。
デバック画面に結果が表示されたはずです。”msg.payload”の値が水温です。
< 室内用の温度センサーをセットアップする >
・今回は、”node-red-contrib-dht-sensor“という温度センサー専用のノードを利用します。
・DHT11 温度センサー モジュール (DHT11 温度センサー)と”Node-RED”の”node-red-contrib-dht-sensor”ノードのセットアップについては、先日のTALk (“Raspberry Pi + Node-RED + ダッシュボード でお部屋の温度と湿度を可視化“)をご覧下さい。
DHT11 温度センサーとラズパイのGPIOピンヘッドとの関係は、+をpin #01 (DC Power 3.3V)、outをpin #11 (GPIO17)、-をpin #09 (Ground)です。
“node-red-contrib-dht-sensor”ノード (rpi-dht22)のプロパティ画面はこんな感じです。
先程のフローに、下図のように”rpi-dht22″ノードを追加し、デプロイ後、実行してみましょう。
デバッグ画面に、水槽の水温と室内の温湿度が表示されたはずです。
< Node-REDのダッシュボードで温湿度を可視化する >
“Node-RED”では、”node-red-dashboard“というノードでダッシュボードと呼ばれるGUIな画面がデザインできます。
・”node-red-dashboard”のインストール手順ならびに基本的な使い方については、以前のTALK (“Raspberry Pi + Node-RED + ダッシュボード でお部屋の温度と湿度を可視化“)をご覧下さい。
先程作成したフローに追加したのは赤枠の部分です。
“水温センサー” (“rpi-dht22″ノード)は、データが”msg.payload”に格納されているので、”gauge”ノードに直接接続しました。
“温度センサー” (“rpi ds18b20″ノード)は、データが”msg.payload” (温度)と”msg.humidity” (湿度)に分かれているので、”gauge”ノードの手間に”change”ノードを配置して、それぞれのデータを振り分けています。
ダッシュボードを実行してみると、こんな感じの画面が表示されます。※ グラフを追加したバージョンです。
< 水槽の室温を外出先でも確認できるようにする >
同じ建屋内であれば、”Node-RED”のダッシュボードにアクセスすることが可能ですが、外出先からアクセスとなると、クラウドサービスに頼ることになり、ハードルが高くなってしまいます。それに、セキュリティ面も心配ですしね。そうなると、しきい値を設けてメールやLINE等で通知という方法もありますが、一旦しきい値を超えてしまうと、通知の頻度が上がってしまうのも厄介ですよね。
幸い、我が家はアップルユーザなので、馴染みのある”HomeKit“を活用しようと思います。
ラズパイで”HomeKit”対応と言えば”Homebridge“が定番ですが、”Node-RED”と同じ”Node.js“をプラットフォームとして利用しているので、今後のバージョンアップなどで支障が生じるリスクがあります。
そこで、今回は、”Node-RED”の”node-red-contrib-homekit-bridged“ノードを利用することにしました。
完成したフローの全体図です。赤枠が先程作成したフローに追加あるいは変更を加えた部分です。
一番右に配置した”homekit”ノードのプロパティ画面です。
“Service”欄では、デバイスの種類を選択します。温度を測定するデバイスは”TemperatureSensor”、湿度を測定するデバイスは”HumiditySensor”を選択します。
“Bridge”欄では、ひとつの”Pin Code”で登録するデバイスのグループを選択します。グループは、鉛筆アイコンをクリックすると表示される”homekit-bridge ノードを編集”画面で設定します。今回は、”Aquarium”という名前で、”Pin Code”が”111-11-111″のグループを作成しました。
“Name”欄は、”ホーム”アプリ画面に表示するデバイス名です。
これらの情報は、後ほど”ホーム”アプリにアクセサリを登録する際に必要になりますのでメモって下さい。
“homekit”ノードの設定周りで、一番難解だったのが、センサーで計測した値をどうやって”homekit”ノードに渡すのか?というところです。普通にアプローチすると、デバッグ画面に”Invalid payload type: number”等のエラーが表示されてしまいます。
その答えは、”NRCHKB / node-red-contrib-homekit-bridged“の”wiki page“に記載されていました。
このページには、デバイス毎の定義サンプルが掲載されていて、例えば、
温度センサー (Temperature Sensor)であれば”CurrentTemperature”、
湿度センサー (Humidity Sensor)であれば”CurrentRelativeHumidity”という特性で測定値を渡すことを説明しています。
これらの説明をもとに、”homekit”ノードの前方に置いた”change”ノードのプロパティ画面で値の移動を設定します。
温度センサー (Temperature Sensor)であれば、
湿度センサー (Humidity Sensor)であれば、
となります。
“homekit”ノードの賢いところは、”msg.payload”に格納された測定値が文字であろうと数字であろうと、自分に都合が良い”Number”型に変換してくれるようです。
最後に、先頭の”inject”ノードのプロパティ画面で、フローを定期的に実行するインターバルを設定し、デプロイすれば”Node-RED”上の作業は全て完了となります。※ 水槽や室内の温度は短時間に大きく変化しないので、30分間隔ぐらいに設定すれば十分かと思います。
< iOSデバイスの”ホーム”アプリに登録します >
“Node-RED”のフローが完成したので、iPhoneの”ホーム”アプリに、温度センサー (水槽と室内)と湿度センサー (室内)を追加しましょう。
右上の+アイコンをタップして、”アクセサリを追加”を実行します。
次の画面で、”コードがないか、スキャンできません”ボタンをタップ。
左上に、”homekit”ノードで設定したBridge名が表示されるのでタップします。
次の画面に移ると、下図のような確認メッセージが表示されるので、”そのまま追加”をタップ。
“homekit”ノードで設定した8桁の”Pin Code”を入力します。
今回は3種類のアクセサリを登録するので、”次へ”をタップしてアクセサリの内容を順番に設定して下さい。
iPhoneの”ホーム”アプリ画面に、温度センサー (水槽と室内)と湿度センサー (室内)が登録されました。
これで、外出先でも、水槽とお部屋のコンディションをいつでもチェックできるようになりました。
このすぐ下にメダカ水槽があります。
窓のサッシにラズパイを取り付ける際に使ったのは“コクヨ ひっつき虫 はってはがせる 粘着剤 タ-380N” (“コクヨのひっつき虫はちょっとした修繕や地震対策になかなか重宝する便利グッズ“)です。我が家では、ひっつき虫は必需品になっています。
p.s>
今回はリビングルームのメダカ水槽の近くに設置するので”Raspberry Pi Zero W“で本番稼働かなと思い、ラズパイに組み込んでみたのですが、ラズパイの基本機能は問題なく稼働するものの、”Node-RED”に関してはグラフィック周りのパワー不足なのか起動すらしてくれませんでした。”Node-RED”をプラットフォームにしたサービスは、”Raspberry Pi 3 model B“以上のモデルじゃないとキツイようです。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。