さて、なんとか部屋の電気(というより最終的には玄関先と、玄関の電気を自動的にオン・オフさせたいなと考えていますが、ひとまず荒っぽい手法で自室の部屋はなんとか動く様に出来ました。
こちらは赤外線リモコンは使っておらず、有線での配線(これもLANケーブルを流用)です。
前にもちょっと書きましたが、部屋の電気のスイッチは、押す度にオン・オフが切り替わるタイプです。
ですから、遠隔でオン・オフする為には今電気が点いているのか消えているのか判断しないと、スイッチを押して良いのかの判断が出来ません。
なので、何処かにセンサーが必要ですが、電灯そのものにセンサーをつけるとなると、これまた配線の問題が出てきます。
自室なら天井に無粋なケーブルが一本くらい走っても良いのですが、玄関外となるとどうやって屋内に引き込むかなどの問題が出てきます。
で、考えたのは「蛍スイッチ」と呼ばれるスイッチ部にLEDが入っていて状態によって点灯するタイプ。
ただ、実際に玄関にあるスイッチは、オフで緑色に点灯し、オンで赤色に点灯します。
特に昼間はドアの外で電気が点いていても判断出来ないので、赤色の点灯は必須。
夜間暗い中でもスイッチの操作が出来る様にオフの時は緑色に光るのですが、こっちはいるのかな?
とりあえず、自室のスイッチをLED付きにしましたが、これはオフの時に緑に光るだけのタイプ。
試験は条件を簡単にしないとね。
で、LEDの点灯は光スイッチを使いましたが、これはとりあえず「秋月電子」さんが扱っている光センサースイッチキットを流用しました。
これが正解。
普通に売っているセンサーは小さいもので直径が5mm。このキットに入っているセンサーは直径が少し小さい4mmです。
これを蛍機能付きのスイッチのLEDの窓の透明プラスチックを外した穴の横幅4mmにピッタリ。
見にくいですけど、こんな感じでセンサーが付きました。
青いスイッチの動作部分の左に見える、青と白の二本のケーブルがセンサーに繋がるケーブルでその先の小さな丸いのがセンサーです。
で、ひとまずは壁に直接サーボモーターを貼り付け、余っていたフラットなLANケーブルで直接 Raspberry Pi 3 とつないでいます。
Raspberry Pi 3 の左側に見えるLANケーブルがそのまま壁づたいでスイッチに繋がっています。
センサーの出力は、オンの時にアースに落ちて、そうでない時はどこにも繋がらない状態。
これを普段はプルアップで1が出力されている GPIO のピンにつなぎます。
LEDが光っている時は光センサーはオンになりますから、センサーキットからの信号はアースに落ちます。
で、 GPIO のピンは「0」を出力。
電気が点けばLEDは消灯し、センサーの出力はアースから浮き上がり、出力は不定になりますが、GPIO のピンはプルアップされているので、GPIO のピンは「1」を出力。
GPIO のピンをチェックすれば、部屋の電気の消灯中は「0」、点灯したら「1」となります。
これを Homebridge で設定してやればOKです。
実際には、「homebridge-cmdswitch2」をcインストールして、onfig.json を以下の様に設定したやります。
"platforms": [{ "platform": "cmdSwitch2",
"switches": [{
"name": "ライト",
"on_cmd": "sudo /home/homebridge/shell/Light_on.sh 0 27",
"off_cmd": "sudo /home/homebridge/shell/Light_off.sh 0 27",
"state_cmd": "sudo /home/homebridge/shell/Light_status.sh 27"
}]
}]
#!/bin/bash
if [ `gpio read $1` -eq 1 ]
then
echo "On" > /home/homebridge/data/$1_Light_status
# exit 0
else
echo "Off" > /home/homebridge/data/$1_Light_status
# exit 1
fi
cat /home/homebridge/data/$1_Light_status | grep "On"
シェルの中でステータスをテキストに書き出してやって、それを見てあげる事で、「Off」と書いてあれば、grep では何も出力出来ずにエラーと判断してくれている様です。
後は、センサーの基盤やサーボを綺麗に隠す(お客様に見られても恥ずかしくない様に)事と、玄関のスイッチまでの配線をどうするか。
エアコンでLANケーブルは手一杯なので Raspberry pi Zero をもう一台買い込むかな?
こちらは赤外線リモコンは使っておらず、有線での配線(これもLANケーブルを流用)です。
前にもちょっと書きましたが、部屋の電気のスイッチは、押す度にオン・オフが切り替わるタイプです。
ですから、遠隔でオン・オフする為には今電気が点いているのか消えているのか判断しないと、スイッチを押して良いのかの判断が出来ません。
なので、何処かにセンサーが必要ですが、電灯そのものにセンサーをつけるとなると、これまた配線の問題が出てきます。
自室なら天井に無粋なケーブルが一本くらい走っても良いのですが、玄関外となるとどうやって屋内に引き込むかなどの問題が出てきます。
で、考えたのは「蛍スイッチ」と呼ばれるスイッチ部にLEDが入っていて状態によって点灯するタイプ。
ただ、実際に玄関にあるスイッチは、オフで緑色に点灯し、オンで赤色に点灯します。
特に昼間はドアの外で電気が点いていても判断出来ないので、赤色の点灯は必須。
夜間暗い中でもスイッチの操作が出来る様にオフの時は緑色に光るのですが、こっちはいるのかな?
とりあえず、自室のスイッチをLED付きにしましたが、これはオフの時に緑に光るだけのタイプ。
試験は条件を簡単にしないとね。
で、LEDの点灯は光スイッチを使いましたが、これはとりあえず「秋月電子」さんが扱っている光センサースイッチキットを流用しました。
これが正解。
普通に売っているセンサーは小さいもので直径が5mm。このキットに入っているセンサーは直径が少し小さい4mmです。
これを蛍機能付きのスイッチのLEDの窓の透明プラスチックを外した穴の横幅4mmにピッタリ。
見にくいですけど、こんな感じでセンサーが付きました。
青いスイッチの動作部分の左に見える、青と白の二本のケーブルがセンサーに繋がるケーブルでその先の小さな丸いのがセンサーです。
で、ひとまずは壁に直接サーボモーターを貼り付け、余っていたフラットなLANケーブルで直接 Raspberry Pi 3 とつないでいます。
Raspberry Pi 3 の左側に見えるLANケーブルがそのまま壁づたいでスイッチに繋がっています。
センサーの出力は、オンの時にアースに落ちて、そうでない時はどこにも繋がらない状態。
これを普段はプルアップで1が出力されている GPIO のピンにつなぎます。
LEDが光っている時は光センサーはオンになりますから、センサーキットからの信号はアースに落ちます。
で、 GPIO のピンは「0」を出力。
電気が点けばLEDは消灯し、センサーの出力はアースから浮き上がり、出力は不定になりますが、GPIO のピンはプルアップされているので、GPIO のピンは「1」を出力。
GPIO のピンをチェックすれば、部屋の電気の消灯中は「0」、点灯したら「1」となります。
これを Homebridge で設定してやればOKです。
実際には、「homebridge-cmdswitch2」をcインストールして、onfig.json を以下の様に設定したやります。
"platforms": [{ "platform": "cmdSwitch2",
"switches": [{
"name": "ライト",
"on_cmd": "sudo /home/homebridge/shell/Light_on.sh 0 27",
"off_cmd": "sudo /home/homebridge/shell/Light_off.sh 0 27",
"state_cmd": "sudo /home/homebridge/shell/Light_status.sh 27"
}]
}]
ここでは呼び出したシェルの引数はサーボの番号や、GPIOの引数になっています。
で、ちょっと悩んだのが、ステータスをチェックするシェル。
シェルが正常に終了すれば「オン」、失敗すれば「オフ」と判断するとのことですが、普通にエラーのリターンコードを返しても「オフ」と判断してくれません。
色々試したところ、最後の実行コマンドがエラーとなった時は「オフ」と判断する様です。
で、結局最後の1行が問題ということで、こんな変なシェルを組みました。
if [ `gpio read $1` -eq 1 ]
then
echo "On" > /home/homebridge/data/$1_Light_status
# exit 0
else
echo "Off" > /home/homebridge/data/$1_Light_status
# exit 1
fi
cat /home/homebridge/data/$1_Light_status | grep "On"
後は、センサーの基盤やサーボを綺麗に隠す(お客様に見られても恥ずかしくない様に)事と、玄関のスイッチまでの配線をどうするか。
エアコンでLANケーブルは手一杯なので Raspberry pi Zero をもう一台買い込むかな?
なお、ついで(?)なので、こちらのウェブサイトのAPI機能を利用して、日の出時刻や日の入り時刻を取り込んで、日の入り時刻(実際にはその15分ぐらい後が適当か?)に電気を自動でオンできる様なシェルも作って crontab と at コマンドで自動実行できる様な仕組みも作って見てます。
これならば、電気を毎日自動的にオンにするにも、季節によって日暮れの時刻を追いかけてくれますから、昼間変に暗くなって勝手に電気がついてしまうという、自動点灯装置にありがちなミスもなく。良いのではないかと。
コメント
コメントを投稿