Ruby初心者がラズパイに書く換気扇制御プログラム -出口編-

前回ラズパイについたボタンを押して換気扇をOFF/ONする所までは作成しました。今回は簡単な温度制御を入れます。

気温をWebからruby+JSONで取る

無料の天気(含む気温)データを提供してくれるOpenWeatherMap current weather and forecast- OpenWeatherMapを利用しました。Webでもデータが見れますが、会員登録をするとAPIによる温度取得ができます。無料のfreeプランでは1時間に60回までの取得が可能。

apiの出力結果はJSONで受け取れるようなので、以下のページを参考に取得してみます。

当初q=sapporoとだけ指定していたら何度やってもヘルシンキの温度がくるので悩みました。正しくはq=sapporo.jpとやらないと認識されないので注意が必要。

openweather.rb

無事に取得できました。

ただOpenweatherの提供データは国内複数の「現在の気温」データを平均しても1.5℃程低いですね。もうちょっと観察して必要時はかさ増しして利用しようかと思います。

あとはこれを/dev/shm/outer_temp.datというファイルに書き出し。

排他制御を必要としないならFile.writeメソッドでズバッと書けてしまうそうです。便利です。

スクリプト完成

上記のスクリプトとCで書いてあるDHT11tempをcronへ登録します。

dht11tempが7分おきなのは10分ごとに動く他のプログラムとコンフリクトしないようにという事で適当に素数・・・

あとはこの定期的に更新される室内温度、外気温度を比較してファンの動作を決定させます。前回のスクリプトから追加したのが下記。

/usr/sbin/IO/2Froomfan_manage.rb

68行目で呼び出されるtemp_compメソッドでは2つの温度を読みだした後、「室温が25℃以上かつ、内外の温度差が3℃以上」の場合にフラグファイルを”ON”にする様に値を返します。読み込んだファイルは文字列として扱われる為、四則演算する場合はto_fメソッドで数値として扱うよう変換が必要。to_iにすると整数でto_fが浮動小数点。
タクトスイッチによる手動操作によってONにされている時(switch_st = 1)はたとえ室温が下がってもフラグファイルを書き換えない様にしてあります。手動でOFFにしても外の条件が整うとONになっちゃうのは今後の課題という事で。

なんだか最近めっきり涼しくなった気もしますが、とりあえずは換気扇の自動制御は完了です。あとはちゃんと冷えて欲しいところ。

コメントを残す