Initial commit: Hermes Agent Skills collection
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# Editing HA Integration Config Entries Directly
|
||||
|
||||
When a HA integration's configuration (host, port, credentials) needs updating
|
||||
but the UI is unavailable or the integration was auto-discovered (zeroconf/ssdp),
|
||||
you can edit the config entry storage file directly.
|
||||
|
||||
## File Location
|
||||
|
||||
```
|
||||
/mnt/data/supervisor/homeassistant/.storage/core.config_entries
|
||||
```
|
||||
|
||||
Accessed via Proxmox guest agent (HA is VM 106 on proxmox1):
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_ed25519_proxmox root@10.0.20.10 \
|
||||
"qm guest exec 106 --timeout 30 -- bash -c 'cat /mnt/data/supervisor/homeassistant/.storage/core.config_entries'"
|
||||
```
|
||||
|
||||
## Format
|
||||
|
||||
JSON array of config entry objects. Each entry has:
|
||||
```json
|
||||
{
|
||||
"entry_id": "5e1d2138...",
|
||||
"domain": "nut",
|
||||
"title": "192.168.100.27:3493",
|
||||
"data": {
|
||||
"host": "192.168.100.27",
|
||||
"port": 3493
|
||||
},
|
||||
"source": "zeroconf",
|
||||
"disabled_by": null,
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## Editing Procedure
|
||||
|
||||
1. **Backup first**:
|
||||
```bash
|
||||
cp .../core.config_entries .../core.config_entries.bak
|
||||
```
|
||||
|
||||
2. **Find the entry** — grep for the domain or old IP:
|
||||
```bash
|
||||
grep -A20 '"domain":"nut"' core.config_entries | head -25
|
||||
```
|
||||
|
||||
3. **Replace the value** (sed):
|
||||
```bash
|
||||
sed -i 's/"host":"192.168.100.27"/"host":"10.0.30.100"/g' core.config_entries
|
||||
```
|
||||
|
||||
4. **Verify the change**:
|
||||
```bash
|
||||
grep '"host":"10.0.30.100"' core.config_entries
|
||||
```
|
||||
|
||||
5. **Restart HA** — changes to `.storage/` files only take effect after restart:
|
||||
```bash
|
||||
curl -s -X POST "$HA_URL/api/services/homeassistant/restart" \
|
||||
-H "Authorization: Bearer $HA_TOKEN" \
|
||||
-H "Content-Type: application/json" -d '{}'
|
||||
```
|
||||
|
||||
6. **Verify after restart** — poll `GET /api/config` until `state: RUNNING`,
|
||||
then check entity states for the affected integration.
|
||||
|
||||
## NUT/UPS Walkthrough (June 2026)
|
||||
|
||||
### Problem
|
||||
NUT integration entities all `unavailable`. Config entry pointed to old IP
|
||||
`192.168.100.27:3493` after network migration to `10.0.30.x`.
|
||||
|
||||
### Root Causes (3 separate issues!)
|
||||
1. **NUT server `MODE=none`** in `/etc/nut/nut.conf` → upsd wouldn't start
|
||||
- Fix: `sed -i 's/^MODE=none/MODE=netserver/' /etc/nut/nut.conf`
|
||||
2. **upsd.conf bound to old IP** — `LISTEN 192.168.100.27 3493`
|
||||
- Fix: `echo 'LISTEN 0.0.0.0 3493' > /etc/nut/upsd.conf`
|
||||
3. **Duplicate `[monitor]` section** in `upsd.users` (two entries, conflicting)
|
||||
- Fix: Rewrite with single merged `[monitor]` section
|
||||
4. **HA config entry pointed to old IP**
|
||||
- Fix: `sed -i 's/"host":"192.168.100.27"/"host":"10.0.30.100"/g' core.config_entries`
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
# On NUT host:
|
||||
upsc apc@localhost # Should return UPS variables
|
||||
|
||||
# From HA/remote:
|
||||
python3 -c "import socket; s=socket.socket(); s.settimeout(3); s.connect(('10.0.30.100', 3493)); print('OK')"
|
||||
|
||||
# In HA after restart:
|
||||
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" | \
|
||||
python3 -c "import sys,json; [print(f'{e[\"entity_id\"]}: {e[\"state\"]}') for e in json.load(sys.stdin) if 'apc' in e['entity_id'].lower()]"
|
||||
```
|
||||
|
||||
### Key Entities After Fix
|
||||
- `sensor.apc_akku_ladung`: 100 (battery charge %)
|
||||
- `sensor.apc_batteriespannung`: 13.6 (battery voltage)
|
||||
- `sensor.apc_eingangsspannung`: 244.0 (input voltage)
|
||||
- `sensor.apc_status`: Online, Low Battery
|
||||
- `sensor.apc_last`: 75 (load %)
|
||||
|
||||
⚠️ "Low Battery" at 100% charge with 60s runtime = aging battery (mfg date 2019/10).
|
||||
Consider replacement.
|
||||
Reference in New Issue
Block a user