04-<< 12345678910111213141516171819202122232425262728293031>>06-

Google Homeで水槽のステータスを喋らせる

2018-03-18
APEX FUSIONにログインしないと外出先で水槽のステータスが判らないので、喋って教えてくれるようにしました。あと文字で見たいときはSlackのログを見れば判ります。

まずは喋らせるためのスクリプト bin/say.jsを用意します
Google Homeの喋らせ方」にありますので作成してください。
ただしそのままだとエラーが発生したりするので、「google-home-notifierの「Error: getaddrinfo -3008」に対処する」のとおり、browser.jsを修正してください。{families:[4]}にするのがポイントのようですね

とりあえずテストはこんな感じでやってみてください
bin/say.js "こんにちは"

そうすると喋ることができる装置が表示され、全て反応します。複数のGoogle HomeとChromecastまで喋ります
Device "Google-Home-b413…" at 192.168.1.37:8009
Device "Google-Home-d0b68…" at 192.168.1.26:8009
Device "Chromecast-1b129…" at 192.168.1.22:8009

うちでは、Google-Home-d0bがリビングに置いてあるのでそこで喋らせるようにします

あとはbin配下にシェルスクリプトを作ります。ここでは、cgi-bin/status.xmlから情報を取得します。
※2018/3/19 タグがうまく表示されていなかったので修正しました
#!/bin/sh
curl --fail --silent --show-error --user admin:PASSWORD http://APEX_LOCAL_IP:APEX_PORT/cgi-bin/status.xml | grep -i "<name>$1</name> " | grep '<value>' | cut -f4 -d'>' | sed 's/ //g' | cut -f1 -d '<'
exit 0


※PASSWORD、APEX_LOCAL_IP:APEX_PORTは書き換えてください。

そしてステータスを喋るためのスクリプトを作ります。ここではパラメータで喋ることを切り替えられる作りにしていますので、好きに変えてください。あと/home/myhubot/binは環境に合わせて書き換えてください
#!/bin/sh
#リビングのGoogle Homeで水槽のステータスを喋る

#水温だけしゃべる
if   [ "$1" = "1" ]; then
	/home/myhubot/bin/say.js \
	"水槽の水温は"`/home/myhubot/bin/apexstat.sh Temp`"度です" \
	ja Google-Home-d0b
else
#ひととおり喋る
	/home/myhubot/bin/say.js \
"水槽の水温は"`/home/myhubot/bin/apexstat.sh Temp`"度、"\
"塩分濃度は"`/home/myhubot/bin/apexstat.sh Cond`"パーミル、"\
"ORPは"`/home/myhubot/bin/apexstat.sh ORP`"ミリボルト、"\
"ペーハーは"`/home/myhubot/bin/apexstat.sh pH`"、"\
"リアクターペーハーは"`/home/myhubot/bin/apexstat.sh pHCR`"、"\
"メインポンプ流量は"`/home/myhubot/bin/apexstat.sh FlowMP`"リットル毎時、"\
"サブポンプ流量は"`/home/myhubot/bin/apexstat.sh FlowSB`"リットル毎時、"\
"アンペアは"`/home/myhubot/bin/apexstat.sh Amp_3`"、"\
""`/home/myhubot/bin/apexstat.sh Amp_4`"、"\
""`/home/myhubot/bin/apexstat.sh Amp_7`""\
"です "\
	 ja Google-Home-d0b
fi


Temp、pH等はAPEXのセンサーの名前です。どんな名前か判らなくなったら、cgi-bin/status.xmlをブラウザで開いてみて、それに合わせてください。
Google-Home-d0bの部分は、喋らせたいGoogle Homeを区別するために使います。

できたら実行権限をつけておきます
chmod 755 bin/*.sh

そのあとはhubotにコマンドを認識させます
sudo systemctl stop homebot
npm install hubot-broadlink-rm@latest
bin/hubot

homebot command apex:stat bin/sayapexstat.sh "#"

exit
redis-cli save

sudo systemctl restart homebot

あとはIFTTTに登録します。
20180318_010.jpg

「水槽のステータス」と喋れば、水温他を教えてくれます。違うことを喋らせる時は send apex:stat(1) とかにしてください

スポンサーサイト


B!
★Neptune Apex★ | コメント:(2) | トラックバック:(0)

APEXプログラム全量(2018年3月)

2018-03-05
今のところの最新のAPEXプログラムを参考までに置いておきます。ExcelをHTMLに変換したら見にくくなったな…

ひとまずローカル側のAPEXはこんな感じです(クリックで拡大)
20180305_010.jpg

その下側はこんな感じ(クリックで拡大)
20180305_020.jpg

プログラムはこんな感じ
連番EBグループ和名Outlet名プログラム標準モードコメント
1-通知アラーム用SoundAlarmSet OFF
If Output V_WTCHtgr = ON Then OFF
If Temp > 27.7 Then ON
If Temp < 21.5 Then ON
If TempT > 27.7 Then ON
If TempT < 21.5 Then ON
If Cond > 36.0 Then ON
If Cond < 25.5 Then ON
If Output V_UpperChk = ON Then ON
If Output V_HeaterChk = ON Then ON
If Output V_ChillerChk = ON Then ON
If Error WT_PumpAT Then ON
If Error WT_DrPump Then ON
If ALD_WT CLOSED Then ON
If ALD_Ca CLOSED Then ON
If FMM_Lk CLOSED Then ON
If FMM_L2 CLOSED Then ON
If Output V_FeedDL10M = ON Then OFF
If FeedA 015 Then OFF
If FeedB 015 Then OFF
If FeedC 015 Then OFF
If FeedD 015 Then OFF
緊急度が高いものは音を鳴らす
2-通知警告用SoundWrnSet OFF
3-通知メール送信用EmailAlarmSet OFF
If Temp > RT+1.5 Then ON
If Temp < RT+-0.2 Then ON
If TempT > RT+1.5 Then ON
If TempT < RT+-0.2 Then ON
If Output V_WTCHtgr = ON Then OFF
If Temp > 27.7 Then ON
If Temp < 21.9 Then ON
If TempT > 27.7 Then ON
If TempT < 21.9 Then ON
If Cond > 36.0 Then ON
If Cond < 25.5 Then ON
If pH < 7.00 Then ON
If pH > 8.50 Then ON
If pHCR < 6.20 Then ON
If pHCR > 8.50 Then ON
If ORP < 160 Then ON
If FlowMP < 800 Then ON
If FlowSB < 200 Then ON
If Output V_UpperChk = ON Then ON
If Output V_CO2chk = ON Then ON
If Output V_HeaterChk = ON Then ON
If Output V_ChillerChk = ON Then ON
If Error WT_PumpAT Then ON
If Error WT_DrPump Then ON
If Error V_WTCHnow Then ON
If Output V_FeedTime = ON Then OFF
If ALD_WT CLOSED Then ON
If ALD_Ca CLOSED Then ON
If FMM_Lk CLOSED Then ON
If FMM_L2 CLOSED Then ON
If Power EB8_3 Off 000 Then ON
If Power EB8_4 Off 000 Then ON
If Power EB8_7 Off 000 Then ON
If Power Apex Off 000 Then ON
If Output V_FeedDL10M = ON Then OFF
If FeedA 015 Then OFF
If FeedB 015 Then OFF
If FeedC 015 Then OFF
4EB3 水槽上部フィードモード水流ポンプ全般VortechFallback ON
Set ON
If Output V_FeedTime = ON Then OFF
If FeedA 000 Then OFF
If FeedB 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF
Vortech x3
5EB3 水槽上部サンプ用のファンSump_FANFallback ON
Set ON
6EB3 水槽上部スポットLEDLEDFallback OFF
Set OFF
If Time 21:30 to 08:30 Then ON
If Temp > 28.0 Then OFF
スポットLED、T5のうちブルー灯部分
7EB3 水槽上部T5T5_FANFallback OFF
Set OFF
If Time 22:00 to 08:00 Then ON
If Temp > 28.0 Then OFF
T5及び冷却用PCファン
8EB3 水槽上部フィードモードメインポンプMainPumpFallback 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
Vectra L1
9EB3 水槽上部Vortech バッテリーBChargeFallback ON
Set ON
Vortech バッテリー
10EB3 水槽上部フィードモード底面ポンプTeimen_L1Fallback OFF
Set ON
If FlowMP < 1000 Then OFF
If FMM_Lk CLOSED Then OFF
If Output V_FeedTime = ON Then OFF
If FeedA 000 Then OFF
If FeedB 000 Then OFF
If FeedC 000 Then OFF
If FeedD 000 Then OFF
底面用Vectra L1
11EB3 水槽上部サブ水槽照明SubTankFallback ON
Set ON
Hydra 26 HD
12EB1 サンプフィードモードキャビネット内照明SumpLightFallback OFF
Set OFF
If S_Smp1 CLOSED Then ON
If S_Smp2 CLOSED Then ON
If Output V_FeedTime = ON Then ON
If FeedA 000 Then ON
If FeedB 000 Then ON
If FeedC 000 Then ON
If FeedD 000 Then ON
13EB1 サンプ自動給水サンプの自動給水用電磁弁ROSValveFallback 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
14EB1 サンプ自動給水
自動水溜め
クロノスレインROChargeFallback OFF
Set OFF
If Output WT_Charge = ON Then ON
If Output ROSValve = ON Then ON
If ALD_WT CLOSED Then OFF
クロノスレインの加圧ポンプ及び水道からの電磁弁
15EB1 サンプフィードモードヒーターHeaterFallback OFF
If Temp < RT+0.0 Then ON
If Temp > RT+0.3 Then OFF
If Output V_FeedDL2M = ON Then OFF
If Output Chiller = ON Then OFF
If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:50 Then ON
Defer 000:10 Then OFF
サンプに入れてあるヒーター
16EB1 サンプフィードモードZEOリアクターZEOReactorFallback ON
Set ON
If Output V_FeedDL2M = ON Then OFF
If FeedA 003 Then OFF
If FeedC 003 Then OFF
If FeedD 003 Then OFF
17EB1 サンプスキマークリーナーS_CleanerFallback OFF
Set OFF
If Time 23:00 to 23:02 Then ON
If Time 05:00 to 05:02 Then ON
If Time 11:00 to 11:02 Then ON
If Time 17:00 to 17:02 Then ON
If Output Skimmer = OFF Then OFF
18EB1 サンプ自動水換えサンプからの排水ポンプWT_DrPumpFallback 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
PMUP
19EB1 サンプフィードモードスキマーSkimmerFallback 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
バブルキング
20EB2 物入れ空きEB4_1Fallback OFF
Set OFF
21EB2 物入れ自動水溜めみずためバケツ用電磁弁WT_ChargeFallback OFF
Set OFF
If Output V_WTCGtgr = ON Then ON
If Output V_WTFlt = OFF Then OFF
If ALD_WT CLOSED Then OFF
22EB2 物入れ自動水溜めみずためバケツの水流ポンプWT_WaveFallback OFF
Set OFF
If Output V_WT_WvHt = ON Then ON
If Output V_WTCHtgr = ON Then OFF
23EB2 物入れフィードモード水槽用クーラーChillerFallback OFF
If Temp > RT+0.8 Then ON
If Temp < RT+0.6 Then OFF
If Output V_FeedDL2M = ON Then OFF
If FlowMP < 500 Then OFF
If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:50 Then ON
Defer 000:10 Then OFF
ZRW400
24EB2 物入れ物入れのライトDoorLightFallback OFF
Set OFF
If S_Door CLOSED Then ON
If S_Door OPEN Then OFF
25EB2 物入れ空きEB4_6Fallback OFF
Set OFF
26EB2 物入れカルシウムリアクターCRPumpFallback ON
Set ON
If FeedC 005 Then OFF
If FeedD 005 Then OFF
CR-800Rのマグネットポンプ
27EB2 物入れ空きEB4_8Fallback OFF
Set OFF
28VO異常検知カルシウムリアクターのpHチェックV_CO2chkFallback OFF
Set OFF
If Time 02:00 to 02:05 Then ON
If pHCR < 7.20 Then OFF
29VO異常検知ヒーターの稼働時間チェックV_HeaterChkFallback OFF
Set OFF
If Output Heater = ON Then ON
If Output Heater = OFF Then OFF
If Output V_FeedDL60M = ON Then OFF
If FeedA 060 Then OFF
Defer 070:00 Then ON
連続して70分かかるなら、ヒーターの故障と判断
30VO異常検知クーラーの稼働時間チェックV_ChillerChkFallback OFF
Set OFF
If Output Chiller = ON Then ON
If Output Chiller = OFF Then OFF
If Output V_FeedDL60M = ON Then OFF
If FeedA 060 Then OFF
Defer 060:00 Then ON
連続して60分かかるなら、ヒーターの故障と判断
31VO異常検知サンプ水位上限チェックV_UpperChkFallback OFF
Set OFF
If FMM_Op CLOSED Then ON
If FMM_Op OPEN Then OFF
Defer 001:00 Then ON
Defer 000:05 Then OFF
FMM光学センサー
32VO自動給水自動給水制御V_ROtimeFallback 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
33VO自動給水サンプの下フロートスイッチ検知2V_FltLower2Fallback OFF
Set OFF
If S_DwF1 CLOSED Then ON
If S_DwF2 OPEN Then OFF
Defer 000:05 Then OFF
34VO自動水溜め自動水溜めのトリガーV_WTCGtgrFallback OFF
Set OFF
If Time 00:01 to 06:00 Then ON
If Output V_WTCGweek = OFF Then OFF
If Output V_WTFlt = OFF Then OFF
35VO自動水溜め水溜めする曜日V_WTCGweekFallback OFF
Set ON
If DoW SMTWTF- Then OFF
If Output V_WTCGnow = ON Then ON
36VO自動水溜め自動水溜めの手動開始V_WTCGnowFallback OFF
Set ON
When On > 999:00 Then OFF
37VO自動水溜めバケツの水流ポンプ&ヒーター用V_WT_WvHtFallback OFF
Set OFF
If Output V_WTFlt = OFF Then ON
If Time 09:00 to 23:59 Then OFF
If Output V_WTCGweek = OFF Then OFF
38VO自動水溜めバケツのフロートスイッチ検知V_WTFltFallback OFF
Set OFF
If S_WF1 OPEN Then ON
If S_WF2 CLOSED Then OFF
Defer 000:10 Then ON
Defer 020:00 Then OFF
39VO自動水換え水換えトリガーV_WTCHtgrFallback 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
40VO自動水換え水換えスケジュール開始V_ATWTChFallback OFF
Set OFF
If Time 12:00 to 16:00 Then ON
If DoW SMTWTF- Then OFF
OFF
41VO自動水換え水換え手動開始V_WTCHnowFallback OFF
Set ON
When On > 240:00 Then OFF
OFF
42VO自動水換えサンプの下フロートスイッチ検知V_FltLowerFallback OFF
Set OFF
If S_DwF1 OPEN Then ON
If S_DwF2 CLOSED Then OFF
Defer 000:05 Then OFF
43VO自動水換えスキマーOFFV_SkimStopFallback 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
44VO自動水換えスキマーONV_SkimStartFallback OFF
Set ON
If Output WT_DrPump = ON Then OFF
If Output WT_PumpAT = ON Then OFF
Defer 010:00 Then ON
自動水換えしないときはONにする
45VO自動水換えサンプの上フロートスイッチ検知V_FltUpperFallback OFF
Set OFF
If S_UpF1 OPEN Then ON
If S_UpF2 CLOSED Then OFF
Defer 000:05 Then ON
46VO自動水換え給水の流量チェックV_WTFlChkFallback 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
47VO自動水換えみずためから給水ポンプ2WT_PumpATFallback 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
48VOフィードモードフィードーモードのトリガーV_FeedTimeFallback 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
49VOフィードモード自動給餌のスケジュール開始V_FeedAutoFallback 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
OFF
50VOフィードモード自動給餌の手動開始V_FeednowFallback OFF
Set ON
When On > 020:00 Then OFF
OFF
51VOフィードモードAutomatic FeederFeederFallback 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
OFFフィードモードに入って3分待ってから開始する。普段は餌を入れていない
52VOフィードモードフィードモード後の2分待ちV_FeedDL2MFallback 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
53VOフィードモードフィードモード後の10分待ちV_FeedDL10MFallback 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
54VOフィードモードフィードモード後の60分待ちV_FeedDL60MFallback OFF
Set OFF
If Output V_FeedTime = ON Then ON
If Output V_FeedTime = OFF Then OFF
Defer 060:00 Then OFF
55VOその他日中帯V_DaylightFallback OFF
Set OFF
If Time 21:45 to 08:15 Then ON
もとはTunzeのProfile用
56VOその他シーズンテーブルテスト用V_RT_UpperFallback OFF
If Temp > RT+0.8 Then ON
If Temp < RT+0.5 Then OFF
57VOその他シーズンテーブルテスト用V_RT_LowerFallback ON
If Temp < RT+0.0 Then ON
If Temp > RT+0.3 Then OFF
58VOその他未使用LinkA_11_1Set OFF
59VOその他未使用LinkA_14_1Set OFF
60VOその他未使用V5Fallback OFF
Set OFF
61VOその他未使用V6Fallback OFF
Set OFF
62VOその他未使用V7Fallback OFF
Set OFF
63VOその他未使用V8Fallback OFF
Set OFF


といった感じです

あとI/O Breakout Boxのスイッチ系はこんな感じです
S_Smp1、S_Smp2 : キャビネットのドアスイッチ(どちらか開けばサンプ内のライトが点く
S_UpF1、S_UpF2 : サンプのフロートスイッチ(上限側)
S_DwF1、S_DwF2 : サンプのフロートスイッチ(下限側)
S_Door : 物入れのドアスイッチ
S_WF1、S_WF2 : バケツのフロートスイッチ
それ以外は未使用です



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

自動水溜めの改善とGoogle Homeで時間指定起動

2018-03-04
以前の記事、「水換え用のRO水を自動でためる&ALD」のとおり、APEXを使って土曜日や日曜日に自動的にRO水を溜めるようにしています。たまに連日水換えしたいと思うことがありますが、毎回APEXのプログラムを書き換えていました

今回はGoogle Homeに対して喋るだけで、その日の夜に水を溜めるようにしたいと思います。

■APEXプログラム

ひとまず関連するVirtual Outletはこんな感じです。
20180304_010.jpg

以前使っていた、V_WTChTimeはV_WTCGtgrに名前を変更しています。APEXはOutletの名前を変えると、関連するOutletも名前を自動で変えてくれます

変更のあった箇所は赤字にしてあります

-----自動給水タイマー(電磁弁) ROCharge-----
Fallback OFF
Set OFF
If Outlet WT_Charge = ON Then ON
If Outlet ROSValve = ON Then ON
If ALD_WT CLOSED Then OFF

クロノスレインにある電磁弁と加圧ポンプを制御します。ROSValveはサンプへの自動給水の場合で、一日4回ONになります。バケツで水漏れがあったら問答無用でOFFになります

-----みずため電磁弁 WT_Charge-----
Fallback OFF
Set OFF
If Output V_WTCGtgr = ON Then ON
If Output V_WTFlt = OFF Then OFF
If ALD_WT CLOSED Then OFF

バケツ用の電磁弁です。トリガーでON

-----みずため水流ポンプ WT_Wave-----
Fallback OFF
Set OFF
If Output V_WT_WvHt = ON Then ON
If Output V_WTCHtgr = ON Then OFF

バケツの中の水流ポンプです。今はNWAを使っています。ヒーターと連動はできますが、今はヒーター用意していません

-----みずためから給水 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

バケツから水槽に入れるためのPMUPです。自動水換えに使うので大きく変更しました

-----みずためヒーター WT_Heater-----
自動水換えにしたので廃止


-----バケツ給水トリガー V_WTCGtgr(旧V_WTChTime)-----
Fallback OFF
Set OFF
If Time 00:01 to 06:00 Then ON
If Output V_WTCGweek = OFF Then OFF
If Output V_WTFlt = OFF Then OFF

バケツに水を溜める時間を制御します。何曜日に水を溜めるかはV_WTCGweekで制御します

-----バケツ手動トリガー V_WTCGnow-----
Fallback OFF
Set ON
When On > 999:00 Then OFF

今日の夜は水を溜めたいって時に使います。普段はOFFにします。Google HomeからONにするのはこれですね。When ONの指定は999分…約16時間までしかONを維持できません。この問題はhubot側で解決します。APEXだけでなんとかする方法は…22時ぐらいまで待って手動でAUTOにするぐらいです

-----水溜めする曜日 V_WTCGweek-----
Fallback OFF
Set ON
If DoW SMTWTF- Then OFF
If Output V_WTCGnow = ON Then ON

水溜めする曜日を定義します。標準では土曜日にしてありますが、V_WTCGnowをAUTOにしていればその日に水溜めも可能です

-----バケツのフロートスイッチ検知 V_WTFlt-----
Fallback OFF
Set OFF
If S_WF1 OPEN Then ON
If S_WF2 CLOSED Then OFF
Defer 000:10 Then ON
Defer 020:00 Then OFF

バケツのフロートスイッチを制御します。フロートスイッチのどちらかがCLOSEDになるとOFFになります。Deferで20分を指定して、水が多めに入るようになっています(ギリギリだとON/OFFを繰り返すことになるので)。また、フロートスイッチをちょっと触るとそれでONに変わることがあったので、ONにするときも10秒の待ちを作ってあります

-----水流ポンプ&ヒーター V_WT_WvHt-----
Fallback OFF
Set OFF
If Output V_WTFlt = OFF Then ON
If Time 09:00 to 23:59 Then OFF
If Output V_WTCGweek = OFF Then OFF

水流ポンプを制御します。曜日の指定と、フロートスイッチを条件にしていますので、9時を過ぎたら自動でOFFになりますし、9時前に水換えをはじめたときでも、水が減ってフロートスイッチがOpenになるので、ちゃんとヒーターは切れます
空焚きしたらヒーターは使えなくなってしまうので重要ですね

■Google Homeで制御

ではGoogle Homeから水溜めを開始できるようにしていきます。

ひとまずbin配下にシェルスクリプトを配置します。ここでは上記で定義しているV_WTCGnowをAUTOにできるようにしています。なお/home/myhubot/binのパスは環境に合わせて変えてください

#!/bin/sh
# 水溜め開始

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

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


そのあと実行権限をつけておきます。
chmod 755 /home/myhubot/bin/apex_wtcgnow.sh

あとの作業のために、関連するモジュールはアップデートしておきます
sudo systemctl stop homebot
sudo npm update
sudo npm update -g
npm install hubot-broadlink-rm@latest

コマンドを登録しておきます
bin/hubot
homebot command apex:wtcgnow bin/apex_wtcgnow.sh "#"

コマンドのテストします。これでOutletがON/OFFされればOKです
homebot send apex:wtcgnow(0)
homebot send apex:wtcgnow(1)
exit

そのあと、DBを保存
redis-cli save

最後にサービスを再起動しておきます
sudo systemctl restart homebot

もしうまくOutletが動かないときは、以下のコマンドでどこでエラーになったのか判りますのでやってみてね(デバッグモードでシェルスクリプトを実行します)
sh -x /home/myhubot/bin/apex_wtcgnow.sh 1

あとはIFTTTで起動キーワードを登録します。(クリックで拡大)
20180304_020.jpg
Google Homeに話しかけてみて、うまく認識されるか試してください。

今回IFTTTでポイントとなるのは[23:55]の部分です。
send [23:55] apex:wtcgnow(0)

hubot-broadlink-rmのバージョンアップで実装されていて、指定した時間になるまで待つことができます。このおかげで、「バケツに水をためて」といったらすぐに水を溜めはじめるのではなく、その日の夜になるまで待ってから水を溜め始めるってことができます。
注意点としては、hubotのサービスを再起動したりするとそれを忘れてしまうことぐらいでしょうか

あとGoogle Homeに任意の言葉を喋らせることができます。
詳細は「Google_Homeの喋らせ方」を見てください。

ただしうちではうまくsay.jsが動かなかったので、Google Homeを検索せずにIPアドレスを直接指定する方法にしています。
#!/usr/local/bin/node
const home   = require('google-home-notifier');
const argv   = process.argv;
const text   = argv[2] || '';
const lang   = argv[3] || 'ja';
const device = argv[4] || '';

home.ip("192.168.1.26");
home.device(device, lang);
home.notify(text, (res) => console.log('said '+ text));


なおエラーになるのはGoogle Homeの検索がうまくいかないからのようなので、該当のソースを書き換えれば良いです。

これを使って、フィードモードで残り時間を教えてくれるようにしました(クリックで拡大)
20180304_040.jpg

フィードモードは20分なので、5分毎に喋らせれば良いだけです
send apex:feednw(0) [5m] say(あと15分です) [5m] say(あと10分です) [5m] say(あと5分です) [4m] say(もうすぐ再開します) [10s] apex:feednw(1)

ただし元のfeed(0)だとsleepでひたすら待ち続けることになるので、そうじゃないバージョンを作る必要があります
以下をbin配下に格納して実行権限を付けてください

こちらはsleepしないバージョンです
#!/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
fi



そしてそれを呼び出すようにします
#!/bin/sh
# FEED Mode 汎用

# 対象の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=21m

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


あとはコマンド登録すれば良いです
homebot command apex:feednw bin/apex_feed_nw.sh "#"

こっちのコマンドは元のモードには戻しませんので、戻し忘れ注意です

hubot-broadlink-rmのおかげで色々便利になりますね。

この他、「赤外線信号のタイミングを調整する」にあるとおり、起動時間そのものを口頭指示できたりします。



B!
★Neptune Apex★ | コメント:(2) | トラックバック:(0)

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)

APEXを使った自動水換えシステム!

2017-07-30
APEXを使った自動水換えシステムが概ね形になったので公開します。
ひとまずFMMを使っているので、「APEX FMMが届きました!」をざっと読んでおくと良いです。
あとバケツに水換え用のRO水をためるのは「水換え用のRO水を自動でためる&ALD」で実現済みです。

■はじめに
現在、ヴィーソルトで毎週70Lほど水換えを行っています。水量は450Lぐらいあるので、約15%水換えです。KZ Salt使っていた頃は、2週間に一回、30Lほどで済んでいましたが、毎週70Lやるの面倒になってきたので楽するために自動水換えシステムを考えてみました。微量元素濃度を適切に維持し、栄養塩やデトリタスを排出するには水換えが手っ取り早いですからね。でも面倒w

とりあえずまずはこの動画を見てください。自動水換えの様子です


■水換えの方法
人の手で水換えするときの手順はだいたいこんな感じかなとおもいます
○新海水を作る
 ・RO水をバケツとかにためる
 ・温度をあわせる
 ・人工海水の元を測定して入れて攪拌
 ・塩分濃度を確認する
○水換えする
 ・水槽から水を抜く、底砂をプロホースなどで掃除
 ・新海水をいれる
 ・サンプが適正水位か確かめる

「新海水を作る」は実現済みですので、後半の「水換えする」を自動化してみます
体調悪いときとか忙しいときとか、70Lも吸い出して水入れてバケツ掃除して乾燥させて… とか面倒だし水槽システム紹介動画作る時間もなるべく多く確保したいからね
なおここでは週1回水換え前提で紹介しますが、毎日水換えとかもこの方法なら手軽にできますね

まずは方法はこんな感じです。クリックで拡大します
20170730_010.jpg
APEXが必要なのは当然として、以下が必要です
・フロートスイッチを2つ
・それを繋ぐためのI/O Breakout Boxが1つ
・PMUPとACアダプタを2つずつ
・FMMを1つ
・1/4インチハードチューブ用のセンサーを1つ
・1/4インチハードチューブが適量

方式の良いところ
・1/4インチハードチューブを使うので、細くて丈夫、邪魔にならない
・水がゆっくり入るので水槽の温度変化が少なく、温度あわせが不要
・監視不要
・何らかのトラブルがあったらメールが送信される
・バケツの中の人工海水の量は変更可能
・手動で底砂を掃除してもしなくてもおまかせできる

方式の悪いところ
・汎用のポンプでは無くPMUPが必須
・塩分濃度はチェックしていないので、塩入れ忘れ注意!
・水を入れてから排水するので少しロスがある

■水ためバケツ→サンプ
まずはPMUPですね。専用設計されたポンプなだけあって、小型でもハイパワーです
Practical Multipurpose Utility Pumpの略で、PUMPのスペルミスでは無いです
20170730_020.jpg

小さいですね。これでも揚程は4mもあるみたい
20170730_030.jpg

異径ストレートユニオンをgreensさんで購入しておきました
20170730_050.jpg

これをポンプに取り付けて
20170730_040.jpg

1/4インチハードチューブと簡単に接続できます
20170730_060.jpg

こちらが自動でみずをためるバケツ
20170730_190.jpg

バケツの中のチューブは穴を開けておきます。バケツの背が高いので、PMUPを止めてもサンプにサイフォンで流れて行ってしまいます。事故防止です
20170730_070.jpg

少しロスになりますが仕方ないですね。なお結構激しく水が飛ぶのでフタ必須です
20170730_080.jpg

フタをしないと塩害が
20170730_090.jpg

バケツからサンプのところに、フローセンサーを取り付けます。これでバケツが空になったことを検知します。フローセンサーを使わずに空になったことを検知するには、フロートスイッチとかをバケツの底の方に置くか、塩分濃度センサーでもできるかな
20170730_093.jpg

フローセンサーによるとこんなに細くても50L/Hぐらいの流量はあるみたいです
20170730_095.jpg

■サンプ内
サンプにはフロートスイッチを取り付けます
20170730_100.jpg

アクリルのマウンタがあるのですが穴が小さすぎるので…
20170730_110.jpg

ドリルで広げます
20170730_130.jpg

良い感じになりました
20170730_140.jpg

フロートスイッチは二重化しないと怖いですよね
20170730_150.jpg

水位の上限を検出するために取り付けます
20170730_160.jpg

あと排水用のPMUPも設置して、
20170730_170.jpg

6メートルぐらい離れた流しまでハードチューブで接続しました。これを12mmのホースとかでやると結構邪魔なので、1/4インチハードチューブを使いたかった
20170730_180.jpg

サンプ内には上限を検出するフロートスイッチと、自動給水用の下限を検出するフロートスイッチが設置されています
20170730_175.jpg

バケツ内はこんな感じ。上のフロートスイッチはRO水を入れてためるときのものです。底にはPMUPの他、水を攪拌して塩を溶かすためのポンプがいくつか入っています
20170730_200.jpg

■参考までに
排水ポンプとしてマキシジェット マイクロを買ってみましたが、流石にパワー不足で排水できませんでした。小さくてパワーがでるPMUPのすごさを改めて実感。ちなみに12mmホース→1/4インチハードチューブ変換もGREENSさんで売ってます
20170730_210.jpg

■APEXプログラム
ではプログラムしていきます。各アウトレットの名前がどこを指しているのかイメージできないと理解不可能だと思いますので、図の方に示してみました。クリックで拡大します
20170730_310.jpg

プログラムの時間毎の動きはこんな感じです。
20170730_320.jpg

プログラムはこんな感じです。実際に使って見ないとどういう動きしているかはわからないかも。久々に結構複雑なものを組んだのでちょっと悩みましたw

-----水換えスケジュール V_ATWTCh-----
Fallback OFF
Set OFF
If Time 12:00 to 15:30 Then ON  …(日曜日の)12時~水換え開始。終了時刻は水の量で調整してください
If DoW -MTWTFS Then OFF  …日曜日のみ動く設定
If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF


-----みずためから給水ポンプ2 WT_PumpAT-----
Fallback OFF
If Output V_ATWTCh = ON Then ON
If Output V_ATWTCh = OFF Then OFF
If Output V_FltUpper = OFF Then OFF …上スイッチのどちらかが上なら止める
If Output V_WTFlChk = ON Then OFF …バケツが空になったら止める
When On > 060:00 Then OFF …60分以上動き続けるなら異常扱い。ここも調整してください
Defer 020:00 Then ON …上スイッチまで行ったら排水されるので、20分待ってから再度給水する。下スイッチまで排水するという判断をさせるのは、APEXのプログラム仕様的に難しそうなので妥協


-----排水ポンプ WT_DrPump-----
Fallback OFF
If Output V_ATWTCh = ON Then ON
If Output V_ATWTCh = OFF Then OFF
If Output WT_PumpAT = ON Then OFF …バケツからサンプへ給水していたら動かない
If Output V_FltLower = OFF Then OFF …下スイッチまで排水する
When On > 060:00 Then OFF …60分以上動き続けるなら異常扱い。ここも調整してください
Defer 003:05 Then ON …給水が止まったあと、3分ちょっと待って水が均一になるのを待つ


ここで使っているフロートスイッチは、上にあがるとCLOSE、下のままならOPENであることに注意
-----サンプの上フロートスイッチ検知 V_FltUpper-----
Fallback OFF
Set OFF
If S_UpF1 OPEN Then ON
If S_UpF2 CLOSED Then OFF
Defer 000:05 Then ON


ここで使っているフロートスイッチは、上にあがるとOPEN、下のままならCLOSEのものを使っています
-----サンプの下フロートスイッチ検知 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_ATWTCh = OFF Then OFF
If FlowWT > 10.0 Then OFF …10L/H以上なら空になってない
Defer 000:20 Then ON …フローセンサーが正しく流量を検知するには10秒ぐらいはかかる
Min Time 60:00 Then ON …空を検知したらそれを60分維持する。これが無いとバケツのPMUPが数秒おきにON/OFF繰り返す


-----スキマーONOFF V_SkimStp-----
Fallback OFF
Set OFF
If Output WT_PumpAT = ON Then ON …自動水換え中は水位が変わるので問答無用で電源を落とす
If Output V_ATWTCh = ON Then ON


-----スキマー Skimmer-----
Fallback ON
Set ON
If Output V_SkimStp = ON Then OFF …電源を落とす
If FeedA 060 Then OFF
If FeedC 003 Then OFF
If FeedD 003 Then OFF


-----自動給水-----
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_ATWTCh = ON Then OFF … 自動水換え中はもちろん給水しない


といった感じです。
なお、上限を検知するフロートスイッチを取り付けない方法も可能かなと思います。給水にかかる時間がわかっていれば、給水を一定時間で止めて排水をさせるを繰り返せば良いですね。今回のシステムではなるべく多く水を入れてから水抜きをしたかったのと、サンプから水が溢れるリスクを回避したかったのでスイッチを取り付けました。

ツアーは日曜日のことが多く、朝起きてから大急ぎで水換えしていましたがこのシステムで楽になりそうです。



B!
★Neptune Apex★ | コメント:(2) | トラックバック:(0)

APEX FMMが届きました!

2017-07-29
■はじめに

APEXで流量モニタリングができるモジュール、FMMFluid Monitoring Module が届きました。
デジタル流量計は既にPRSさんがCORRENTEとして販売していますが、APEXの正式モジュールとして販売されたこちらは、例えば流量が減ったりゼロなら異常として検知できたりします
また、このモジュールは非常に多機能で、いろいろなセンサーを取り付けることができるようになっているのが特徴です。
・流量センサー(2インチ、1インチ、1/2インチ、1/4インチ)
・リークセンサー 
・光学水位センサー
・24VのDCポンプであるPMUP
これを応用し、独立した自動給水システムとしても使えるATKというのも販売されていたりします

今回は流量測定や自動水換えシステムのために色々買ってみました。でも長くなったのとテスト中なので自動水換えについては別の記事にします。

届いたのがこちら。
Fluid Monitoring Module (Module Only)
Apex FMM Flow Sensor – 1″ (FS-100) w/Unions
Apex FMM Flow Sensor – 1/4″ (FS-25) RODI
Apex PMUP-T 24VDC Stand Alone ATO Utility Pump w/Power Supply
Apex FMM Power Supply – 24VDC 36W (PS-36-US)
Apex FMM Leak Detection Probe Low Profile (LD-1)
Apex 6' Aquabus Cable ( M/M )
Apex 1LINK DIY DC24 to Bare Wire Cable - 10’
20170729_010.jpg

そしてこちらも後で追加購入しました。
Optical Level Sensor with Magnetic Mount FMM ATK
Apex PMUP-T 24VDC Stand Alone ATO Utility Pump w/Power Supply
20170729_015.jpg

■開封
右側がFMM Fluid Monitoring Moduleです
20170729_020.jpg

中はモジュールと短めケーブル、そしてネジが入っています
20170729_030.jpg

少しズーム クリックで拡大です
20170729_040.jpg

ポートは左からアクアバスが二つ、センサーポートが4つ、PMUPコネクタが1つ、PMUPのための24V ACアダプタコネクタが1つです。FMMそのものはACアダプタ不要ですが、PMUP使うときは必要です
20170729_050.jpg

こちらが1インチサイズのセンサーです。PRSさんのCORRENTEはセンサー水没可能でしたが、APEXの方は水没不可になっているので注意してください
20170729_060.jpg

流れの向きも決まっていて一方口です
20170729_070.jpg

センサー部分はちょっとだけ見えますね。センサーの回転数で流量を測定しています。配管内が水で満たされていないと正確な値が計算できないので、オーバーフローの排水側とかには使えません
20170729_075.jpg

こちらは1/4インチハードチューブ用のセンサーです。カルシウムリアクターの排水が止まっていないことを検出するために買ってみたのですが…結論としては流量が少なすぎて無理でしたw 代わりに自動水換えシステムに使うことにしました
20170729_080.jpg

こちらもよく見ると方向があります
20170729_090.jpg

光学水位センサー Optical Level Sensor with Magnetic Mount FMM ATKです。先端が水に触れるだけで検知でき、かなり正確な模様。フロートスイッチだと浮きが汚れなどで浮かないことがありますが… こちらはより寿命が長そう。マグネットで固定できます
20170729_100.jpg

これはPMUPとACアダプタです。Apex PMUP-T 24VDC Stand Alone ATO Utility Pump w/Power Supply
ACアダプタ無しもあります
20170729_110.jpg

こちらはFMM用のACアダプタ Apex FMM Power Supply – 24VDC 36W (PS-36-US)です。日本で売られている24V、1.5AのACアダプタで代替できそう
20170729_120.jpg

PMUP用のACアダプタは専用の2ピンになっていて、PMUP単独使用が可能です。24V、1.5Aなので同じですね
20170729_130.jpg

これが2ピン
20170729_140.jpg

リークセンサーのApex FMM Leak Detection Probe Low Profile (LD-1)です。リークセンサーはAdvanced Leak Detection Moduleがありますが、こちらはFMM専用です
20170729_150.jpg

裏側はこんな感じで、ALDと変わらないですね。今回は流量センサーの部分で漏水していないかを検知するために買ってみました
20170729_160.jpg

■取り付け
では取り付けていきます。

モジュールはネジ止めせずに両面テープで固定。
20170729_164.jpg

1インチ流量センサーにはユニオンがついてきますが、US規格なので日本の塩ビ管には使えません
20170729_165.jpg

試しに25Aを挿してみるとこんなに隙間が
20170729_170.jpg

でも実は大丈夫。センサーのネジ部分は平行ネジ G1なので、25Aの給水管ソケットとぴったりです
20170729_180.jpg

試しに取り付けるとこんな感じ
20170729_190.jpg

両方取り付けると結構な長さになります
20170729_200.jpg

平行ネジは水漏れが心配なので、巻き方にコツが必要なシールテープでは無く、ヘルメチックF-119を使いました
20170729_210.jpg

これをネジに塗ってねじ込み、8時間ぐらいするとシリコン状に固まります。これなら水漏れしませんね
20170729_220.jpg

よく見るとシリコンっぽくなっているのがわかるかな
20170729_230.jpg

メインポンプ配管にセンサー部分を割り込ませるため、一度サンプの水を抜きました
20170729_240.jpg

配管を外して中の水を抜ききるのって結構大変
20170729_250.jpg

サンプを空にするぐらい抜かないといけないしね
20170729_255.jpg

配管に割り込ませました
20170729_260.jpg

下にはリークセンサーを置いておきました
20170729_270.jpg

■APEX 設定
APEXにモジュールを取り付けるとこんな感じで認識されます。Configuration - Module Setup - FMMを選ぶとこの画面になります。
20170729_280.jpg

クリックで拡大します。FMMはだいたい古いファームウェアが入っています。SW RevがOLDなのがその証拠
20170729_290.jpg

とりあえずファームウェアを更新してあげます
20170729_300.jpg

更新してSW RevがOKになりました
20170729_310.jpg

センサーの4つのポートの設定をします。センサーは自動認識では無いので、取り付けたセンサーにあわせてリストから選んでください。一番下は流量センサーの表示単位で、LPH(リットル毎時)に設定しておきます
20170729_320.jpg

これでメインポンプの流量が表示されるようになりました。だいたい1200L/Hぐらいでしょうか。水量は450リットルなので、1時間あたり2.6回転ぐらいですね。ZEOvitなのでこれぐらいでも問題ないかな。なおベルリンシステムなら6回転ぐらい、トリトンシステムなら10回転が目安です
なお、プラケースで測定したときは2Lをいっぱいにするのに5秒~6秒、1440L/H~1200L/Hなので概ね正しそうです
20170729_330.jpg

■1/4インチセンサー
ためしに1/4インチセンサーもみてみます
20170729_340.jpg

こんな感じで取り付けは簡単です
20170729_350.jpg

ボールバルブを解放すれば流量が検知されますが、カルシウムリアクターらしく絞ると途端に0L/Hになってしまいますね
20170729_360.jpg

■プログラム
今まではメインポンプが停止しているかどうかを、フロートスイッチで間接的に検知していました。過去の記事「 Apexによる、メインポンプ動作チェックプログラム」を見てください。

今回FMMを取り付けたことで、流量を直接検知に使えます
というわけで、ここではFMMのセンサー FlowMP で検知しています。500L/Hを下回ったらメールが飛びます。ついでにFMMのリークセンサーも検知に追加してあります
-----EmailAlarm-----
Set OFF
If Temp > RT+1.5 Then ON
If Temp < RT+-0.5 Then ON
If TempT > RT+1.5 Then ON
If TempT < RT+-0.5 Then ON
If Output V_ATWTCh = ON Then OFF
If Temp > 27.7 Then ON
If Temp < 22.0 Then ON
If TempT > 27.7 Then ON
If TempT < 22.0 Then ON
If Cond > 36.0 Then ON
If Cond < 25.5 Then ON
If pH < 7.00 Then ON
If pH > 8.50 Then ON
If pHCR < 6.20 Then ON
If pHCR > 8.50 Then ON
If ORP < 160 Then ON
If FlowMP < 500 Then ON
If Output V_CRFLchk = ON Then ON
If Output V_CO2chk = ON Then ON
If Output V_HeaterChk = ON Then ON
If Output V_ChillerChk = ON Then ON
If Error WT_PumpAT Then ON
If Error WT_DrPump Then ON
If Output V_FeedTime = ON Then OFF
If ALD_WT CLOSED Then ON
If ALD_Ca CLOSED Then ON
If FMM_Lk CLOSED Then ON
If Power EB8_3 Off 000 Then ON
If Power EB8_4 Off 000 Then ON
If Power EB8_7 Off 000 Then ON
If Power Apex Off 000 Then ON
If FeedA 015 Then OFF
If FeedB 015 Then OFF
If FeedC 015 Then OFF
If FeedD 015 Then OFF


■PMUPテスト
PMUPの動作テスト。PMUPは3/8インチハードチューブをそのまま取り付けられる他、変換して1/4インチハードチューブにも接続できます。1/4インチだと凄く細いのでかなりの抵抗になりますが、それでも水を高く持ち上げられるパワーがあります。自動水換えシステムを邪魔にならない細い配管で構築するときに使えますね
20170729_370.jpg

TwitterにあげたPMUPの動作動画もあります



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

Automatic Feeding System

2017-02-27
たまに旅行に行ったり、家に帰れなかったりするのでAPEXの自動給餌器、Automatic Feeding System : AFSを購入しました。魚の数が多いし、痩せやすいアカネハナゴイやベラがいるので給餌無しはちょっと心配です

ひとまず箱はこんな感じ
20170227_010.jpg

裏側
20170227_020.jpg

中身はこんな感じです。本体と試供品の餌(Neptune Systems製)、長いAquabusケーブルがついてきます
20170227_030.jpg

結構な長さですね。水槽移設のときはこれで助かりました
20170227_040.jpg

給餌器の土台はこんな感じです。フランジ無し水槽用ですので使えません
20170227_050.jpg

本体の裏側はこんな感じです。2ポートあるのでもう一台接続も簡単にできますね。ACアダプタを挿してで単独動作もできるようです
20170227_060.jpg

フランジ付き水槽用に、こちらのマウンタを準備しました。かなり昔に買ったGEXの自動給餌器についていたものを取っておきました
20170227_070.jpg

タイラップで雑ですが固定
20170227_080.jpg

こんな感じで固定します
20170227_090.jpg

APEXに接続するとFeeder Outletとして認識されます
20170227_140.jpg

ONにすると中のケースが自動でせり出して、くるっとまわって給餌されます。普段は中に収まっているので、水槽の湿気が浸透しにくいようになっています。給餌器の回転は1回だけで、一度に複数回まわすことはできません
なおせり出すとき結構うるさいです
20170227_100.jpg

ケースの中にエサを入れておきます。下にあるオレンジ色の部分で給餌量を調整します
20170227_110.jpg

右にスライドさせると量が増える感じです。一段階調整するだけで4倍ぐらい出方が変わるので自動給餌器では良くあることですが調整が難しいです
20170227_120.jpg

ガラス面のコケ取りのときにちょっと邪魔なので置き場所に悩みますね。フタが網だと餌がすり抜けますが、ガラス板を置いている場合は隙間に入るように調整が必要ですね
20170227_130.jpg

APEXのプログラムはこんな感じです

-----Feeder-----
Fallback OFF
Set OFF
If Outlet 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

フィードモードAにするとメインポンプやスキマーが停止するので、3分後に給餌します

旅行に行っていると自動でフィードモードになって餌やりをして欲しいですよね。フィードモードそのものは手動じゃ無いと発動できないので、フィードモードを真似るVirtual Outletを定義します

-----V_FeedTime-----
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

このVirtual Outletはフィードモードに入る時刻を定義します

自動でフィードモードを入るのを止めるときは、OFFにすれば良いです
20170227_150.jpg

-----V_FeedDL2M-----
Fallback OFF
Set OFF
If Outlet V_FeedTime = ON Then ON
Defer 000:05 Then ON
If Outlet V_FeedTime = OFF Then OFF
Defer 002:00 Then OFF

こちらは2分待ってから復帰する機材用です

-----V_FeedDL10M-----
Fallback OFF
Set OFF
If Outlet V_FeedTime = ON Then ON
Defer 000:05 Then ON
If Outlet V_FeedTime = OFF Then OFF
Defer 010:00 Then OFF

こちらは10分待ってから復帰する機材用です

-----Skimmer-----
Fallback ON
Set ON
If Outlet V_FeedDL10M = ON Then OFF
If FeedA 060 Then OFF
If FeedC 003 Then OFF
If FeedD 003 Then OFF

あとはIf FeedAを設定している機材のOutletに登録すればOKです。ここではプロテインスキマーなので10分待ちの方を設定してあります

即時復帰はこちらを設定します
If Outlet V_FeedTime = ON Then ON

ヒーターやクーラーなど、2分待ちさせるならこちらを使います
If Outlet V_FeedDL2M = ON Then OFF

というわけで、普段は自動給餌を使いませんが、緊急用や旅行用に良さそうです



B!
★Neptune Apex★ | コメント:(2) | トラックバック:(0)

水換え用のRO水を自動でためる&ALD

2017-02-25
水量が250Lから470Lに増えたので自動給水を改善しました。以前の記事は「RO水を自動的にためる&自動給水」を見てください

新しい水槽はこんな感じです。250LのときはKZ Saltだと30Lで十分でした。水を溜めるのも1時間程度でできていました。
しかし水量470Lだと10%水換えしようと思うと47L、15%だと70Lにもなります。70L水を溜めるとメンブレンが古いのもあって4時間ぐらいかかります。
20170225_005.jpg

4時間もじっと待ってるのはもったいないので、自動的にRO水を溜められるようにします。

■バケツ
70Lの丸バケツも持っていますが、結構スペースが必要なのでベルク 角型ペール 90Sを購入しました。蒸発やゴミの侵入を防ぐためにフタ付きです
20170225_030.jpg

中は目盛付きです
20170225_040.jpg

水槽近くの壁ぎわのスペースに収まります。バケツはカーテンで見えなくなるので、置きっぱなしでも普段は気にしなくて済みます
20170225_050.jpg

アクリルトレーで万が一バケツから水が溢れても受け止めます。水槽を譲り受けたときにこのトレーも一緒にもらいました。最初は何のためのトレーなのかわからなかったのですが、半月経ってバケツ用だとようやく気付きました
20170225_055.jpg

RO水のハードチューブを通すために、フタに穴を開けます
20170225_060.jpg

そのあとはさみを差し込んでまわせば適正な大きさに簡単に広げることができます
20170225_070.jpg

エルボ等で抜けないようにします
20170225_080.jpg

こんな感じで、水用電磁弁を取り付けてあげます
20170225_090.jpg

これだと水の音がうるさかったので
20170225_100.jpg

少し出口を長くして、壁を伝うようにしたら静かになりました
20170225_105.jpg

■自動給水の仕組み

自動でRO水を作る仕組みはこんな感じです。前回との変更点は、「プレッシャータンクを無くした」ことと、「給水コントロールをタイマーでは無くAPEXから行うようにした」ことぐらいです。クリックで拡大します
20170225_010.jpg

自動給水は、従来からあったサンプ用のルートと、新たにバケツに水を溜めるルートを作りました。クリックで拡大します
20170225_020.jpg

プレッシャータンクはあった方が便利なのですが、設置スペースが結構必要なので出品しました。このためチェックバルブが必要なくなりましたがまぁあってもいいのでそのままです

今まではAPEXのEnergy Bar 2本で何とかやっていましたが、自動給水を実現するため1本追加して、Energy Bar 3本にしました。かなり前にオークションに出品されていたものを予備として買っておいたものを使いました

■バケツ用のフロートスイッチとマウンタ

バケツ用のフロートスイッチを購入しました。型番はRSF54Y100JCで、海外から取り寄せるより安いです
20170225_110.jpg

水が浸入しないようシールされているものを選びました
20170225_120.jpg

フロートスイッチのマウンタは無いので、2mmのアクリル板を曲げて作りました。アイロンで温めると結構簡単に曲げることができます。アクリル板を曲げるときは専用のヒーターがあると綺麗にできますが、まああまりじっくり見るものでも無いので…
20170225_130.jpg

ケーブルを通すために、はさみを使って穴を広げました。あまり力を入れると割れそうで不安
20170225_140.jpg

フロートスイッチを取り付けるとこんな感じ。フロートスイッチは上がらないことがあるので、二つ取り付けます
20170225_150.jpg

バケツに取り付けてみると良い感じです。バケツは90Lまで入りますが、そこまでは要らないので70Lのところにフロートスイッチを置きます
20170225_160.jpg

■APEXのAdvanced Leak Detection ModuleとI/O Breakout Box購入

APEXのモジュールを購入しました。
20170225_170.jpg

Advanced Leak Detection Moduleは、水漏れを検知するモジュールです
20170225_180.jpg

今まではI/O Breakout Boxに自作や他社の装置を取り付けて水漏れチェックしたりしていましたが、専用モジュールが発売されています。4つ接続できます
20170225_190.jpg

センサー部はこんな感じ
20170225_200.jpg

裏側はこんな感じ。仕組みはシンプルで、水等で通電するとAPEXがそれを検知します。なのでただのむき出しの導線でも同じことができます。
20170225_210.jpg

センサーはキャビネットなどの下に入れられる薄いものと
20170225_220.jpg

厚いものがあります。厚い方は水槽の裏辺りに置きます
20170225_230.jpg

フロートスイッチを二つ取り付けるため、I/O Breakout Boxを購入しました。こちらは6つ接続できますので余裕があります
20170225_240.jpg

■ALD取り付け

ALD Moduleの裏側はこんな感じになっていて、ネジ止めできます
20170225_250.jpg

ネジ止めは面倒なのでマジックテープを使いました
20170225_260.jpg

センサー部はバケツのトレイに置いて、フロートスイッチが2つとも異常になった場合でも最後の歯止めができるようにします
20170225_270.jpg

ALDを接続するとI/O Breakout Boxと同じ感じでスイッチとして認識されます
20170225_360.jpg

■フロートスイッチ取り付け

フロートスイッチはI/O Breakout Boxと接続すればOKです
20170225_370.jpg

ケーブルの延長をするときはねじ込みコネクターとか使うと楽ですね
20170225_280.jpg

ねじるだけで接続できるのは非常に楽です。逆に回せば取り外しできます
20170225_290.jpg

こんな感じになります
20170225_300.jpg

見えにくいですがI/O Breakout Boxの2と3に接続しました
20170225_310.jpg

スイッチはS_WF1、S_WF2という名前にしました。Openは水がたまっていない状態、水位があがってウキがあがるとClosedに変わります。
20170225_380.jpg

■RO水配管変更
いままではプレッシャータンクがあったので結構分岐させていましたが
20170225_320.jpg

今回の変更でシンプルにサンプ行きとバケツ行きだけになりました
20170225_325.jpg

クロノスレイン付近に排水の圧力計を移動させました
20170225_326.jpg

ついでに、水質測定したあとの瓶やシリンジを洗浄するために、流しに配管を追加しました
20170225_327.jpg

■APEXのEnergy Bar配置変更

Energy Barが3つになったので配線が短くなるように改善しました。クリックで拡大します。照明台にいろいろと置けるので、三つ目のEnergy Barをそこに置くようにしました。
20170225_329.jpg

バケツの中は塩を溶かすための水流ポンプとしてコンパクトポンプ1000と、バケツから水槽への給水用のホース付きポンプを設置しました
20170225_330.jpg

あと冬場は塩の溶け方がいまいちなのと、水換えでの水温変化を抑えたいのでヒータを入れてみました。温度固定です
20170225_340.jpg

■APEX Program

RO水をバケツにためる→温度あわせのプログラムを作っていきます。今回Outletの関係性が複雑なのでタイムテーブルにしてみました。クリックで拡大します。
20170225_390.jpg

大前提として、水換えは毎週日曜日に行います。
0時からRO水をため始めて、フロートスイッチで70Lまで溜めたら自動で給水を止めます。
そのあと水流ポンプを自動で動かし、自動でヒーターで温度あわせをします。
朝になったら適温になっているはずなので、塩を入れて溶かします(塩入れるのはどうしても手動)。
午前9時ぐらいに水換えを行いますが多少前後しても大丈夫です

プログラムはこんな感じです。タイムテーブルと組み合わせてみてみてください

-----自動給水タイマー(電磁弁) ROCharge-----
Fallback OFF
Set OFF
If Outlet WT_Charge = ON Then ON
If Outlet ROSValve = ON Then ON
If ALD_WT CLOSED Then OFF

クロノスレインにある電磁弁と加圧ポンプを制御します。ROSValveはサンプへの自動給水の場合で、一日4回ONになります。バケツで水漏れがあったら問答無用でOFFになります

-----みずため電磁弁 WT_Charge-----
Fallback OFF
Set OFF
If Outlet V_WTChTime = ON Then ON
If Outlet V_WTFlt = OFF Then OFF
If ALD_WT CLOSED Then OFF

バケツ用の電磁弁です。日曜日の時間になったらON

-----みずため水流ポンプ WT_Wave-----
Fallback OFF
Set OFF
If Outlet V_WT_WvHt = ON Then ON

バケツの中のコンパクトポンプ1000です。ヒーターと連動

-----みずためから給水 WT_Pump-----
Fallback OFF
Set OFF

バケツから水槽に入れるためのコンパクトポンプ1000です。手動で動かします

-----みずためヒーター WT_Heater-----
Fallback OFF
Set OFF
If Outlet WT_Wave = ON Then ON

バケツの中のヒーターです。空だきしないように制御されています

-----バケツ給水時間 V_WTChTime-----
Fallback OFF
Set OFF
If Time 00:01 to 06:00 Then ON
If DoW -MTWTFS Then OFF
If Outlet V_WTFlt = OFF Then OFF

バケツに水を溜める時間を制御します。DoWはDay Of Weekの略で、曜日を指定するときに使います

-----バケツのフロートスイッチ検知 V_WTFlt-----
Fallback OFF
Set OFF
If S_WF1 OPEN Then ON
If S_WF2 CLOSED Then OFF
Defer 020:00 Then OFF

バケツのフロートスイッチを制御します。フロートスイッチのどちらかがCLOSEDになるとOFFになります。Deferで20分を指定して、水が多めに入るようになっています(ギリギリだとON/OFFを繰り返すことになるので)

-----水流ポンプ&ヒーター V_WT_WvHt-----
Fallback OFF
Set OFF
If Outlet V_WTFlt = OFF Then ON
If Time 09:30 to 23:59 Then OFF
If DoW -MTWTFS Then OFF

ヒーターを制御します。曜日の指定と、フロートスイッチを条件にしていますので、9時30分を過ぎたら自動でOFFになりますし、9時30分前に水換えをはじめたときでも、水が減ってフロートスイッチがOpenになるので、ちゃんとヒーターは切れます
空焚きしたらヒーターは使えなくなってしまうので重要ですね

■動作チェック

プログラムが期待どおりに動くかどうかのチェックは重要ですね
20170225_340.jpg

掃除は35Lバケツが二つなので結構隅々までできますね
20170225_350.jpg

といった感じになりました。なお、水を溜めるバケツは使用後、タオルで拭いています。水が付いたままだと夏場はカビるので…

サンプからの排水用ポンプとフロートスイッチ、排水配管を設置すれば、
RO水をバケツにためる→温度あわせ→塩を入れる→水槽の水を適量排水→バケツから水槽に水を入れるといった感じで、塩を入れる部分以外は自動になりますね
まぁサンプや底砂掃除ができなくなるのでそこまではやらないと思いますが… ベルリンシステムで水換えのみで維持している方には良い方法かもですね



B!
★Neptune Apex★ | コメント:(2) | トラックバック:(0)

APEXで水温を季節変動させる

2016-09-10
APEXは季節変動の水温データを持っているので、それに水槽の水温を連動させる方法について説明します。

海は温度が安定していると言われますが、それでも季節で温度が変化しています。季節変動させることで水槽環境もより自然に近付けることと、省エネを狙います

APEXでもっているのは、サンゴの生息地であるインドネシア付近の海水温データです
20160910_070.jpg

APEXではSeason Tableとして、毎日の日の入り、日の出、月齢、そして海水温度をこんな風に持っています。なお下の方で設定を編集することができます
20160910_020.jpg

この水温データを年間グラフにするとこんな感じです。最高で8月に26.9℃、最低で2月に23.8℃となっています。これに連動させると毎日緩やかに温度が変化していくことになります。生体に急激な変化を与えずにゆっくり変えることができるわけです
20160910_060.jpg

ところで季節変動させると何故省エネになるのでしょうか
真冬に室温が18℃、水槽のヒーター設定が25℃、24℃、23℃設定の水槽があったとしたら、どの水槽が一番冷めにくいかというと、23℃設定の水槽が冷めにくいです
つまり、室温との温度差が少ないほど、温度変化しにくくなります

この法則は感覚でなんとなくわかると思います。どれぐらい違いが出るかについては、アイザック・ニュートンが冷却の法則として数式化していますのでシミュレーションが可能です。
この数式に従うと、1時間で25℃の水槽の水が約1℃下がる水槽があったとして、ヒーター設定を下げるほど温度が下がりにくくなります(Excelで数式を元にフラグ化しました) 25℃設定から23℃設定に変えると3割違ってきますね
※クリックで拡大します
20160910_010.jpg

というわけで、夏場は水温を高めに、冬場は水温を低めに設定してあげると室温との温度差が小さくなり、温度変化しにくくなることでクーラーとヒーターの稼働率が下がり省エネになるわけです
※ここでは温度差だけに着目していますが、熱が逃げる表面積を減らす、ガラス水槽とアクリル水槽の違い、ポンプなどの機材有無でも当然変わります。冷却の法則ではそれらに該当する定数部分に影響します

さて、Season Tableを基準に水温設定してしまうと最高で8月に26.9℃、最低で2月に23.8℃なのでちょっと高いですね
20160910_030.jpg

Season Tableから-1℃のところを基準にすることで、最高で8月に25.9℃、最低で2月に22.8℃を基準として、±0.5℃の範囲を設定温度としたいとおもいます
20160910_040.jpg

■プログラム
クーラーとヒーターの温度設定はこんな感じです。RT+がSeason Tableの温度で、それに±で相対温度を設定してあればOKです

-----Chiller 修正前-----
Fallback OFF
If Temp > 25.4 Then ON
If Temp < 25.1 Then OFF

If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:20 Then ON
Defer 001:00 Then OFF
If Outlet 2ndPump = ON Then OFF


-----Chiller 修正後-----
Fallback OFF
If Temp > RT+-0.5 Then ON
If Temp < RT+-0.8 Then OFF

If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:20 Then ON
Defer 001:00 Then OFF
If Outlet 2ndPump = ON Then OFF


-----Heater 修正前-----
Fallback OFF
If Temp < 24.6 Then ON
If Temp > 24.9 Then OFF

If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:20 Then ON
Defer 001:00 Then OFF


-----Heater 修正後-----
Fallback OFF
If Temp < RT+-1.3 Then ON
If Temp > RT+-1.0 Then OFF

If FeedA 002 Then OFF
If FeedC 002 Then OFF
If FeedD 002 Then OFF
Defer 000:20 Then ON
Defer 001:00 Then OFF


というわけで、この日の22時から季節変動するようになりました。この日はプログラム変更初日なので結構変化が大きいですが、以降は0.1℃単位でほんの少しずつ変化することになります
20160910_050.png

季節変動させることで冬場は水温が低めになります。サンゴも魚も問題ない水温ではあります。ただし水温が下がることによってサンゴの成長は遅くなると考えられ、従ってKHの変動も緩やかになるためカルシウムリアクターの調整に注意した方が良さそうです



B!
★Neptune Apex★ | コメント:(0) | トラックバック:(0)
 | ホーム | Next »

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