Raspberry Pi を使った自動水やりシステム
- 📋 概要
- 🖼️ スクリーンショット
- 🎮 デモ
- 🏗️ システム構成
- 🚀 セットアップ
- 💻 実行方法
- 🧪 テスト
- 🎯 API エンドポイント
- ☸️ Kubernetes デプロイ
- 🔧 カスタマイズ
- 📊 CI/CD
- 📝 ライセンス
Raspberry Pi と電磁弁を使って、植物への水やりを自動化するシステムです。スマートフォンやPCから遠隔操作でき、スケジュール機能による完全自動化も可能です。
- 🌸 リモート制御 - スマホやPCから蛇口の開閉操作
- 💧 流量監視 - リアルタイムでの水流量確認
- ⏰ スケジュール機能 - 時間指定での自動水やり
- 🌤️ 天気連動 - 雨予報時の自動キャンセル機能
- 📊 履歴管理 - 水やり記録の保存と確認
- 📱 通知機能 - Slack連携によるアラート通知
- 📈 メトリクス - InfluxDBへのデータ送信対応
実際の動作を体験できるデモサイト:
🔗 https://rasp-water-demo.kubernetes.green-rabbit.net/rasp-water/
- フレームワーク: Angular 19
- UIライブラリ: Bootstrap 5 + ng-bootstrap
- アイコン: FontAwesome
- 日時選択: Tempus Dominus
- フレームワーク: Flask (Python)
- GPIO制御: rpi-lgpio
- データベース: SQLite
- タスクスケジューラ: Python schedule
- 制御: Raspberry Pi + 電磁弁
- センサー: ADS1015 ADC (流量測定用)
- 詳細: ハードウェア構成の詳細はブログ参照
- Raspberry Pi (GPIO制御が可能なモデル)
- Python 3.10+
- Node.js 22.x
- Docker (オプション)
# システムパッケージ
sudo apt install npm docker
# プロジェクトの依存関係
npm ci
ADS1015ドライバを有効化するため、/boot/config.txt
に以下を追加:
dtoverlay=ads1015,cha_gain=0
cp config.example.yaml config.yaml
# config.yaml を環境に合わせて編集
設定項目の例:
- GPIO ピン番号
- センサーのキャリブレーション値
- 天気予報API設定
- Slack/InfluxDB連携設定
# フロントエンドのビルド
npm ci
npm run build
# Docker Composeで起動
docker compose run --build --rm --publish 5000:5000 rasp-water
# uvのインストール(未インストールの場合)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 依存関係のインストールと実行
uv sync
uv run python flask/src/app.py
# Ryeのインストール(未インストールの場合)
curl -sSf https://rye.astral.sh/get | bash
# 依存関係のインストールと実行
rye sync
rye run python flask/src/app.py
# フロントエンド開発サーバー
npm start
# バックエンド(デバッグモード)
uv run python flask/src/app.py -D
# ダミーモード(ハードウェアなしでテスト)
uv run python flask/src/app.py -d
# Pythonテスト(カバレッジ付き)
uv run pytest
# 特定のテストファイルを実行
uv run pytest tests/test_basic.py
# E2Eテスト(Playwright)
uv run pytest tests/test_playwright.py
テスト結果:
- HTMLレポート:
tests/evidence/index.htm
- カバレッジ:
tests/evidence/coverage/
- E2E録画:
tests/evidence/test_*/
GET /api/valve_ctrl
- バルブ状態取得POST /api/valve_ctrl
- バルブ開閉制御
GET /api/schedule_ctrl
- スケジュール一覧取得POST /api/schedule_ctrl
- スケジュール追加/更新DELETE /api/schedule_ctrl/<id>
- スケジュール削除
GET /api/log
- 水やり履歴取得
GET /api/metrics
- メトリクスダッシュボード(HTML形式)
メトリクス機能では以下のデータを自動収集・記録します:
水やりメトリクス(watering_metrics
テーブル):
- 水やり操作種別(
manual
/auto
) - 散水時間(秒単位)
- 散水量(リットル単位)
- 実行日時
エラーメトリクス(error_metrics
テーブル):
- エラー種別(
valve_control
,schedule
,sensor
等) - エラーメッセージ
- 発生日時
ダッシュボード機能:
- Chart.js による対話的グラフ表示
- 過去30日間の統計サマリー(総回数、手動/自動別、散水量・時間、エラー数)
- 日別・週別時系列分析(散水量・回数・時間の推移)
- 流量分析(リットル/秒)
- Bulma CSS によるレスポンシブデザイン
- パーマリンク機能(セクション別URL)
Kubernetes用の設定ファイルが含まれています:
kubectl apply -f kubernetes/rasp-water.yaml
詳細は設定ファイルをカスタマイズしてご利用ください。
電磁弁の制御ロジックは flask/src/rasp_water/valve.py
の set_state()
/ get_state()
メソッドで実装されています。異なるハードウェア構成に対応する場合は、これらのメソッドを修正してください。
- コンポーネント:
src/app/
配下 - スタイル: 各コンポーネントの
.scss
ファイル
GitHub Actions によるCI/CDパイプライン:
- テスト結果: https://kimata.github.io/rasp-water/
- カバレッジレポート: https://kimata.github.io/rasp-water/coverage/
このプロジェクトは Apache License Version 2.0 のもとで公開されています。
⭐ このプロジェクトが役に立った場合は、Star をお願いします!