メモ帳DPA

ぐぐってあまり引っかからないような何かがあったら書いたりする

おうちハック 風呂編:給水の自動化とリモート操作

風呂に入ろうとすると、風呂まで移動して湯を投入して一度戻って数十分待ってから再度風呂に行く必要がある。
日々使うものの中では結構手間のかかる部類に入るので、面倒だしどうにかすることにした。

最終的に、以下を出来るようにした。
・指定時間に風呂に自動で湯を入れる
・スケジュールのリモート調整
これで帰宅からの即入浴が出来るようになった。

他に試したもの

これまでに他に以下の装置を試した。どれも悪くはなかったが満足も出来ていなかった。

そもそも既存の風呂には、常時入れるものや、給湯、足し湯、追い焚き、洗浄まで自動のもの等、かなり高性能なものがいろいろあるらしい。
ただ、既にユニットバスとして風呂がある環境には導入のハードルがあまりにも高すぎるので、あるもので妥協していくほかない。

外付け24時刊風呂(湯美人)

風呂に突っ込んでおくと殺菌とゴミ除去しながら常時保温する装置。


ヤフオクで中古を買ったが1年ちょいで壊れてしまった。
以下のような欠点があったものの、総合的には割と良い品だったと思う。

  • 定価4.8万とそこそこ高い
  • かなり場所をとるので、風呂が広くないと入るたび出し入れが要る
  • 複数の消耗品のメンテが必要、かつ入手性も悪く、値段も高い (フィルタ\1575、活性炭\3675、抗菌ボール\8400)
  • 外から電源引っ張るので、扉が閉じられなくなる
  • 湯のクリーニング効果はあるものの、それなりに汚れは溜まっていくし徐々にぬめる

今回の方式とは一長一短だけど、今思うとこれをもう一回買うのもありだった気もする。

自動で給水停止する蛇口(バスピッター)

蛇口に取り付けて浮きを浴槽内に垂らしておくと、指定水位で止めてくれる。

1000円ちょいにしては得られる効果はなかなかだと思う。

普通に蛇口使いたい時に邪魔なのが欠点だった。
また、お湯出しに風呂に一度行かないとならないことは当然特に改善されない。

散水タイマ(GTA111)

庭の植物に自動で水やりするための装置。
時刻曜日をスケジューリングして自動で給水できる。

これで自動的に湯を用意してくれる。
ただスケジュールが固定されるので、装置の設定時間に縛られることになり結構不便だった。
毎日同じ時間に帰れればいいのだけど、例えば残業が発生して家に帰ると水風呂が待っているので悲しみが生まれることになる。

方法

いろいろ検討した末、以下の装置を風呂に付けることにした。
f:id:de0:20170219085744j:plain

これは、植物の水やりをPCから一括管理できるようにする装置で、設定したスケジュールや水分レベルやに応じて水道を開閉してくれる。別に風呂用のものではないんだけど、PCから水を制御出来る装置はこれくらいしか見つからなかった。

電源の確保が難しい上さらに防水もクリアする必要があるので、風呂向けの仕組みを自分で作るのは部屋の装置よりかなり難易度が高い。
介護ベッドの制御なんかの際には分解してリレーくっつけて終わりみたいな具合に雑に解決出来たが、風呂だとそうは行かないので、風呂側は既存の装置を使うのが一番簡単そうに思う。

制御

この装置はPCにドングルを挿して、付属の専用アプリケーションから制御する。グラフの参照、スケジュール/条件の変更、手動での給水がPCから行えるようになっている。
f:id:de0:20170218234643j:plain
グラフの参照
f:id:de0:20170218234647j:plain
スケジュールの調整
f:id:de0:20170218234645j:plain
手動実行

複数端末を同時管理でき、結構細かく情報が取れて条件も複数組めるので、植物に使う場合なかなか便利そうではある。
でも今回は手動実行しか使わないんだけどね。

手動給水のマクロ化

ドングルにどういう操作を行っているのかはよくわからず、CLIも用意されていないので、仕方なくAutohotkeyマクロで手動給水をクリック操作で叩かせる力技でどうにかすることにした。

bath(){
 	winactivate, 水やり設定
	Click, L, D, 200,750, %y%
	Sleep 100
	Click, L, U
	Sleep, 1000

 	winactivate, 今すぐ水をまきます
	Click, L, D, 120,90
	Send,^a{BackSpace}
	Send,20
	Send,{Tab}{Enter}
}

制御アプリはAdministrator権限で動いている。
これを一般ユーザ権限で動作するマクロから動かそうとすると、うまいこと動いてくれなかった。どうもAHKの仕様でAdmin動作のアプリを対象に取れないらしい。

タスクスケジューラに最上位権限付きで登録した上で、schtasksから呼べば良いようなので仕方なくそうした。
参考: バッチファイルを常に管理者として実行する方法 - 気になったこと日記

bath_runasroot(){
	run,C:\Windows\System32\schtasks.exe /run /tn mytasks\風呂
}

これを呼び出せば風呂場まで行かずともホットキー操作で風呂が汲める。やったね。

WebUI

装置自体にスケジュール機能は付いてはいる。
ただ、帰宅タイミングは毎日一定というわけではないため、時間が固定だとかなり不便だった。
スケジュールがいつでもいじれれば良いので、ブラウザから制御できるようにした。

f:id:de0:20170219084516p:plain

手の込んだ構成は作るのがめんどくさいし、別にリアルタイム性を要するものでもないので最小限の構成にした。以下の3つで出来た。

  • 時刻書いたtxt
  • txtを編集するページ
  • txtを定期取得してマクロを叩くbat
フロント

単にテキストをいじるだけのphpを書いた。以下のためのフォーム3つと、それに対応する各1行の処理で済んだ。

  • 時間変更
  • 削除
  • 2分後に設定
<?php
$filename = dirname(__FILE__) . '/time.txt';

//保存
if($_POST['time']) file_put_contents($filename,$_POST['time']);

//削除
if($_POST['stop']) unlink($filename);

//今すぐ
if($_POST['now']) file_put_contents($filename,date('H:i',strtotime('+2 minute')));

//読み込み
$time = file_get_contents($filename);
?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name=”robots” content=”noindex”>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>風呂 : <?php echo $time ?></title>
<!-- Bootstrap core CSS -->
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/custom.css" rel="stylesheet">
</head>
<body>
<main>
<div class="container">
<form name="time" method="post" action="<?php echo $_SERVER["SCRIPT_NAME"];?>" >
  <input type="time" name="time" class="form-control"  value="<?php echo $time ?>" step="60">
  <button type="submit" class="btn btn-primary btn-block">設定</button>
</form>
<hr>
<form name="stop" method="post" action="<?php echo $_SERVER["SCRIPT_NAME"];?>">
  <input type="hidden" name="stop" value="1">
  <button type="submit" class="btn btn-danger btn-block">停止</button>
</form>
<hr>
<form name="now" method="post" action="<?php echo $_SERVER["SCRIPT_NAME"];?>">
  <input type="hidden" name="now" value="1">
  <button type="submit" class="btn btn-success btn-block">今すぐ</button>
</form>
</div>
</main>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
</body>
</html>
スケジュール実行するbat

定期的に上記のtxtをcurl(MinGW)で拾ってきて、現在時刻だったら手動給水のマクロを叩くだけ。

@echo off
cd /d %~dp0

:LOOP
    timeout 60
	cls
	
	wget -P tmpdir --no-cache -N http://置いてあるパス/time.txt
	if errorlevel 1 goto :LOOP
	
	SET /P SCHEDULE=<tmpdir/time.txt
	echo Scheduled: %SCHEDULE%

	if %SCHEDULE% == %TIME:~,5% (
		C:\Windows\System32\schtasks.exe /run /tn mytasks\風呂
	)
	
goto :LOOP

給湯器のボタンについて

ちなみに、給湯器のボタンは別に切る必要ないらしいので付けっぱなしにしている。
給湯器はこれまで使う都度起動して終わったら切っていたんだけど、実は起動していてもお湯出す時以外は別にガス代かからなかったらしい。それによって発生する電気代も微々たるものなので、いちいち切るのは止めた。
起動時間分ガスを消費するのは種火式の給湯器の場合のみだそうだ。

おわり

帰る時間に合わせて適当にスケジュールを設定しておけば風呂に直行できてよい。
家に居る場合も、いちいち風呂に往復しなくてもホットキーからリモートで汲めて便利になった。

この辺の仕組み、植物用ではなくちゃんと風呂向けの外付けユニットとして作れば多少は需要ある気がする(少なくとも1個は売れる)んだけど、どっかのメーカでやらないんだろうか。技術的な障害も特に無くメーカのやる気だけで全然余裕で作れるだろうし、力技でいろいろやるより確実にもっと完成度の高いものが出来ると思う。


なお、地味な課題として、風呂の栓の開閉が自動でないという点がある。
風呂の栓を予め手動で閉めておく必要があるので、これをうっかり忘れてしまうとお湯が無駄に排水口に直行して空の風呂が出来る。

もともとボタン操作で栓が開閉出来る風呂もあるようだけど、これは後付けでどうにか出来るものではないので困った。とりあえず朝に栓を閉める習慣を付けてカバーしたが、本当は自動でやってほしいところではある。
水と電源の問題のせいで風呂で取れる選択肢はかなり限られるので意外と難しく、現状は何も思いついていない。どうにかいい方法は無いものか。



関連