Skip to content

4beshinji/hems

Repository files navigation

HEMS — Home Environment Management System

個人生活統合管理システム。LLM/ルールベースの「頭脳」と IoT センサー、プラグイン式音声合成、 AI キャラクターシステムを組み合わせた、個人・家庭向けパーソナル AI アシスタント基盤。

SOMS (commit 1216952) からのフォーク。

Quick Start

cp env.example .env
cd infra
docker compose up -d --build

Features

コア機能

  • ReAct 認知ループ: 30秒サイクル・最大5イテレーションの LLM 推論 + ルールベースフォールバック
  • パーソナライズドチャット: ダッシュボード上でAIキャラクターと直接対話 — 音声入力 (STT) 対応、ナレッジ検索・生体データ等を活用した RAG 回答
  • アラート抑制: タスク作成後の重複生成を防止 (温度30分・CO2 10分)
  • AI キャラクター: YAML 定義の人格 (5テンプレート) + ホットリロード
  • VRM アバター: 3D アバター表示 (hidden / panel / overlay の3モード)、発話連動モーション
  • Ambient Speaker: 5分間隔でセンサーデータに基づく自然な一言を自動生成・発話
  • プラグイン式 TTS: espeak / VOICEVOX / Edge TTS / VoiSona Talk
  • XP ゲーミフィケーション: タスク完了で XP 獲得 (50-500)
  • 買い物リスト: Brain 統合のショッピング管理 + 購入履歴 + MQTT通知
  • イベント自動化: wake_up / arrival / departure / scheduled → ニュース・天気・挨拶を自動実行
  • データマート: SOMS 互換の event_store — raw_events / llm_decisions / hourly_aggregates (730日保持)

外部連携

  • PC/サービス監視 (localcraw): CPU/GPU/メモリ/ディスク + Gmail・GitHub 未読エッジトリガー
  • ナレッジストア (Obsidian): vault 連携 — 検索・書込・決定ログ自動記録
  • 外部ナレッジ (knowledge-bridge): マルチフォーマット文書取込 (MD/Python/JSON/PDF/DOCX/CSV/HTML) — BM25+ベクトル+タイトルブーストのハイブリッド検索 (3-way RRF)
  • Google 連携 (GAS): Calendar・Tasks・Gmail・Sheets・Drive
  • スマートホーム (HA): 照明/空調/カバー/スイッチ/センサー/シーン + スケジュール学習
  • SwitchBot (直接API): HA不要のデバイス制御 + IR リモート (Hub経由)
  • 天気 (weather-bridge): JMA (気象庁) / OpenWeatherMap — 降雨・猛暑アラート
  • ニュース (news-bridge): RSS + Ollama 要約 — 日次ブリーフィング + 緊急ニュース検知 + イベント駆動音声通知

バイオメトリクス・パーセプション

  • バイオメトリクス: Gadgetbridge webhook — 心拍/SpO2/睡眠/ストレス/疲労スコア/HRV/体温/呼吸数
  • カメラ知覚: YOLOv11s-pose — 在室検知・姿勢分類 (立位/座位/臥位/歩行)・活動追跡
  • VLM シーン理解: moondream / minicpm-v — 適応的頻度制御 + イベント駆動ブースト + オンデマンド分析

エッジデバイス

  • ESP32 センサーノード: XIAO ESP32-S3 + BME680 (温湿度/気圧/VOC) + PIR + CO2
  • ESP32 カメラノード: Freenove WROVER + OV2640 (MCP/MQTT)
  • Swarm ネットワーク: Hub (WiFi+MQTT) ← ESP-NOW/UART/I2C/BLE → Leaf デバイス

Architecture

┌──────────────────────────────────────────────────────────┐
│                    HEMS Core (常時起動)                    │
├──────────────┬──────────┬──────────┬─────────────────────┤
│  mosquitto   │  brain   │ backend  │      frontend       │
│  (MQTT)      │  (ReAct/ │ (API+XP+ │  (React/Tailwind)   │
│              │  Rule/   │ Shopping+│      +VRM           │
│              │  Chat)   │ Chat)    │                     │
├──────────────┼──────────┴──────────┼─────────────────────┤
│ voice-service│                     │      mock-llm       │
│  (TTS×4)     │                     │      (dev)          │
└──────────────┴─────────────────────┴─────────────────────┘

Profiles:  voicevox | ollama | postgres | localcraw | obsidian
           gas | ha | biometric | perception | switchbot | news
           knowledge

Brain ツール一覧 (35+)

カテゴリ ツール Profile
基本 create_task, speak*, get_active_tasks, get_zone_status, get_device_status, send_device_command 常時
買い物 add_shopping_item, get_shopping_list 常時
PC get_pc_status, run_pc_command, control_browser, send_pc_notification localcraw
サービス get_service_status localcraw
ナレッジ (Obsidian) search_notes, write_note, get_recent_notes obsidian
ナレッジ (外部) search_knowledge, get_knowledge_sources, read_knowledge_document knowledge
スマートホーム control_light, control_climate, control_cover, control_switch, get_home_devices, get_sensor_data, execute_scene ha
システム set_guest_mode, get_weather ha
バイオ get_biometrics, get_sleep_summary biometric
カメラ get_perception_status, describe_scene perception
SwitchBot get_switchbot_devices, control_switchbot, send_switchbot_ir switchbot
ニュース get_news_summary news

* speak は MotionRetriever により発話内容・トーンに基づいてアバターモーションを自動選択

サービスポート

Service Port Container
Frontend 8080 hems-frontend
Backend API 8010 hems-backend
Mock LLM 8011 hems-mock-llm
Voice 8012 hems-voice
localcraw 8013 hems-localcraw-bridge
Obsidian 8014 hems-obsidian-bridge
GAS 8015 hems-gas-bridge
HA 8016 hems-ha-bridge
Biometric 8017 hems-biometric-bridge
Perception 8018 hems-perception
SwitchBot 8019 hems-switchbot-bridge
News Bridge 8021 hems-news-bridge
Knowledge Bridge 8022 hems-knowledge-bridge
VOICEVOX 50031 hems-voicevox
Ollama 11444 hems-ollama
PostgreSQL 5442 hems-postgres
MQTT 1893 hems-mqtt

ポートは HEMS_PORT_* 環境変数でカスタマイズ可能。

Chat (パーソナライズドAI対話)

ダッシュボード上でAIキャラクターと直接対話。テキスト入力 + 音声入力 (Web Speech API) 対応。

ユーザー → Backend (永続化) → Brain Chat Server (:8080)
  └─ LLM ReAct (読み取り専用ツール: search_knowledge, get_biometrics, etc.)
  └─ キャラクター人格に基づいた回答生成
  └─ 短い応答は自動音声合成 (TTS)
  • 3-way ReAct: BrainがLLMにtools付きで会話し、ナレッジ・生体・環境データを参照
  • スライディングウィンドウ: 直近20メッセージを会話コンテキストに保持
  • 統合タイムライン: チャットメッセージと音声イベントを時系列で統合表示

Knowledge Bridge (ナレッジ取込)

外部ディレクトリからの読み取り専用・マルチフォーマット文書取込。

# .env
KNOWLEDGE_SOURCE_PWS=/path/to/pws
KNOWLEDGE_SOURCES=[{"name":"pws","path":"/sources/pws","extensions":[".md",".py",".json",".pdf"]}]

# ベクトル検索を有効にする場合 (requires --profile ollama)
EMBEDDING_URL=http://ollama:11434
EMBEDDING_MODEL=nomic-embed-text

docker compose --profile knowledge up -d --build
  • 8種ローダー: Markdown, Python (.py AST), JSON, Text, PDF (pdfplumber), DOCX, CSV, HTML
  • ハイブリッド検索: BM25 (キーワード) + Vector (Ollama embedding) + Title boost → 3-way RRF
  • Ollama 不在時: BM25 + Title の2-way に自動降格
  • 埋め込みキャッシュ: ディスク永続化、変更ドキュメントのみ再埋め込み

AI Character System

# ゼロコンフィグ (デフォルト人格)
docker compose up -d

# ワンライナー (同梱テンプレート)
echo 'CHARACTER=tsundere' >> .env
docker compose restart brain voice-service

# フルカスタム
cp config/character.yaml.example config/character.yaml
vi config/character.yaml
# ホットリロード (コンテナ再起動不要)
mosquitto_pub -h localhost -u hems -P hems_dev_mqtt \
  -t hems/brain/reload-character -m reload
テンプレート 一人称 formality 特徴
ena エナ 0 ハイテンションデジタル居候 (デフォルト)
default 2 フレンドリーアシスタント
tsundere あたし 0 素直になれない、世話好き
gentle-senpai 1 穏やか、褒め上手
butler わたくし 4 完璧主義、品格

バリデーション: python validate_character.py --all

VRM Avatar System

3D アバターを Dashboard に表示する機能。モデルファイルを配置するだけで動作する。

# VRM モデルを配置 (必須)
cp your-character.vrm services/frontend/public/models/avatar.vrm

# 表示モード切替 (ヘッダーのアバターボタン)
# hidden → panel (サイドパネル) → overlay (画面オーバーレイ) → hidden
機能 説明
モード hidden / panel / overlay (localStorage に永続化)
モーション 発話時に motions.yaml から BM25+トーン親和性でジェスチャー自動選択
リップシンク 音声波形解析による口パク同期
アイドル 無操作時の自然なランダムモーション + 視線放浪
フォールバック VRM 未配置時はプレースホルダーを表示

モーション定義 (config/motions.yaml): 10種類のジェスチャー (挨拶・反応・警告・感情・提案)。 YAML に追加するだけで MotionRetriever が自動的に選択候補に組み込む。

Optional Profiles

# VOICEVOX (高品質日本語 TTS)
docker compose --profile voicevox up -d
# → .env: TTS_PROVIDER=voicevox

# Ollama (ローカル LLM — GPU自動検出)
python infra/scripts/gpu_setup.py   # docker-compose.gpu.yml 生成
docker compose -f docker-compose.yml -f docker-compose.gpu.yml --profile ollama up -d
docker exec hems-ollama ollama pull qwen3.5   # 初回のみ

# Ollama (CPU のみ)
docker compose --profile ollama up -d
docker exec hems-ollama ollama pull qwen3.5

# PostgreSQL (SQLite の代替)
docker compose --profile postgres up -d

# localcraw (PC メトリクス + Gmail/GitHub 監視)
docker compose --profile localcraw up -d

# Obsidian (ナレッジストア)
docker compose --profile obsidian up -d

# GAS (Google Calendar/Tasks/Gmail/Sheets/Drive)
docker compose --profile gas up -d

# Home Assistant (スマートホーム制御 + スケジュール学習)
docker compose --profile ha up -d

# Biometric (スマートバンド心拍/睡眠/疲労スコア)
docker compose --profile biometric up -d

# Perception (YOLOv11s-pose カメラ検知 + 活動追跡)
docker compose --profile perception up -d

# SwitchBot (直接API制御 — HA不要)
docker compose --profile switchbot up -d

# News (RSS + Ollama ニュース要約 — ollama 必須)
docker compose --profile news --profile ollama up -d

# Knowledge (外部ドキュメント取込 — ベクトル検索は ollama 推奨)
docker compose --profile knowledge up -d


# 複数プロファイル組み合わせ
docker compose --profile ha --profile biometric --profile switchbot --profile knowledge up -d

Frontend

React 19 + TypeScript + Tailwind CSS 4 + TanStack Query + Framer Motion

ページ 内容
Dashboard アバター、AIチャット、タスク一覧、XP、音声イベント統合タイムライン
Physical ゾーン環境 (温湿度/CO2)、デバイス状態、天気、エネルギー
Digital PC メトリクス、サービス状態、GAS、Obsidian、買い物リスト
User プロフィール、バイオメトリクス、設定
cd services/frontend
pnpm install
pnpm dev      # Vite dev server (HMR)
pnpm build    # tsc -b && vite build

Tech Stack

技術
Backend Python 3.11, FastAPI, SQLAlchemy (async), paho-mqtt, Pydantic 2.x
Frontend React 19, TypeScript, Vite, Tailwind CSS 4, TanStack Query, Framer Motion
3D Avatar Three.js, React Three Fiber, @pixiv/three-vrm
LLM OpenAI / Anthropic / Ollama (マルチプロバイダー)
TTS espeak-ng, VOICEVOX, Edge TTS, VoiSona Talk
Search BM25 (rank_bm25) + Vector (Ollama embedding + numpy) + RRF
DB SQLite (default) / PostgreSQL 16
Infra Docker Compose, Mosquitto MQTT
Edge MicroPython (ESP32), SensorSwarm バイナリプロトコル

Documentation

ドキュメント 内容
avatar-setup.md VRM アバター配置・モーション追加・リップシンク
shopping-list.md 買い物リスト — API 操作・定期購入・外出連携
event-automation.md イベント自動化 — 起床/帰宅/定時トリガー設定
SMART_HOME_SETUP.md Home Assistant + HEMS 統合セットアップ
smart-home-device-guide.md マルチプロトコルデバイス総合ガイド
sensor-purchasing-guide-jp.md センサー購入ガイド (技適準拠・Amazon.co.jp)
sensor-purchasing-guide-aliexpress.md センサー購入ガイド (AliExpress・コスト最優先)
smartband-setup.md スマートバンドセットアップ
voisona-talk-setup.md VoiSona Talk TTS セットアップ

Roadmap

  • Phase 1 (完了): Core MVP — Backend + Brain + Voice + Frontend + Character + Alert Suppression
  • Phase 2 (完了): 外部連携 — localcraw, Obsidian, GAS, Home Assistant, Biometric
  • Phase 3 (完了): Perception — カメラ検知・姿勢分類・活動追跡 (YOLOv11s-pose)
  • Phase 4 (完了): IoT拡張 — SwitchBot直接統合, Weather Bridge, 買い物リスト, Edge Swarm
  • Phase 5 (完了): 知覚・情報統合 — VLM シーン理解, ニュースブリーフィング, イベント自動化, Ollama ネイティブ API
  • Phase 6 (完了): Advanced TTS — VoiSona Talk
  • Phase 7 (完了): ナレッジ・対話 — knowledge-bridge (ハイブリッド検索), パーソナライズドチャット, STT
  • Phase 8 (計画中): SSEストリーミング応答, コマンドモード (チャットからデバイス操作), 会話サマリ圧縮, ユーザープロファイル学習

License

Private project.

About

HEMS — Home Environment Management System (personal AI assistant for single occupant)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors