はじめに
「洗濯が終わったのを忘れて、濡れた洗濯物を洗濯機に5時間も放置してしまった...」
「うわ...クッサ...」
そんな経験、ありませんか?ありますよね?
でも洗濯機にスマートホームの機能がついたものを買うのは流石に高価だ...
ということで、今回 「SwitchBot プラグミニ + AWS + LINE Bot」 を組み合わせて、月額たった14円で動作する洗濯機完了通知システムを作ってみました。
初投稿です。AWSはビギナーレベルです
やりたいことの概要
主な機能
- 洗濯完了の自動検知 (通常洗濯50分くらいと洗浄4分くらいを検知したい)
- 家族全員への同時通知 (ブロードキャストしたい)
- 夜間通知停止 (23時〜7時あたりは洗濯機使わない)
- 重複通知防止 (一度通知したらしばらくクールダウン)
構成
洗濯機 → SwitchBotプラグミニ → AWS → LINE通知
- SwitchBot プラグミニ: 電力測定して洗濯機の動作状態を監視
- AWS Lambda: 2分間隔で電力データ取得・完了判定
- DynamoDB: 電力データの蓄積・分析
- LINE Bot: 家族全員への一斉通知
技術選定の理由
SwitchBot プラグミニ
選定理由:
- リアルタイム電力測定 (1W単位)
- API提供で自動化可能
- 初期費用のみ(Amazonで1600円くらい)
- 高い測定精度
重要: 旧型のSwitchBotプラグは電力測定機能がないため、必ず「プラグミニ」を選択してください!私は旧型でいけると思っていたので、ずっと不要な苦戦をしていました。
AWS
選定理由:
- 無料枠がとても大きい
- サーバーレス構成で保守不要
- 高い可用性
- 従量課金で無駄なし
- EC2しか使ったことなくて、勉強のためになんかやろうと思ってた
低コストなのは理想的でしたし、個人的に最近AWSプラクティショナーの勉強をしていることもあり、AWSでいこう。という流れでした。
LINE Bot
選定理由:
- 既存のLINEアプリを活用
- ブロードキャスト機能:Botを友達登録するだけで楽に通知可能
- 月1,000通まで無料:そんな回数通知しないので十分
- 追加アプリ不要
システムアーキテクチャ
全体構成図
フロー
- EventBridge: 2分間隔でLambda関数を実行
- Lambda: SwitchBot APIから電力データ取得
- DynamoDB: 電力データを時系列で保存
- 分析: 過去データから動作パターンを分析
- 完了判定: 電力変化パターンで完了を検知
- LINE通知: 条件を満たした場合のみ送信
通常洗濯 (45分):
20:00 2.1W 待機
20:02 180W 洗い開始
20:30 450W 脱水ピーク
20:45 3.6W 完了
20:47 2.1W 待機
20:49 2.1W 待機 ← 3回連続低電力で完了を検知
洗濯槽洗浄 (2-3分):
21:07 2.1W 待機
21:09 331.8W 洗浄開始 ← 高電力検知
21:11 3.6W 洗浄完了 ← 低電力復帰
21:13 2.1W 待機 ← 完了判定
判定部分(python)
def detect_operation_completion(current_power, recent_data):
# 1. 現在が低電力状態か (5W以下)
if current_power > 5:
return False
# 2. 過去に高電力期間があったか
high_power_found = any(data['power'] > 50 for data in recent_data)
if not high_power_found:
return False
# 3. モード別完了判定
if is_cleaning_mode():
# 清掃: 1回の低電力確認で完了 (2分)
return consecutive_low_count >= 1
else:
# 洗濯: 3回連続の低電力確認で完了 (6分)
return consecutive_low_count >= 3
ポイント
1. DynamoDBデータ型の注意点
# timestampをintに変換する部分
for item in items:
item['power'] = float(item['power'])
item['timestamp'] = int(item['timestamp']) # Decimal型エラー回避
ハマりポイント
DynamoDBから取得したDecimal型をそのまま時刻計算に使うとエラーになって苦しみます
2. 夜間通知停止の実装
EventBridgeのcron式で解決:
現在の設定: cron(*/2 7-22 * * ? *) # 7時〜22時の2分間隔
コード変更不要で時間制御が可能。アパートに住んでいるので、流石に22時〜7時の間で洗濯をすることはありません。
EventBridgeで定時実行する時間を定めることで、運用経費の低減にもつながります。
コスト分析
月額14円の内訳
| サービス | 月額コスト |
|---|---|
| AWS Lambda | $0.00 (無料枠内) |
| DynamoDB | $0.023 |
| EventBridge | $0.00 (無料枠内) |
| CloudWatch Logs | $0.072 |
| LINE Bot | $0.00 (無料枠内) |
| 合計 | $0.095 (約¥14) |
- 1分間隔に変更: 月額¥29 (2倍)
- 24時間監視に変更: 月額¥21 (1.5倍)
-
10年間運用: 累計¥1,700
少し詳細にログを出しているため、CloudWatchの費用割合が高めです。
結論: 家庭用途くらいだったら実質無料!
まとめ
実現できたこと
- 月額14円という低コスト(さらに安くできる可能性も秘めている)
- 家族への確実な通知
学んだこと
AWSすごい
- 個人でもかなり簡単に定時実行システム構築が可能
- 無料枠を活用した実質無料運用。年間で自販機の飲み物1本分くらい
使用技術
- SwitchBot API: https://github.com/OpenWonderLabs/SwitchBotAPI
- AWS Lambda: Python 3.11
- LINE Messaging API: https://developers.line.biz/ja/services/messaging-api/

