6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

月額14円で実現。SwitchBot + AWS + LINEで作る洗濯機の完了通知

6
Posted at

はじめに

「洗濯が終わったのを忘れて、濡れた洗濯物を洗濯機に5時間も放置してしまった...」
「うわ...クッサ...」

そんな経験、ありませんか?ありますよね?
でも洗濯機にスマートホームの機能がついたものを買うのは流石に高価だ...

ということで、今回 「SwitchBot プラグミニ + AWS + LINE Bot」 を組み合わせて、月額たった14円で動作する洗濯機完了通知システムを作ってみました。

image.png

初投稿です。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通まで無料:そんな回数通知しないので十分
- 追加アプリ不要

システムアーキテクチャ

全体構成図

messageImage_1755187122352.jpg

フロー

  1. EventBridge: 2分間隔でLambda関数を実行
  2. Lambda: SwitchBot APIから電力データ取得
  3. DynamoDB: 電力データを時系列で保存
  4. 分析: 過去データから動作パターンを分析
  5. 完了判定: 電力変化パターンで完了を検知
  6. 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本分くらい

使用技術

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?