少々長文であるが、最後にどんでん返しもあるので、トイレの中や時間を持て余しているときに読んで頂ければ幸いである。
現在居住している賃貸集合住宅はプロパンガスである。
そして、とんでもないぼったくりガス会社の供給を受けている(2026-04時点で1㎥あたりほぼ1000円である)。
憤懣やるかたないため、できる範囲で対抗策を講じることにした。
1つは電化である。シャワー以外はすべて電化した。
在宅勤務なのでシャワーは外出するときのみ利用し、使用量を半減する成果を上げられた。
ちなみに週1度の頻度である。刑務所でさえ週3回は入浴するらしいので、それ以下の生活を強いるぼったくり業者に怒りがおさまらない。
もう1つは灯油である。灯油は各部屋に供給されるが、その供給業者もぼったくりガス会社であった。これはまったく予期していなかった。
ガスであれだけ貪り食う連中だ、灯油代も容赦なく上乗せするだろう。
部屋には備え付けの灯油ストーブがあるが、これもぼったくりガス会社の設備なのである。喜々として灯油代に上乗せしてくるだろう。
さらにこのストーブには設定温度に達した時の自動停止機能がない。
ストーブは定価十数万円の10年程度前のものだ。50年前とかならわかるが、10年前で自動停止機能がないとかありえない話である。
室温がバリ島になってもストーブはバリバリ燃焼し続けるのだ。
私を含め大抵の人は停止するのが面倒なのでそのまま燃焼を続けるだろう。つまり灯油の消費量が増える。
これを見込んで自動的停止機能がないストーブを設置したものと推測する。
ぼったくりガス会社は天にも昇る気持ちだろう。いや、昇天しきって白目を剥いているだろう。
絶対に許さない。昇天なんてさせない。看過するわけにはいかない。
そして、ストーブのボタンを温度に基づきON/OFFするホームオートメーションを構築するに至ったのである。
ここにお金と労力をかけるくらいなら、灯油代のほうが安くないかと思われるかもしれない。
確かに金額だけを見るとそうなるかもしれない。
しかし本質は「ぼったくりガス会社への怒りの反撃」だ。
ホームオートメーションの構築は、私の勝利と同義なのである。
このページは勝利の証跡、つまりどのようにホームオートメーションを実現したのかを示す。
※1:自動起動とは、燃焼を行うことではなく、室温監視を行い必要に応じ燃焼を始めたり消火したりする状態にすることである。
※2:本システムが物理ストーブの制御を喪失した時は、(物理ストーブ自体に安全動作する機能があることを前提に)それ以上の制御を行わずエラー状態に遷移する。
※3:俗世ではクラウドでホームオートメーションを実現するのが一般的らしいが、その多くは Azure や AWS といった外部基盤に依存しており、障害が起きれば自宅の機能まで巻き添えになりかねない。
また、得も知れぬ会社のサービスに生活の制御を委ねれば、仕様変更や廃止の影響を避ける術もない。私にはどうにも受け入れがたい。
| 機材 | 金額 | 説明 |
|---|---|---|
| Raspberry Pi 4 Model B 8GB | (失念) | 制御システムの本体。Home Assistantをインストールする。 元々はext4のUSB-SSDからファイルを取り出す為に使用していたが、現在それはWSL2で代用している。 |
| 256GByte 2.5inch SSD | ¥6,980 | Pi4のメインストレージとして使用。マイクロSDではすぐに寿命に至ってしまう可能性が高い。 余っていた2.5inch HDDで試行したがUSBポートからの電力が足りず正常動作しなかったのでSSDにした。 |
| USB SSDケース | ¥959 | SSDをPi4にUSB接続する。 |
| TP-Link TP110M 2個セット | ¥2,900 | ストーブの稼働状況を電力量で判断するために用いる。Matter対応。2.4G WPA/WPA2-Personalで接続 |
| M5Stack公式ATOMS3 Devキット 2個 | ¥7,960 | 停止ボタンとサーボ制御用で2個 / 2.4G WPA3で接続 ファームウェアはHome AssistantのAddon ESPHome Builderで作った(設計は自分、製造はGemini)。 |
| M5ATOMS向け 4サーボ接続基板キット | ¥1,200 | ATOMS3にサーボを接続する。 少しだけはんだ付けが必要であるが、これがあるとサーボのコネクタをそのままATOMS3に接続できる。 |
| MG90Dデジタル・マイクロサーボ | ¥1,756 | ストーブの電源ボタンを押下するために使用/茶(GND),赤(+5),黄(PWM) |
| L字ステー | ¥620 | サーボをストーブの押しボタン位置に取り付けるため使用 |
| テトラ サーボ取付L金具Sサイズ | ¥785 | サーボをL字ステーに取り付けるために使用 |
| タミヤ ミニ四駆用 620ボールベアリング 2個セット | ¥600 | サーボアームに取り付けてストーブのボタンを押下するために使用 |
| uxcell 十字穴付ボルト ナット ワッシャー セット M2*15mm | ¥824 | サーボアームにボールベアリングを取り付けるために使用 |
| オールメタルサーボアーム 9g 20T | ¥751 | ストーブのボタン押下に負けてアームが曲がらないようにメタルサーボアームを用いる |
| ヤザワ コンセントタップ 2個口 | ¥804 | パイロットランプ付きの2口コンセント。開発時にコンセントの通電状況を目視するために使用 |
| スマホ | (省略) | これ用に購入したわけではない。普段使用しているスマホだ。GUIを表示し操作を行うために使用 |
| 状態 | 図 | 意味 |
| 初期化 | ![]() | 起動する準備を行っている状態 |
| 監視中 | ![]() | 室温を監視している状態 |
| 燃焼 | ![]() | ストーブのSWを押下(ON)し、燃焼を始めた状態 |
| 消火 | ![]() | ストーブのSWを押下(OFF)し、消火を始めた状態 |
| エラー | ![]() | 何等かのエラーが発生 |
| 待機 | ![]() | ストーブの監視・制御を行っていない状態 |
| (疎通不可) | ![]() | Home Assistantと疎通が取れなくなった |
正常系の状態遷移の一例を記す。
| エンティティ名 | 型 | 備考 |
|---|---|---|
| sv_atoms3_lastupdate | input_datetime | SW-ATOMS3のハートビート時間を格納する。SW-ATOMOS3の死活監視に用いる。 |
| sv_autotime | input_datetime | 使用者が指定した自動起動時間(時分)を保持する。 |
| sv_cnt_burn | input_number | 燃焼継続カウンタ |
| sv_cnt_burn_poweron | input_number | PowerOnリトライカウンタ |
| sv_cnt_burn_retry | input_number | 燃焼リトライカウンタ |
| sv_cnt_putout | input_number | 消火継続カウンタ |
| sv_cnt_putout_retry | input_number | 消火リトライカウンタ |
| sv_cnt_sensor_error | input_number | センサー取込連続カウンタ |
| sv_debug | input_boolean | 開発・デバッグモードを表すフラグ。 |
| sv_directive_idle | input_boolean | 待機状態への遷移を予約するならTrueを指定する。 |
| sv_enable_autotime | input_boolean | 自動起動を有効にするならTrueを指定する。 |
| sv_forcesync_idle_btn | input_button | ダッシュボードの同期ボタン(待機)に連動する。 |
| sv_forcesync_burn_btn | input_button | ダッシュボードの同期ボタン(監視中-燃焼)に連動する。 |
| sv_forcesync_putout_btn | input_button | ダッシュボードの同期ボタン(監視中-消火)に連動する。 |
| sv_gui_nhour_btn | input_button | ダッシュボードのタイマーボタンに連動する。 |
| sv_gui_stopcont_btn | input_boolean | ダッシュボードの自動起動ボタンに連動する。 |
| sv_next_autostart | input_datetime | svtm_autostartのタイマー値を設定するために使用している。 ヘルパー(グローバル変数)ではなくローカル変数で足りる使途であった。 |
| sv_nhour_text | input_text | 2時間タイマーの残り時間をテキストで保持する。ダッシュボードの表示に用いる。 |
| sv_note | input_text | エラー要因テキストを保持する。ダッシュボードの表示に用いる。 |
| sv_plug_root_onoff | input_boolean | ストーブに接続したスマートコンセントの電源状態(ON/OFF)に連動する。 |
| sv_plug_root_power | input_number | ストーブに接続したスマートコンセントの電力値に連動する。 |
| sv_sts | input_select | 主状態を保持する。 |
| sv_sts_keep | input_text | 物理ボタンのPress~Release間で主状態の変化を検知するために主状態を一時保存する。 |
| sv_sts_sensor | input_boolean | 動作に必要なATMOS3等がすべてONLINEならTrueを設定する。 |
| sv_sts_sub | input_text | 副状態(燃焼・消火)を保持する。 |
| sv_temp | input_number | 現在の室温を保持する。 |
| sv_temp_debug | input_number | 開発・デバッグモードでは、この値をsv_tempとして用いる。 |
| svtm_pull_value | timer | センサー取込タイマー |
| svtm_monitor | timer | 監視タイマー |
| svtm_mon_poweron | timer | PowerOn監視タイマー |
| svtm_burn | timer | 燃焼タイマー |
| svtm_mon_burn | timer | 燃焼監視タイマー |
| svtm_putout | timer | 消火タイマー |
| svtm_mon_putout | timer | 消火監視タイマー |
| svtm_buzzer | timer | ブザー鳴音タイマー |
| svtm_2hour | timer | 2時間タイマー |
| svtm_autostart | timer | 自動起動タイマー |
| sw_atomos3_lcd_brightness | input_number | SW-ATOMS3のLCDの明るさに連動する。 |
| servo_atmos3_lcd_brightness | input_number | SERVO-ATOMS3のLCDの明るさに連動する。 |
| スクリプト名 | 概要 |
|---|---|
| check_sensor_status | ATOMS3等がONLINEであるか検査し、OFFLINEならエラー状態へ遷移する。 |
| clear_all_counter | 各種カウンタ(sv_cnt_~)をゼロクリアする。 |
| event_dispatcher | 前述したイベントマトリクスに基づき各種スクリプトへ呼び出す。各スクリプトの実行は直列化されている。 |
| event_dispatcherAsync | 前述したイベントマトリクスのsvon_press_stopcontイベントだけは本スクリプトで処理する。 |
| get_constants | 各種定数を取得する。 |
| save_sensor_values | ATOMS3等の状態や値をヘルパーに書き込む。 |
| save_sts | sv_stsをsv_sts_keepへ保存する。 |
| set_autostart | 現在の時刻に基づき、自動起動タイマーを開始する。 |
| start_putout | 消火を始める。 |
| svact_2hour | 2時間タイマーの満了に伴う消火を始める。 |
| svact_autostart_onoff | 自動起動をON→OFFしたり、OFF→ONしたりする。 |
| svact_autostart_through | 燃焼・消火中に自動起動タイマーが満了した時に、先行処理の終了後に監視状態へ遷移する準備を行う。 |
| svact_burn | ストーブの燃焼が継続していることを確認する処理を開始する。 |
| svact_buzzer | スマホを鳴音する。 |
| svact_change_autostart | 自動起動時間が変更されたとき、起動用タイマーを再設定する。 |
| svact_initialize_2 | センサー取込タイマーを開始し、初期化状態へ遷移する。 |
| svact_mon_burn | ストーブの燃焼が始まったことを電力で判定する。 |
| svact_mon_poweron | ストーブの電源(スマートコンセント)がONであることを確認する。 |
| svact_mon_putout | ストーブが消火した事を電力で判定する。 |
| svact_monitor | 室温に基づき燃焼や消火を始める。範囲内の室温なら監視を継続する。 |
| svact_push_stopcont_1 | 監視状態で停止・再開ボタン(ダッシュボード)が押下されたので、消火を開始し待機状態への遷移を予約する。 |
| svact_push_stopcont_2 | 燃焼または消火状態で停止・再開ボタン(ダッシュボード)を押下された。待機状態への遷移を予約する。 |
| svact_push_stopcont_3 | 待機状態で停止・再開ボタン(ダッシュボード)が押下されたので、監視状態へ遷移する。 |
| svact_putout | 消火状態を電力で監視することを始める。 |
| svact_release_stopcont_1 | 監視状態で停止・再開ボタン(物理ボタン)が押下されたので、消火を開始し待機状態への遷移を予約する。 |
| svact_release_stopcont_2 | 燃焼または消火状態で停止・再開ボタン(物理ボタン)を押下された。待機状態への遷移を予約する。 |
| svact_release_stopcont_3 | 待機状態で停止・再開ボタン(物理ボタン)が押下されたので、監視状態へ遷移する。 |
| svact_startmon | 監視タイマーを開始し、監視状態へ遷移する。 |
| スクリプト名 | トリガー |
|---|---|
| svon_startup | HomeAssistantが起動した |
| svon_pull_value | センサー取込タイマー満了 |
| svon_monitor | 監視タイマー満了 |
| svon_mon_poweron | PowerOn監視タイマー満了 |
| svon_burn | 燃焼タイマー満了 |
| svon_mon_burn | 燃焼監視タイマー満了 |
| svon_putout | 消火タイマー満了 |
| svon_mon_putout | 消火監視タイマー満了 |
| svon_buzzer | ブザー鳴音タイマー満了 |
| svon_press_stopcont | SW-ATOMS3のボタンを押下 |
| svon_release_stopcont | SW-ATOMS3のボタンを開放 |
| svon_push_stopcont | ダッシュボードの停止・開始ボタン押下 |
| svon_forcesync_burn | ダッシュボードの同期(監視中-燃焼)ボタン押下 |
| svon_forcesync_putout | ダッシュボードの同期(監視中-消火)ボタン押下 |
| svon_forcesync_idle | ダッシュボードの同期(待機)ボタン押下 |
| svon_push_2hourbtn | ダッシュボードの2時間タイマーボタン押下 |
| svon_2hour | 2時間タイマー満了 |
| svon_autostart_onoff | 自動起動ボタン押下 |
| svon_autostart | 自動起動タイマー満了 |
| svon_change_autostart | 自動起動時間を変更したとき |
| svon_connect_servo_atmos3 | SERVO-ATOMS3がHomeAssistantにONLINEしたとき |
| svon_connect_sw_atmos3 | SW-ATOMS3がHomeAssistantにONLINEしたとき |
| svon_nhour_interval | 2時間タイマー稼働中は1秒毎にトリガーされる |
| svon_servo_ping | SERVO-ATOMS3からのハートビート(毎秒)受信 |
| svon_change_servo_atmos3_lcd_brightness | SERVO-ATOMS3のLCD明るさに連動するヘルパー値が変更されたとき |
| svon_change_sw_atmos3_lcd_brightness | SW-ATOMS3のLCD明るさに連動するヘルパー値が変更されたとき |
| デバイス | 概要 |
|---|---|
| SW-ATOMS3 | 状態表示と停止・再開(物理)ボタンを持つ。 |
| SERVO-ATOMS3 | デジタルサーボを用いてストーブの電源ボタンを押下する。物理ボタンは使用していない。 |
残作業は、下記パラメータの決定である。
まだストーブを使用する時期ではないので、実測と調整は秋になるだろう。
| 定数 | 概要 |
|---|---|
| power_threshold | ストーブが灯油を燃焼させているときと、そうではないときの電力の閾値 |
| limit_continue, limit_retry_burn | 燃焼を開始してから、燃焼したと確定できるまでの時間 |
| limit_continue_putout, limit_retry_putout | 消火を開始してから、消火したと確定できるまでの時間 |
記:2026-08-04
記:2026-11-07