Initial commit: Hermes Agent Skills collection
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
# Home Assistant History/Recorder Troubleshooting
|
||||
|
||||
## Symptom: History page shows no data or is blank
|
||||
|
||||
### Quick Diagnosis Flow
|
||||
|
||||
1. **Check if recorder is running**
|
||||
```
|
||||
curl -s -H "Authorization: Bearer $HA_TOKEN" \
|
||||
https://homeassistant.familie-schoen.com/api/services/recorder |
|
||||
jq '.[].service'
|
||||
```
|
||||
If recorder service is missing, the `recorder` integration may be disabled.
|
||||
|
||||
2. **Check HA core logs for recorder errors**
|
||||
```
|
||||
curl -s -H "Authorization: Bearer $HA_TOKEN" \
|
||||
https://homeassistant.familie-schoen.com/api/error_log
|
||||
```
|
||||
Look for: `sqlite3.DatabaseError`, `database is locked`, `disk I/O error`,
|
||||
`Recorder thread encountered an error`, `purge` failures.
|
||||
|
||||
3. **Check disk space** (via SSH or HA API)
|
||||
- HA OS: `ha os info` or check Settings → System → Storage in UI
|
||||
- Docker/container: `df -h` inside the container
|
||||
- Recorder stops writing when partition is >95% full
|
||||
|
||||
4. **Check database size**
|
||||
- SQLite default: `/config/home-assistant_v2.db`
|
||||
- If >2GB on SQLite, consider switching to PostgreSQL or MySQL
|
||||
- Large DB causes slow queries → history appears empty (timeout)
|
||||
|
||||
5. **Check recorder config in configuration.yaml**
|
||||
```yaml
|
||||
recorder:
|
||||
purge_keep_days: 10
|
||||
db_url: sqlite:///config/home-assistant_v2.db
|
||||
include:
|
||||
domains:
|
||||
- sensor
|
||||
- switch
|
||||
exclude:
|
||||
domains:
|
||||
- automation
|
||||
```
|
||||
Overly restrictive `include`/`exclude` filters can hide entities from history.
|
||||
|
||||
### Common Causes (ranked by frequency)
|
||||
|
||||
| Cause | Fix |
|
||||
|-------|-----|
|
||||
| Recorder DB corrupt | Stop HA, delete `.db` + `.db-wal` + `.db-shm`, restart |
|
||||
| Disk full | Free space, run `recorder.purge` service |
|
||||
| Recorder stuck on purge | Call `recorder.disable` then `recorder.enable` |
|
||||
| SQLite lock contention | Switch to external DB (MySQL/PostgreSQL) |
|
||||
| `history:` integration disabled | Add `history:` to configuration.yaml |
|
||||
| Too many entities recorded | Add `exclude` filters, reduce retention |
|
||||
| Time zone mismatch | Check `time_zone:` in configuration.yaml |
|
||||
|
||||
### Useful API Endpoints
|
||||
|
||||
```
|
||||
# Get states for an entity (last 24h)
|
||||
GET /api/history/period/{timestamp}?filter_entity_id=sensor.xxx
|
||||
|
||||
# Get all entity states now
|
||||
GET /api/states
|
||||
|
||||
# Error logs
|
||||
GET /api/error_log
|
||||
|
||||
# Call service
|
||||
POST /api/services/recorder/purge
|
||||
POST /api/services/recorder/disable
|
||||
POST /api/services/recorder/enable
|
||||
|
||||
# HA config check
|
||||
GET /api/config/core/check_config
|
||||
```
|
||||
|
||||
### SSH Access
|
||||
|
||||
HA is VM 106 on proxmox1 (10.0.20.10). Access via Proxmox guest agent:
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_ed25519_proxmox root@10.0.20.10 \
|
||||
"qm guest exec 106 --timeout 30 -- bash -c 'docker logs homeassistant 2>&1 | tail -30'"
|
||||
```
|
||||
|
||||
Config file: `/mnt/data/supervisor/homeassistant/configuration.yaml` (inside VM).
|
||||
|
||||
### External Database (MariaDB Galera + MaxScale)
|
||||
|
||||
Production HA uses MariaDB Galera cluster (3 nodes) behind MaxScale VIP, NOT SQLite.
|
||||
If recorder errors mention MySQL/MariaDB (`MySQLdb.OperationalError`), see:
|
||||
**`references/galera-cluster-recovery.md`** for full cluster recovery procedure.
|
||||
|
||||
Quick checks:
|
||||
```bash
|
||||
# MaxScale server states
|
||||
ssh -i ~/.ssh/id_ed25519_proxmox debian@10.0.30.81 "maxctrl list servers"
|
||||
|
||||
# Direct DB connection test via MaxScale
|
||||
ssh -i ~/.ssh/id_ed25519_proxmox debian@10.0.30.81 \
|
||||
"mariadb -h 127.0.0.1 -P 3306 -u ha_recorder -p'<password>' --skip-ssl -e \"SELECT 1\""
|
||||
|
||||
# Galera node status
|
||||
ssh -i ~/.ssh/id_ed25519_proxmox debian@10.0.30.71 \
|
||||
"sudo mariadb -e \"SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size'; SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';\""
|
||||
```
|
||||
|
||||
Common Galera failure symptoms:
|
||||
- All nodes `failed` since same timestamp → simultaneous crash (network or power)
|
||||
- `Access denied` from HA → MaxScale can't route to any backend
|
||||
- `Lost connection during query` → MaxScale routed to Donor/Desynced node without `available_when_donor=true`
|
||||
|
||||
### Recovery Procedure (corrupt SQLite DB)
|
||||
|
||||
```bash
|
||||
# Via SSH to HA
|
||||
ha core stop
|
||||
mv /config/home-assistant_v2.db /config/home-assistant_v2.db.bak
|
||||
rm -f /config/home-assistant_v2.db-wal /config/home-assistant_v2.db-shm
|
||||
ha core start
|
||||
```
|
||||
|
||||
History will rebuild from scratch. Old history is lost (backup exists as .bak).
|
||||
|
||||
### Prevention
|
||||
|
||||
- Set `recorder.commit_interval: 1` (flush more frequently, smaller WAL)
|
||||
- Add `exclude` filters for noisy domains (automation, script, timer)
|
||||
- Consider external DB for installations with 500+ entities
|
||||
- Monitor disk space with a sensor/alert
|
||||
Reference in New Issue
Block a user