2012年10月22日月曜日

Raspberry Pi

サーバーに使っているMacMiniを置き換えるためにRSコンポーネンツでRaspberry Piを注文してみました。
ケース込みで$49.49です。電源はiPhone用のACアダプタを別途用意しようと思います。

(Wikipediaより)

5week待ちですが一時期の20week待ちとかに比べると供給が安定してきてますね。

2012年10月19日金曜日

アメッシュからの雨指数

アメッシュのgifデータから計算した雨指数のグラフを取りました。
スケールを合わせるために雨センサーの値は1/2にアメッシュの雨指数は1/4にしてグラフに表示しています。


だいたい、昨晩の雨の傾向が出ているかと思います。
雨センサーの値は日射がないと雨が上がっても高いままですが、屋外南と屋外北の温度センサーの差分で日射があるのかどうかがわかるのでうまく判断できそうです。

アメッシュの値は、雨の量と距離を係数に値を出していますが、リニアに反映してしまうと値のブレが大きすぎるので雨レベルの累乗と距離の累乗から計算した値をうまく感覚的にリニアに感じる値になるように平方根をとって調整しています。

これらの値を使って指定された値を超えると窓を閉めるようにプログラムを変更しました。

2012年10月18日木曜日

雨センサー修理

先日異常値を示していた屋外南面の気温センサーを修理しました。
緑色の線です。ちゃんと普通の値を示すようになりました。
原因はセンサー部分の半田付けをした時に基板のB面のVccの線が外れてしまっていたようです。
温度が高くなると膨張して接触不良を起こしていたようです。

今朝から丁度雨が降っていて雨センサーとアメッシュから計算している雨指数の値の調整ができそうです。


雨センサーの値は乾燥時で6。雨で濡れている状態で50~60を示しています。
これはこんなものでしょう。


アメッシュから計算している雨指数ですが、こちらは要調整ですね。
オレンジ色の線なのですが、値が0~4000位を暴れています。
gifファイルの色から雨の強度をだして、自宅の位置からの距離を係数にして半径5km以内を重み付けしながら計算していますが、もう少し計算式を試行錯誤する必要がありそうです。
弱い雨でも近い場合はある程度値が出てくれないと判断できないし、遠くで強い雨が発生しているときはやはりある程度の値になるようにバランスをとらないと実用になりません。 
計算式を変更して今晩一晩、様子を見てみます。


2012年10月13日土曜日

外部温度センサー異常

先週修理した雨センサー+南側の外気温センサーですが、どうも外気温センサーがおかしな値を示しています。
5分おきにlogをとってグラフにしてみました。



直射日光が当たるので60度近くまで上がるのは、まぁいいのですが、たまに電圧がドロップするのか異常に低い値を出すことがあります。
この温度センサーは温度=(電圧(mV) - 500)/10という式で値をとっているのですが、150mV程度になることが度々あるようです。
もしかするとどこか断線していて周辺の温度で収縮して接触不良が起きているのかもしれません。
雨センサーの動作確認ができたらもう一度修理してみます。

東京アメッシュ

センサーだけに頼るのではなく、うちの近くに雨が降ってきたことを検知して窓を閉めるために東京アメッシュのデータを利用できないか調べてみました。
SafariのDebug機能を使ってアメッシュのページ構造を見てみます。

一番下に地形図レイヤー(http://tokyo-ame.jwa.or.jp/map/map000.jpg)が配置されて、その上に降水量を表すレイヤー(http://tokyo-ame.jwa.or.jp/mesh/000/201210130020.gif)、さらにその上に行政区画のレイヤー(http://tokyo-ame.jwa.or.jp/map/msk000.png)が載っている構造のようです。
なんでjpg,gif,pngの3種類も使っているのか判りませんが、真ん中のgifのレイヤーのファイルを取得すれば降雨情報が取れそうです。

gifファイルのファイル名は現在時刻から5分刻みの直前の時間を求めればいけそうです。

とりあえず、行政区画のレイヤーをgoogle mapと比べながら左上と右下の緯度経度座標を調べてみます。
socketでhttpのportを開いてgifファイルを取得し、libgifを使ってメモリ上に展開します。
そのデータを使って、うちの座標から位置を割り出してそこを中心に5km以内の雨の強さとうちからの距離で重み付けして降雨指数を作ってみました。

ここまでテストプログラムを組んだのですが、一向に雨が振りません。この間まで毎日夕方に降っていたのに。
東京アメッシュのデータは雨が無いと透明レイヤーのみなのでよく判りません。
多分、ちゃんと動いていそうなのですが.....
うまく動いていることが確認できたら定期的に監視するようにしてMacMiniに組み込んでみます。
今週中に雨が振って動作確認できるか?


2012年10月7日日曜日

降雨センサーの修理

設置していた降雨センサーがおかしくなってきたので修理しました。

今までのセンサーの回路は流用したセンサー基板にADの入力最大電圧1.2Vに収めるために3.3Vを分圧する回路を追加した下記のような回路でした。

この回路だと、乾燥状態でAD-INが1.1Vくらい、雨が降ると徐々に電圧が低下して0Vに近くなるというものです。
ADの読み値は0Vで0、1.2Vで1023という10bitAD なので、数値を変換して(1023-AD)/103として0〜99の値で雨の状態を返していました。数値が20以下だと大体乾燥している状態でした。
ところがこの状態だとVCCの電圧のブレや配線の電圧降下でばらついてしまいます。
さらに、先日の台風の時の雨が染みこんでしまったのか、晴れていても80くらいの値を指している状態が続いていました。

今回は、センサー部分の極性を逆にして、乾燥状態で0V、雨が降ると電圧が1.1Vに近くなる回路に変えました。


回路部分をコーキングして設置しなおしてみます。
これでも雨が染みこんで値がおかしくなるようなら、中継基板を途中につけて抵抗等の回路部分を屋内側に置くように変えるつもりです。


2012年10月6日土曜日

スケジュールによる動作

ControlDaemonにスケジュール動作の機能を追加しました。
設定ファイルに下記のような記述をすることで指定された時間にcommandを実行します。


event:
#month  day             time            condition       command
*       weekday2        08:00           *               east_shutter_open
*       *               sunset-00:30    *               east_shutter_close

*       *               08:00           *               center_shutter_open
*       *               sunset-00:30    *               center_shutter_close

*       *               08:00           *               west_shutter_open
*       *               sunset-00:30    *               west_shutter_close

11-5    weekday1        06:00           cold1           floor_heater_dining_on
11-5    weekday1        06:30           cold2           aircon_heater_20
11-5    weekday1        07:30           *               floor_heater_dining_off
11-5    weekday1        08:00           *               aircon_stop

例えばcenter_shutter_openの行は毎月、毎日、朝08:00に実行することを表しています。
center_shutter_closeの行のtimeの項目のsunset-00:30は日没時間の30分前に実行することを表しています。
monthに11-5を指定されているところは11月〜5月の間だけ実行されます。
dayにweekday1と指定されているところは下記の設定のカレンダーによって指定された曜日のみ実行されますが、holidayで指定された日は休日なので実行されないようになっています。

# week holiday
weekday:
weekday1 mon tue wed thu fri
weekday2 wed thu fri

holiday:
1/1 2/11 4/29 5/3 5/4 5/5 11/3 11/23 12/23 # month/day
1/2mon 7/3mon 9/3mon 10/2mon # month/week dayofweek
2012/3/20 2012/9/22 # year/month/day

conditionの項目は下記の設定項目で指定された条件を満たしているときだけ実行されます。


condition:
cold1   internal_2f_temp < 100 # 10.0
cold2   internal_2f_temp < 150 # 15.0
hot1    internal_2f_temp > 280 # 28.0


floor_heater_dining_onの行は11月〜5月の月曜日〜金曜日で休日でない日の朝06:00に2Fリビングの室内の温度センサーが10°Cよりも下回っていたら実行されます。
今のところ順調に動作していそうです。

XBeeの制御サーバーの構造

XBeeを制御しているMacMiniのサーバーdaemonの機能を整理しました。
下記のような構成になっていて、まずはControlDaemonの方を作っています。
EventDaemonはControlDaemonのほうが一段落したらとりかかるつもりです。
現状はEventDaemonからの接続portに対してtelnetでコマンドを投げて動作確認しています。



ControlDaemonの仕事はsocketのportを監視してコマンドを解釈、それをXbeeのコマンドやiRemoconのコマンドに置き換えて送信、応答を確認してNGの場合はretryをすること。
XBeeモジュールを定期的にWatchして異常が起きた時の対応、温度センサーや降雨センサーの状態を監視して、指定されたしきい値を超えた時のコマンド発行。
指定された時間が来た時にコマンドを発行することです。

EventDaemonは外部のWebPageの監視をして、コマンドを発行する担当で考えています。