FC2ブログ
01-<< 12345678910111213141516171819202122232425262728>>03-

APEXで1回きりのOutlet実行、自動OFF

2018-02-27
APEXで1回きりのOutlet実行、自動OFF

APEXを使っていて、例えば「水換えを今すぐ開始したい」、「自動給餌を今すぐ行いたい」って時が結構あります。それらのトリガー用Virtual Outletを用意してあったとしても、あとで手動でOFFにする必要がありますがそれを改善したいと思います。Google Homeのトリガーもこれを使っています

まぁ1年前ぐらいにやってあったのですが、紹介し忘れていましたので書いておきます

なお元の記事はこんな感じです。プログラムを比べてみてください
APEXを使った自動水換えシステム!
Automatic Feeding System


■ポイント
手動でOFFが不要になるポイントはWhen命令です。この命令は指定した時間(ここでは240分…4時間)経過したら強制的にOutletがOFFとなります
-----V_WTCHnow-----
Fallback OFF
Set ON
When On > 240:00 Then OFF


本来は自動給水でセンサー故障により給水しすぎたとき、自動停止させるために使います。その応用ですね。去年のファームウェア更新で実装されています
なお強制停止したあとはエラーとして記録されますので、E-mail送信やアラーム鳴らすってことができます
If Error V_WTCHnow Then ON

■自動水換えの開始トリガー
とりあえず実装した結果はこんな感じです
20180227_020.jpg

まずは自動水換えを手動でスタートさせるトリガーとなるのはこちらです。4時間経過したら止まります
-----水換え手動開始 V_WTCHnow-----
Fallback OFF
Set ON
When On > 240:00 Then OFF


これに伴って、それぞれ書き換えたので再掲しておきます

自動水換えをスケジュール起動させるトリガーです。スケジュールで水換えしない場合はOFFにしておきます。この設定では土曜日の12時から開始されます
-----水換えスケジュール開始 V_ATWTCh-----
Fallback OFF
Set OFF
If Time 12:00 to 16:00 Then ON
If DoW SMTWTF- Then OFF


そしてこれが水換えトリガーです。V_WTCHnowとV_ATWTChの両方どちらかがONなら水換えを開始するようにします
-----水換えトリガー V_WTCHtgr-----
Fallback OFF
Set OFF
If Output V_ATWTCh = ON Then ON
If Output V_WTCHnow = ON Then ON

If Output V_FeedTime = ON Then OFF
If FeedA 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF


あと、以前はV_ATWTChが水換えトリガーだったので、それぞれV_WTCHtgrに書き換えます
-----みずためから給水ポンプ2 WT_PumpAT-----
Fallback OFF
If Output V_WTCHtgr = ON Then ON
If Output V_WTCHtgr = OFF Then OFF

If Output V_FltUpper = OFF Then OFF
If Output V_WTFlChk = ON Then OFF
If Output V_UpperChk = ON Then OFF
When On > 075:00 Then OFF
Defer 009:00 Then ON


排水については、給水と同時に行うようにしました。「If Output WT_PumpAT = ON Then OFF」を消しただけです。以前は給水して水位が上がってから排水していましたが、時間がかかるのでスピードアップのためです。どちらでも良いかと思います
-----排水ポンプ WT_DrPump-----
Fallback OFF
If Output V_WTCHtgr = ON Then ON
If Output V_WTCHtgr = OFF Then OFF

If Output V_FltLower = OFF Then OFF
When On > 080:00 Then OFF
Defer 003:05 Then ON


これは変えていませんが再掲
-----サンプの上フロートスイッチ検知 V_FltUpper-----
Fallback OFF
Set OFF
If S_UpF1 OPEN Then ON
If S_UpF2 CLOSED Then OFF
Defer 000:05 Then ON


これも再掲
-----サンプの下フロートスイッチ検知 V_FltLower-----
Fallback OFF
Set OFF
If S_DwF1 OPEN Then ON
If S_DwF2 CLOSED Then OFF
Defer 000:05 Then OFF


-----給水の流量チェック V_WTFlChk-----
Fallback OFF
If Output WT_PumpAT = ON Then ON
If Output V_WTCHtgr = OFF Then OFF
If FlowWT > 10.0 Then OFF
Defer 000:20 Then ON
Min Time 060:00 Then ON


給水も排水もしていない時は、プロテインスキマーをONにするように修正しました
-----スキマーOFF V_SkimStop-----
Fallback OFF
Set OFF
If Output WT_PumpAT = ON Then ON
If Output V_WTCHtgr = ON Then ON
If Output V_SkimStart = OFF Then ON
If Output V_SkimStart = ON Then OFF


これは前無かったと思います。給水も排水もしていない時は、プロテインスキマーをONにします。水換えが早めに終わったらスキマーを自動再開させるためです
-----スキマーON V_SkimStart-----
Fallback OFF
Set ON
If Output WT_DrPump = ON Then OFF
If Output WT_PumpAT = ON Then OFF
Defer 010:00 Then ON


こちらはそのまま(自動給餌の設定が追加にはなっていますが)
-----スキマー Skimmer-----
Fallback ON
Set ON
If Output V_FeedDL60M = ON Then OFF
If Output V_SkimStop = ON Then OFF
If FeedA 060 Then OFF
If FeedC 003 Then OFF
If FeedD 003 Then OFF


-----自動給水 V_ROtime-----
Fallback OFF
Set OFF
If Time 23:00 to 23:03 Then ON
If Time 05:00 to 05:03 Then ON
If Time 11:00 to 11:03 Then ON
If Time 17:00 to 17:03 Then ON
If Output V_WTCHtgr = ON Then OFF


■自動給餌の開始トリガー
実装した結果はこんな感じです
20180227_020.jpg

構造は同じですね

こちらがフィードモードを手動で開始するトリガーです。20分で停止します
-----自動給餌の手動開始 V_Feednow-----
Fallback OFF
Set ON
When On > 020:00 Then OFF


こちらがスケジュールで起動する場合です。AFSで給餌するだけなので、15分で再開です
-----自動給餌のスケジュール開始 V_FeedAuto-----
Fallback OFF
Set OFF
If Time 07:00 to 07:15 Then ON
If FeedA 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF


上記のV_FeednowとV_FeedAutoを統合して、どちらかONなら開始します
-----自動給餌のトリガー V_FeedTime-----
Fallback OFF
Set OFF
If Output V_FeedAuto = ON Then ON
If Output V_Feednow = ON Then ON

If FeedA 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF


復帰後の待ち時間用はこちらです。これは2分待ち
-----2分待ち V_FeedDL2M-----
Fallback OFF
Set OFF
If Output V_FeedTime = ON Then ON
Defer 000:05 Then ON
If Output V_FeedTime = OFF Then OFF
Defer 002:00 Then OFF


同じく10分待ち。メール送信を止めるために使います
-----10分待ち V_FeedDL10M-----
Fallback OFF
Set OFF
If Output V_FeedTime = ON Then ON
Defer 000:05 Then ON
If Output V_FeedTime = OFF Then OFF
Defer 010:00 Then OFF


同じく60分待ち。スキマー停止に使います
-----60分待ち V_FeedDL60M-----
Fallback OFF
Set OFF
If Output V_FeedTime = ON Then ON
If Output V_FeedTime = OFF Then OFF
Defer 060:00 Then OFF


AFSそのものは変更ありません
-----AFS Feeder-----
Fallback OFF
Set OFF
If Output V_FeedTime = ON Then ON
If FeedA 000 Then ON
If FeedB 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF
Defer 003:00 Then ON


FeedAが定義されている各機材に対して、この待ち用Outletを定義します。例えばこんな感じ
-----ROの電磁弁 ROSValve-----
Fallback OFF
Set ON
If Output V_FltUpper = OFF Then OFF
If Output V_FltLower2 = OFF Then OFF
If Output V_ROtime = OFF Then OFF
If Output V_FeedTime = ON Then OFF
When On > 004:00 Then OFF
Defer 000:05 Then ON
Defer 000:05 Then OFF
If FeedA 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF


2分待ちさせたい機材は定義するOutletを変えればOKです
-----メインポンプ MainPump-----
Fallback ON
Set ON
If Output V_FeedDL2M = ON Then OFF
If FMM_Lk CLOSED Then OFF
Defer 000:10 Then ON
Defer 000:10 Then OFF
If FeedA 001 Then OFF
If FeedC 001 Then OFF
If FeedD 001 Then OFF


スキマーは60分待ちです
-----スキマー Skimmer-----
Fallback ON
Set ON
If Output V_FeedDL60M = ON Then OFF
If Output V_SkimStop = ON Then OFF
If FeedA 060 Then OFF
If FeedC 003 Then OFF
If FeedD 003 Then OFF


といった感じです。ちょっと長いですがこんな感じでできます

スポンサーサイト


B!
関連記事
★Neptune Apex★ | コメント:(0) | トラックバック:(0)

Google HomeとAPEXの連携

2018-02-21
ちょっと今さらですがスマートスピーカーのGoogle Homeを購入してみましたので、どうせならとAPEXと連携できるようにしてみました
20180221_010.jpg

どんな感じになったかはとりあえずこの動画を見てみてください。ちょっと未来的な感じになってると思いますw


あとはこちらを見てみてください。
Google Homeで出来る22の事と使い方・音声コマンド例のまとめ(1/21更新)

単独でもそこそこ便利で結構多機能ですが、どうせならと水槽の機材やテレビ、照明、エアコンを操作できるようにしました
APEXでたまに照明等のOutletを個別操作しますが、戻し忘れが嫌ですし、意図せずAUTOで使うべきOutletを操作していたというのも怖いですよね。今回の方法では照明やVortech、スキマー等の特定の機材だけ操作できるようにしました。また、一定時間経過したらAUTOに戻すという機能も付けています。

実施方法は以下のサイトを参考にさせていただきました。先人達に感謝
Smart Homeさん
R2Rのこちらのスレッド

■はじめに…APEXの操作ってどうやるの?

APEXはAPEXのWeb画面にアクセスするか、APEX FUSIONからアクセスしてOutlet操作するのが基本です。Google Homeから操作するなら、このWeb画面の操作をせずに直接変更が必要になります
20180221_030.jpg

20180221_040.jpg


その直接操作のキモとなるUNIXコマンドはこれです。(R2Rのスレッドより)
curl -X POST --user admin:PASSWORD http://APEX_LOCAL_IP:APEX_PORT/status.sht?ATO_state=1&Update=Update

cURLはWebサイトにコマンドラインから手軽にアクセスする素敵ツールです。ここでは、自宅のネットワークにあるAPEXに対してOutletを操作しています。
ATO_stateはAPEXのOutletの名前、そのあとの=1がOFFにするって意味です。これが=0ならAUTO、=1ならOFF、=2ならONとなります。

なので例えばうちの環境なら
http://192.168.1.50:8081/status.sht?T5_FAN_state=2&Update=Update
とすると水槽のT5が点灯し、
http://192.168.1.50:8081/status.sht?T5_FAN_state=1&Update=Update
とすると水槽のT5を消すことができます

Google Homeに「水槽の照明をつけて」と言ったら、それに連動して上記のコマンドを発行してあげるようにしたら、Google Homeから水槽照明を操作できたってことになります

■連携イメージ

連携イメージはこんな感じです。クリックで拡大します
20180221_070.jpg

キモになるのは自宅サーバの部分です。ここから上のcurlコマンドを実行します
負荷が少ないのでFireTVのようなAndroidベースの動画プレイヤーで実現できます。小型で省エネですね。NetflixやYoutubeとかもサクサク見られるので便利ですよ
もちろん、Linux系のOS(Ubuntuとか)をパソコンに入れても良いですし、MacもBSD UNIXベースなのでそれでも良いです。Windows 10ならストアアプリにUbuntuがありますのでそれでもできます。でも24時間動かし続ける必要があるので、やはり小型の装置の方が良いですね。ラズベリーパイという学習用の小型PCもありますが、インストールに結構慣れが要ります

連携はインターネットのIFTTT(イフト)というサービスを使います。IFTTTは様々なネットサービス同士を連携できるサイトで、例えばTwitterのフォロワーが増えたらGmailを送るとか、Instagramで写真を投稿したら、Twitterにも同じ写真を掲載するといったことに使えます。ネットサービスの数が数百連携できるので非常に便利なサイトです
設定はこんな感じ
20180221_050.jpg

あとslackはビジネス向けのチャットサイトです
今回のケースでは、Google Homeに「水槽の照明を点けて」と話したら、slackで命令を話すという連携に使います。その命令を自宅のサーバーで受け取って連携する感じですね(hubotという、チャットボットが受け取ります)
20180221_060.jpg

slackを使うと何が良いかというと… R2Rの方法だと自宅サーバーのWebサイトを外部に公開(ルーターの設定変更)しないとできません。パスワードを設定するとは言えちょっとリスクがあります。slackを使うとルーターの設定変更せずに、命令を受け取ることができます

なお自宅のテレビ、照明、エアコンを連携させる方法はこんな感じです。eRemote mini(海外だとRM Mini3)はwifi付きの学習リモコンで、テレビとかの赤外線信号を学習して、それを発信する機能があります。学習リモコンは、赤外線リモコンなら何でも覚えてくれるので、赤外線を使っている機材ならどんなものでも操作できるようになりますね
20180221_020.jpg
※大きく見えますが実物は7cm程度と小さいです

構成はこんな感じなので、同じ仕組みでできます
20180221_080.jpg


■必要なもの
・水槽操作用:APEX
・声で操作用:Google Home(またはGoogle Home mini)
・赤外線操作用:eRemote mini(海外だとRM Mini3)
・赤外線学習用:テレビ、室内照明、エアコンのリモコン
・自宅サーバー用:FireTV BOX(FireTV Stickも可)や、UNIX/Linux系OSが動くもの

あると良いもの
・Chromecast(YoutubeやNetflix動画を見るときに)

■構築手順

手順はこんな感じです。順番に実施してください。順番にやっていくとeRemote mini(海外だとRM Mini3)の設定も一緒にできてしまいます。

Fire TV Stickをhubotサーバ化してRM Mini3を操作する

hubotの雛形の生成

hubotでRM Mini3を操作する

SlackでRM Mini3を操作する

Google HomeでRM Mini3を操作する

Rasberry Piの起動時にhubotも自動的に起動させる

ここまで来るとテレビ等の赤外線操作がGoogle Homeでできるようになっているはずです。

■APEXの操作下準備

APEXを操作するためにcurlコマンドを実行するシェルスクリプトを用意します
以下に示すのでコピペしてください。#!/bin/shのところが1行目で、apexconnect.shといった名前で保存してください
全て ~/homebot/bin 配下に格納して、chmod 755 ~/homebot/bin/*.sh で実行権限を付けてください

まずはcurlを発行するシェルスクリプトです
#!/bin/sh
OUTLET=$1
COMMAND=$2
(curl -X POST --user admin:PASSWORD http://APEX_LOCAL_IP:APEX_PORT/status.sht?${OUTLET}_state=${COMMAND}&Update=Update ) > /dev/null 2>&1
exit 0


※PASSWORDと、APEX_LOCAL_IP:APEX_PORTは環境に合わせて書き換えてください。

Outletを操作するためのシェルスクリプトです。重要なのは普段使っているモード以外を指定すると、一定時間後に戻すようになっているってことです。Outletが普段はAUTOで使っていて、Google HomeからONにしたけど1時間経過したら自動でAUTOに戻すって使い方になります。消したままトラブルなんてことはいやなので…
#!/bin/sh
# 対象のAPEX Outlet
TGT_OUTLET=$1
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$2
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=$3
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=$4

if   [ "$TGT_MODE" = "$DEF_MODE" ]; then
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $TGT_MODE
else
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $TGT_MODE
	sleep $WAIT
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $DEF_MODE
fi


そしてOutlet毎にスクリプトを定義します。ここではT5用です
#!/bin/sh
# T5照明

# 対象のAPEX Outlet
TGT_OUTLET=T5_FAN
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=0
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=1h

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT



こちらはスキマー用
#!/bin/sh
# Skimmer
TGT=Skimmer

# 対象のAPEX Outlet
TGT_OUTLET=Skimmer
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=0
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=1h

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT


こちらはフィードモード用です
#!/bin/sh
# FEED Mode A

# 対象のAPEX Outlet
TGT_OUTLET=V_Feednow
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=1
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=30m

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT



といった感じで用意します。

そのあと、hubotでコマンドを定義します。

cd ~/homebot
bin/hubot

homebot command apex:vortech bin/apex_vortech.sh "#"
homebot command apex:t5 bin/apex_t5.sh "#"
homebot command apex:led bin/apex_led.sh "#"
homebot command apex:skimmer bin/apex_skimmer.sh "#"
homebot command apex:wtchnow bin/apex_wtchnow.sh "#"
homebot command apex:feed bin/apex_feed.sh "#"
homebot command apex:ro bin/apex_ro.sh "#"

登録されたことはこれで確認します
homebot list

といった感じでコマンドとシェルスクリプトを関連付けます。
ここではVortechポンプ、T5、スポットLED、自動水換え、フィードモード、RO浄水器を制御できるようにしてあります

あとは
send apex:t5(2)
とhubotに指示すればT5が点き、
send apex:t5(1)
とすればT5が消え、
send apex:t5(0)
とすればT5が自動制御に戻ります

■IFTTT登録

ではIFTTTでどの日本語キーワードに反応するのかを定義していきます。もしExcelからインポートができたりすると楽なんですが、どうやら一個一個コピペしないとだめみたいですね…

登録方法は
Google HomeでRM Mini3を操作する
と全く同じです。
違うのはslackに渡す文字が
send apex:t5(2)
になるだけです。

ひとまず定義してあるのはこんな感じです。クリックで拡大します
APEXだけじゃ無く、半分から下側は赤外線で操作する家電たちです。多少言葉がぶれても良いようにキーワード多めに定義してあります。
20180221_100.jpg

具体的な登録内容はこんな感じ。こちらは日本語キーワード
20180221_110.jpg

こちらはslackに伝えるメッセージ内容です。指示内容はシンプルですね
20180221_120.jpg

これでGoogle Homeから操作できるはずです。うまくできたかGoogle Homeに話しかけて試してみてください

■なんか大変そう?
ここまで紹介してきましたが、これらのことがGoogle Homeでないとできないのか?というとそんなことはありません

スマートフォンなら、Google Assistantアプリ、iPhoneならSiri、
家で使うならAmazon Echo、Apple Homepodから同じようなことはできます(たぶん… IFTTTと連携させれば良いので…)
Google Home買う前にちょっと試したいと思ったら、Android スマートフォンでGoogle Assistantアプリを使ってみてください。
使い勝手は同じです

あと、eRemote mini(海外だとRM Mini3)を使うのに自宅サーバーが必須なのかというとそんなことはありません。実はGoogle Homeと直接連携できますので、Androidアプリから設定すればIFTTT無しで連携できます
今回のケースではAPEXと連携するためにIFTTTが必要なので、eRemote mini(海外だとRM Mini3)もついでに設定しています。また「テレビの音量を 3 あげて」と言った感じで n 上げる、下げる指示ができるのも良いところです。チャンネルも同じ感じでできます

これらの設定はちょっと大変ではありますが、やり遂げると家の中がちょっと未来的な感じになって楽しいです。ついでにLinuxの使い方も何となく判るのでお勧めですw

Neptune Systems社のAPEX FUSIONとGoogle Homeが直接連携してくれればここまで苦労しないのですが… そうなるまではこういった方法でしか連携できません
RadionやHydraとかのLED照明は単純なON/OFF制御じゃないのでできません。これもそれぞれEcoSmart LiveやmyAIのサイトと連携ができないとどうしようも無い感じ… 待ちましょう

■利用範囲を拡大
ここまで来たら色々とやってみたくなると思います。
例えば…
・Google Home miniを寝室にも置いて、寝室からでも操作できるようにする(アラームは寝室の方が良いですし、リビングのエアコンを事前に点けるとかもできますね)
・IFTTTでエアコンをタイマー起動する
・人感センサーで照明やテレビを自動で点けてみる
・壁のスイッチを小型ロボット操作
・スマートコンセントでタイマー&リモート操作
・Twitterでメッセージをもらったら、Google Homeに話してもらう
等々、組み合わせて色々とできちゃう世の中になってきています。便利になってきましたね



B!
関連記事
★Neptune Apex★ | コメント:(0) | トラックバック:(0)
 | ホーム | 

FC2 Blog Ranking Related Posts Plugin for WordPress, Blogger...