Initial commit: Hermes Agent Skills collection
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
# EVCC Device Inventory — Schön Consulting Homelab
|
||||
|
||||
## Network Topology
|
||||
|
||||
EVCC runs as HAOS add-on on HA VM 106 (10.0.30.10), port 7070.
|
||||
Config: `/mnt/data/supervisor/homeassistant/evcc.yaml`
|
||||
|
||||
## Configured Devices
|
||||
|
||||
### Grid Meter
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| Name | `grid` |
|
||||
| Type | `custom` (Modbus registers) |
|
||||
| URI | `10.0.50.201:502` |
|
||||
| Modbus ID | 3 |
|
||||
| Power register | 30865 (input, int32nan) |
|
||||
| Energy register | 30529 (input, uint32nan, scale 0.001) |
|
||||
|
||||
### PV Inverters
|
||||
|
||||
#### pv1 — SMA Inverter (main roof)
|
||||
- Template: `sma-inverter-modbus`
|
||||
- Host: `10.0.50.201:502`
|
||||
- Typical output: ~700W daytime
|
||||
|
||||
#### pv2 — SMA Inverter (secondary)
|
||||
- Template: `sma-inverter-modbus`
|
||||
- Host: `10.0.50.203:502`
|
||||
- Typical output: ~350W daytime
|
||||
|
||||
#### hoymiles — Micro-inverter (balcony)
|
||||
- Template: `hoymiles-opendtu`
|
||||
- Host: `10.0.40.55` (OpenDTU web interface, HTTP API)
|
||||
- Typical output: ~670W daytime
|
||||
|
||||
### Batteries
|
||||
|
||||
#### battery — SMA Sunny Boy Storage
|
||||
- Template: `sma-sbs-modbus`
|
||||
- Host: `10.0.50.202:502`
|
||||
- Max charge power: 4200W
|
||||
- Watchdog: 60s
|
||||
- Capacity: ~2 kWh usable (reported)
|
||||
- Status: Working ✓ (SOC 99%, power 286W as of 2026-06-27)
|
||||
|
||||
#### marstek — Marstek Venus E (bridged via HA REST API)
|
||||
- Type: `custom` (HA REST API bridge — NOT template, NOT Modbus)
|
||||
- Physical device: 10.0.50.113 (Modbus port 502 closed from EVCC network)
|
||||
- HA integration: Working ✓ (reads via HA Modbus integration, all entities available)
|
||||
- Bridged via HA entities:
|
||||
- power ← `sensor.marstek_venus_modbus_ac_leistung`
|
||||
- soc ← `sensor.marstek_venus_modbus_batterie_ladezustand`
|
||||
- energy ← `sensor.marstek_venus_modbus_gesamte_entladeenergie`
|
||||
- Capacity: 5 kWh, maxchargepower: 2500W, maxdischargepower: 2500W
|
||||
- Status: Working ✓ via HA bridge (verified 2026-06-27: power=0W, soc=100%, energy=336.34kWh)
|
||||
- Controllable: No (read-only). For control, add `limitsoc`/`batterymode` setters targeting HA entities.
|
||||
|
||||
### Charger
|
||||
|
||||
#### wallbox — SMA EV Charger (bridged via HA)
|
||||
- Type: `custom` (HA REST API bridge)
|
||||
- Physical device: 10.0.50.205 (CN=SMA3010510346.local)
|
||||
- HA reaches it via 192.168.100.95 (different VLAN)
|
||||
- Direct EVCC connection fails: TLS cert without IP-SANs + SMA API returns 400
|
||||
- Status: Working ✓ via HA bridge
|
||||
|
||||
### Tariff
|
||||
- Provider: Tibber
|
||||
- Token stored in EVCC config (not in 1Password — rotate if needed)
|
||||
|
||||
## Diagnostic Commands
|
||||
|
||||
```bash
|
||||
# Full EVCC state
|
||||
curl -s http://10.0.30.10:7070/api/state | python3 -m json.tool
|
||||
|
||||
# Quick health check — extract key metrics
|
||||
curl -s http://10.0.30.10:7070/api/state | python3 -c "
|
||||
import json, sys
|
||||
d = json.load(sys.stdin)
|
||||
print(f'Grid: {d[\"grid\"][\"power\"]}W')
|
||||
for i, pv in enumerate(d.get('pv', [])):
|
||||
print(f'PV[{i}] ({pv[\"name\"]}): {pv[\"power\"]}W')
|
||||
bat = d.get('battery', {})
|
||||
print(f'Battery: {bat.get(\"power\")}W, SOC {bat.get(\"soc\")}%')
|
||||
for dev in bat.get('devices', []):
|
||||
print(f' {dev[\"name\"]}: {dev.get(\"power\")}W, SOC {dev.get(\"soc\")}, controllable={dev.get(\"controllable\")}')
|
||||
"
|
||||
|
||||
# Check Marstek Modbus connectivity
|
||||
python3 -c "
|
||||
import socket
|
||||
s = socket.socket(); s.settimeout(3)
|
||||
try: s.connect(('10.0.50.113', 502)); print('OPEN')
|
||||
except Exception as e: print(f'CLOSED: {e}')
|
||||
finally: s.close()
|
||||
"
|
||||
|
||||
# List HA Marstek entities
|
||||
source ~/.hermes/.env
|
||||
curl -s -H "Authorization: Bearer $HA_TOKEN" http://10.0.30.10:8123/api/states | \
|
||||
python3 -c "import json,sys; [print(f'{e[\"entity_id\"]}: {e[\"state\"]}') for e in json.load(sys.stdin) if 'marstek' in e['entity_id'].lower()]"
|
||||
```
|
||||
|
||||
## EVCC Config File Locations on HAOS
|
||||
|
||||
```bash
|
||||
# Find all copies
|
||||
qm guest exec 106 -- find /mnt/data -name "evcc.yaml" -maxdepth 5
|
||||
|
||||
# Results:
|
||||
# /mnt/data/supervisor/tmp/tmpXXXXXX/data/evcc.yaml — temp, ignore
|
||||
# /mnt/data/supervisor/homeassistant/evcc.yaml — MAIN (referenced by config)
|
||||
# /mnt/data/supervisor/app_configs/<hash>_evcc/evcc.yaml — addon-managed copy
|
||||
```
|
||||
Reference in New Issue
Block a user