SonoffとESP EasyでHomekit対応格安温度・湿度センサーをつくる

さて、以前にHomebrideでマイナス表示をするための設定を書きました。

gentoolinux.hatenablog.com

よく考えたら、この記事の元になる気温を取得するデバイスを紹介していなかったことに気づきました。

制作過程を含めて紹介します。

 

まず、Amazonで次の品物を入手しました。

 おなじみのSonoffです。

今回はリレーとして使うわけではありません。もったいないかもしれませんが、ケースもACアダプタも別途用意する必要がないため、かえって割安になると判断しました。

 

 温度湿度センサーのDHT22です。安い割に精度がそこそこ良いそうです。

 

f:id:naoyukinagano:20171214225017j:plain

屋内用と屋外用に2セット購入。

(右上のUSBタイプLEDむき出しのライトはオマケ)

他に、ジャンパー線や10kΩ程度の抵抗、電源ケーブルとコンセントが必要ですが、ありもので済ませました。

 

まずはピンヘッダーを半田付けし、ESP Easyを書き込みます。

詳しくは以前の記事を

gentoolinux.hatenablog.com

このときは、リレーを使って照明をON/OFFさせていましたが、今回はあの、余っているGPIOピンを使います。

使うのは、5V、GND、GPIO14の3つ。

f:id:naoyukinagano:20171214225801j:plain

これは、赤が5V-VCC、グレーがGND、青がGPIO-14です。

 

DHT-22側に5V-VCCとDATA端子の間に10kΩのプルアップ抵抗をつけておきます。

f:id:naoyukinagano:20171214230112j:plain空中半田なので、かなり汚いですね。

こんなことにならないよう、基板が付いたDHT-22の購入をお勧めします。

 

たとえばコレでしょうか?

 

で、コンパクトになるように、ケースの横にネジ止めします。

使ったネジは余っていた何かの残りのネジです。

f:id:naoyukinagano:20171214230507j:plain

あまり長いとケースを突き抜けて基板を痛めるし、短いと届きません。

 

電源ケーブルなどを接続して完成したのがこれ。

f:id:naoyukinagano:20171214230605j:plain

 

では、ESP Easyの設定です。IPアドレス等は設定されている前提です。

まず、Hardwareページです。

f:id:naoyukinagano:20171214231702p:plain

ほぼDefaultのままですが、WiFi Status Led:をGPIO-13に割り当てて、LEDがWiFiのステイタスを表示するようにしました。

 

続いてDevicesページのTask1をEditボタンを押してDeviceを定義します。

f:id:naoyukinagano:20171214231905p:plain

Device:のドロップダウンから、"Temperature & Humidity - DHT"を選択すると、設定項目がずらっと出てきます。

Nameにはわかりやすい名前を、Deley:は60のままいじらず、IDX / Var:は適当に他とかぶらないように(といっても、MQTTプロトコルで利用する数値なので、HTTPで使う場合は関係ありません。)、1st GPIOはDHT-22を接続している"GPIO-14"を選択、DHT Type:は接続しているDHT-22を、Send Data:はHTTPで使うならチェックの有無どちらでも良い気がします。

下段のFormula temperature:は、気温の補正式を入れます。センサーから読み取った値が”%value%”という変数に入っています。これに対し、四則演算などで補正して出力することが可能です。私の環境では、ベランダに置いているのですが、室内の熱が伝わるせいで、アメダスの気温よりも高めに表示されるため、7度低く出力されるように”%value%-7”を入力しています。Decimals:は小数点第何位まで出力するかです。

Formula humidity:は湿度の補正式ですが、特に補正していません。

Value Name 1:は、JSON形式で出力する際の左辺の文字列です。デフォルトでは"Temperature"と、先頭が大文字ですが、homebridgeのHTTP気温センサプラグインが"temperature"と、小文字で認識するようなので、"temperature"と、小文字に変更しています。

Value Name 2:も同様に"humidity"と小文字にしています。

 

Submitで確定しCloseでDevicesに戻り、Task 2をEditします。

f:id:naoyukinagano:20171214235946p:plain

Task2は、Sonoffについているスイッチを、リブートスイッチにするというもので、たいして重要ではありません。

上記の通り設定してSubmitしCloseで閉じます。

 

できあがったDevices画面がコチラ。

f:id:naoyukinagano:20171215000119p:plain

右側にtemperature:とhumidity:の値が表示されていれば成功です!

 

あとは、リブートスイッチで再起動するように、Rulesに以下の記述をします。

on rebootswitch#Switch do
reboot
endon

 

これでSonoffとESP Easyによる温湿度センサーは完成です。

この気温と湿度をiOSのHomekit(ホームアプリ)に表示させるべく、homebridgeにプラグインを組み込んで設定します。

使ったプラグインは、"homebridge-http-temperature-humidity"です。

www.npmjs.com

まずはインストール。

gentoo # npm install -g homebridge-http-temperature-humidity 

で、config.jsonに設定を書きます。

ESP EasyにはDevicesのTask番号を指定することで、その値をJSON形式で返してくれる機能があります。これを利用します。(urlのxとyは環境に合わせて変えましょう。)

{
"accessory": "HttpTemphum",
"name": "Outside Temperature",
"url": "http://192.168.x.y/json?tasknr=1"
}

 accessoryの値が" homebridge-http-temperature-humidity"ではなく"HttpTemphum"ということに注意します。

ちなみにこのhttp://192.168.x.y/json?tasknr=1にブラウザからアクセスすると

TaskName: "OutsideTemp"
temperature: -3.8
humidity: 62.5 

 とこんな風に返ってきます。この値をhomebridgeが読み取って、iOSのHomekitに返しているようです。

homebridgeを再起動してiOSのHomekitを見てみると・・・。

f:id:naoyukinagano:20171215001800j:plain

気温と湿度が表示されました。ちなみに、小数点は四捨五入するようです。