haobserver/README.md
2026-05-16 08:50:49 +00:00

145 lines
3.2 KiB
Markdown

# Home Assistant Observer
Cron-friendly Home Assistant observer:
- every 30 minutes: collect compact Home Assistant snapshots into `./data`
- every day at 05:00: send the last day of snapshots to AI
- publish a funny local blog at `./web/index.html` with daily article archive links
- save Markdown AI reports in `./reports`
## Setup
```bash
cd /home/hbrain/ha
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
chmod 600 .env
chmod +x run_ha_observer.sh ha_observer.py install_cron.sh
```
Edit `.env` and set:
```bash
HA_URL="http://homeassistant.local:8123"
HA_TOKEN="your_long_lived_home_assistant_token"
```
Create the token in Home Assistant:
```text
Profile → Security → Long-lived access tokens
```
## AI mode for the 05:00 report
Use your logged-in pi subscription:
```bash
pi
/login
```
Then set:
```bash
LLM_MODE="pi"
PI_BIN="/usr/local/bin/pi"
PI_MODEL=""
```
`PI_MODEL` is optional; leave it empty to use pi's current/default model.
Local Ollama is recommended for privacy:
```bash
LLM_MODE="ollama"
OLLAMA_MODEL="llama3.1"
```
OpenAI cloud API:
```bash
LLM_MODE="openai"
OPENAI_API_KEY="..."
OPENAI_MODEL="gpt-4o-mini"
```
No AI, but still publish a placeholder page:
```bash
LLM_MODE="none"
```
## Extra LLM instructions
Edit this file to change how the 05:00 AI analysis behaves:
```text
/home/hbrain/ha/llm_instructions.md
```
For example, add specific questions, preferred tone, things to ignore, or extra privacy/security concerns. The file is automatically appended to the AI prompt during `analyze`.
You can change the path in `.env`:
```bash
PROMPT_FILE="./llm_instructions.md"
```
## Test manually
Collect one snapshot:
```bash
./run_ha_observer.sh collect
```
Run the 05:00-style analysis/publishing step:
```bash
./run_ha_observer.sh analyze
```
Open the blog served by nginx:
```text
http://localhost/haobserver/
```
Daily articles are written under `web/articles/YYYY-MM-DD.html`, and `index.html` links to the archive. New articles include context from previous reports from the last `ARTICLE_CONTEXT_DAYS` days.
This uses a symlink from `/var/www/html/haobserver` to the project's `./web` directory.
## Install cron jobs
This installs exactly these jobs:
- `*/30 * * * *` collect snapshots every 30 minutes
- `0 5 * * *` analyze with AI and publish the funny local webpage
```bash
./install_cron.sh
```
Manual crontab equivalent:
```cron
*/30 * * * * /home/hbrain/haobserver/run_ha_observer.sh collect >> /home/hbrain/haobserver/cron.log 2>&1
0 5 * * * /home/hbrain/haobserver/run_ha_observer.sh analyze >> /home/hbrain/haobserver/cron.log 2>&1
```
## Output locations
```text
/home/hbrain/haobserver/data/ 30-minute JSON snapshots
/home/hbrain/haobserver/reports/ daily Markdown AI reports
/home/hbrain/haobserver/web/ local funny blog, index.html and articles/*.html
/var/www/html/haobserver symlink to web/ for nginx
/home/hbrain/haobserver/cron.log cron logs
```
## Privacy notes
Home Assistant data can reveal sleep schedule, occupancy, work patterns, visitors, location habits, and security weaknesses. Prefer `LLM_MODE=ollama` to keep analysis local. Use `EXCLUDED_ENTITIES` in `.env` to omit sensitive/noisy entities.