HomeNetwork/docs/shelly-network-inventory.md

195 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:08:19 +02:00
# Shelly Network Inventory and Home Assistant Correlation
Date: 2026-04-17
This document combines:
- OPNsense ARP visibility on `192.168.100.0/24` (`vtnet0`)
- Home Assistant `home` entity search results
- Direct HTTP probing of responsive devices
The main goal is to make Shelly troubleshooting easier by keeping the likely device-to-entity mapping in one place.
## Summary
- OPNsense live ARP alone did not expose Shelly hostnames reliably, but `config.xml` did expose static host reservations and DNS-style host entries for several Shelly devices.
- Home Assistant `home` contains multiple Shelly devices with clear naming and entity groupings.
- Three devices were positively confirmed over HTTP:
- `192.168.100.62` is a Shelly EM named `MaddoProd`.
- `192.168.100.76` is a Shelly EM named `Shelly-Pompa`.
- `192.168.100.96` is a Shelly EM named `shelly-pannello-ovest`.
- `Shelly-Server` is now traced in OPNsense config as a static reservation and host entry:
- hostname `Shelly-Server`
- reserved IP `192.168.100.75`
- Kea workaround reservation MAC `02:0F:B5:73:E2:28`
- physical Shelly MAC `34:94:54:73:E2:28`
- live MQTT and HTTP diagnostics show the device is actually online at `192.168.100.127`
- the live Shelly web API reports the same factory MAC `34:94:54:73:E2:28`, so this does not look like an outdated reservation from a replaced unit
- local ARP for the live IP resolves to translated on-wire MAC `02:0F:B5:73:E2:28`
- the Kea workaround reservation was updated to the translated MAC so the device should become trackable once it renews DHCP
- One additional OPNsense ARP entry has a Shelly-looking OUI but did not behave like a Shelly web UI during probing:
- `192.168.100.114` / `34:94:54:34:1e:fc`
- Several remaining Home devices still rely on inferred MACs from entity IDs because they were not visible as live hosts during this pass.
- I was not able to complete the `casa` MCP correlation in this pass, so the `Casa IDs` column is left as `unverified`.
## Inventory
| Likely device | Model / type | Home IDs | Casa IDs | OPNsense IP | MAC | Network / Wi-Fi | Confidence | Notes |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Shelly Pompa | Shelly EM (`SHEM`) | `switch.shelly_pompa_relay_0`, `sensor.shelly_pompa_power_0`, `sensor.shelly_pompa_power_1`, `update.shelly_pompa_firmware` | unverified | `192.168.100.76` | `24:4C:AB:41:6D:0C` | `vtnet0`, SSID `Salnove`, RSSI `-77` | confirmed | Confirmed by OPNsense host reservation, live HTTP UI, `/shelly`, `/status`, and `/settings`. Device name `Shelly-Pompa`. MQTT connected. Channel names: `Pompa`, `Sottosuolo`. |
| Shelly Server | Shelly EM / Shelly-family power meter | `switch.shelly_server_relay_0`, `sensor.shelly_server_power_0`, `sensor.shelly_server_power_1`, `update.shelly_server_firmware` | unverified | live `192.168.100.127`; reserved `192.168.100.75` | physical `34:94:54:73:E2:28`; effective LAN MAC `02:0F:B5:73:E2:28` | live on `Shellynet`, RSSI `-17` | confirmed | Home history, MQTT discovery, live MQTT telemetry, and direct HTTP all confirm this device is active. Kea reservation was updated to the effective LAN MAC as a workaround so the device should become trackable on `192.168.100.75` after DHCP renewal or reconnect. |
| Shelly Galleria | Shelly device, likely 2-channel energy monitor | `switch.shelly_galleria_relay_0`, `sensor.shelly_galleria_power_0`, `sensor.shelly_galleria_power_1`, `update.shelly_galleria_firmware` | unverified | not found | not found | not found | medium | Seen clearly in `home`. Current power sample was about `-3249 W` on ch0 and `3794 W` on ch1. No network match found. |
| Shelly 3EM 485519D91C40 | Shelly 3EM | `switch.shelly_3em_485519d91c40_relay_0`, `sensor.shelly_3em_485519d91c40_power_0`, `sensor.shelly_3em_485519d91c40_power_1`, `sensor.shelly_3em_485519d91c40_power_2`, `update.shelly_3em_485519d91c40_firmware` | unverified | not found | inferred `48:55:19:D9:1C:40` | not found | medium | Entity naming strongly suggests MAC suffix `485519D91C40`. Not present in current OPNsense ARP snapshot. Current power sample roughly `-2273 / -2606 / +633 W`. |
| Shelly Lorenzo | Shelly EM | `switch.shelly_em_c45bbee1e684_relay_0`, `sensor.shelly_em_c45bbee1e684_power_0`, `sensor.shelly_em_c45bbee1e684_power_1`, `update.shelly_em_c45bbee1e684_firmware` | unverified | not found | inferred `C4:5B:BE:E1:E6:84` | not found | medium | Home naming is clear. Current power sample roughly `-2614 / -2929 W`. Exact MAC not seen in OPNsense ARP. |
| Shelly EM 34945478061B | Shelly EM | `switch.shelly_em_34945478061b_relay_0`, `sensor.shelly_em_34945478061b_power_0`, `sensor.shelly_em_34945478061b_power_1`, `update.shelly_em_34945478061b_firmware` | unverified | `192.168.100.96` | `34:94:54:78:06:1B` | `vtnet0`, SSID `Meguka`, RSSI `-76` | confirmed | Confirmed by OPNsense host reservation, live ARP, and HTTP API. Device name is `shelly-pannello-ovest`; OPNsense description is `Shelly-Pannello-Ovest`. Channel 1 label is `pannello-ovest`. |
| Shelly EM EC64C9C6893B | Shelly EM | `switch.shelly_em_ec64c9c6893b_relay_0`, `sensor.shelly_em_ec64c9c6893b_power_0`, `sensor.shelly_em_ec64c9c6893b_power_1`, `update.shelly_em_ec64c9c6893b_firmware` | unverified | not found | inferred `EC:64:C9:C6:89:3B` | not found | medium | Device is currently `unavailable` in Home Assistant. Exact inferred MAC not seen in OPNsense ARP. |
| MaddoProd | Shelly EM | `switch.maddoprod_relay_0`, `sensor.maddoprod_power_0`, `sensor.maddoprod_power_1`, `update.maddoprod_firmware` | unverified | `192.168.100.62` | `24:4C:AB:41:87:35` | `vtnet0`, SSID `Reisen`, RSSI `-81` | confirmed | Confirmed by OPNsense host reservation, live ARP, and HTTP API. Device name is `MaddoProd`. Current power sample roughly `-7 W / 2899 W`. Secondary configured Wi-Fi SSID is `Top Gun 2 il ritorno`. |
| Pannelli AUX | Shelly EM | `switch.pannelli_aux_relay_0`, `sensor.pannelli_aux_power_0`, `sensor.pannelli_aux_power_1`, `update.pannelli_aux_firmware` | unverified | not found | inferred `34:94:54:73:CD:10` | not found | medium | Home naming is clear. Current power sample roughly `364 W / 0 W`. Exact MAC not seen in current ARP. |
| Batteria AUX | Shelly EM | `switch.batteria_aux_relay_0`, `sensor.batteria_aux_power_0`, `sensor.batteria_aux_power_1`, `update.batteria_aux_firmware` | unverified | not found | inferred `E8:68:E7:D2:65:F5` | not found | medium | Home naming is clear. Current power sample roughly `219 W / 0 W`. Exact MAC not seen in current ARP. |
| Unknown `34:94:54` device | unknown | none matched | unverified | `192.168.100.114` | `34:94:54:34:1E:FC` | `vtnet0` | low | The OUI looks like a possible Shelly-family vendor, but `/`, `/status`, `/shelly`, and `/rpc/...` did not identify it as Shelly. Keep as a candidate only. |
## Confirmed HTTP details for `192.168.100.76`
Directly retrieved from the device web API:
- Name: `Shelly-Pompa`
- Type: `SHEM`
- Hostname: `shellyem-244CAB416D0C`
- MAC: `244CAB416D0C`
- IP: `192.168.100.76`
- Wi-Fi SSID: `Salnove`
- RSSI: `-77`
- MQTT: connected
- Firmware: `20230913-114150/v1.14.0-gcb84623`
- Channel names:
- `Pompa`
- `Sottosuolo`
This is a strong match for the Home Assistant `Shelly Pompa` entity group.
## Confirmed HTTP details for `192.168.100.62`
Directly retrieved from the device web API:
- Name: `MaddoProd`
- Type: `SHEM`
- Hostname: `shellyem-244CAB418735`
- MAC: `244CAB418735`
- IP: `192.168.100.62`
- Wi-Fi SSID: `Reisen`
- Secondary Wi-Fi SSID: `Top Gun 2 il ritorno`
- RSSI: `-81`
- MQTT: connected
- Firmware: `20230913-114150/v1.14.0-gcb84623`
This is a strong match for the Home Assistant `maddoprod` entity group.
## Confirmed HTTP details for `192.168.100.96`
Directly retrieved from the device web API:
- Name: `shelly-pannello-ovest`
- Type: `SHEM`
- Hostname: `shellyem-34945478061B`
- MAC: `34945478061B`
- IP: `192.168.100.96`
- Wi-Fi SSID: `Meguka`
- RSSI: `-76`
- MQTT: connected
- Firmware: `20230913-114150/v1.14.0-gcb84623`
- Channel 1 label: `pannello-ovest`
This is a strong match for the Home Assistant `shelly_em_34945478061b` entity group and the OPNsense description `Shelly-Pannello-Ovest`.
## OPNsense reservation details for `Shelly-Server`
Directly retrieved from OPNsense `config.xml`:
- Host entry: `Shelly-Server.maddo.science`
- Reserved IP: `192.168.100.75`
- Current Kea workaround MAC: `02:0F:B5:73:E2:28`
- Physical Shelly MAC: `34:94:54:73:E2:28`
- Description: `Shelly-Server`
Live status during this pass:
- Home Assistant `sensor.shelly_server_power_0` updated every ~30 seconds for the last hour
- MQTT discovery identifies this device as `shellyem-34945473E228`
- MQTT discovery advertises control URL `http://192.168.100.127/`
- direct HTTP to `http://192.168.100.127/` succeeded
- live device details from `/settings` and `/status`:
- name `Shelly-Server`
- SSID `Shellynet`
- RSSI `-17`
- MQTT connected `true`
- channel labels `Server-1`, `Server-2`
- firmware `20230913-114150/v1.14.0-gcb84623`
- direct MQTT telemetry observed on `shellies/shellyem-34945473E228/emeter/...`
- `192.168.100.75` did not answer ping or HTTP during the same pass
That makes the identity mapping and live status both strong. The real fault is the mismatch between the live IP and the OPNsense reservation.
It also argues against the reservation MAC simply being stale from an old device replacement, because the live Shelly reports the same factory MAC as the one stored in OPNsense.
The active Kea workaround now reserves the same IP for the translated LAN-side MAC instead, with description `Shelly-Server via Shellynet extender workaround; physical MAC 34:94:54:73:e2:28`.
## MQTT findings for `Shelly-Server`
Broker-level diagnostics against the local `.local/mqtt-home.env` credentials confirmed:
- MQTT client ID / topic base: `shellyem-34945473E228`
- Home Assistant discovery prefix in use: `homeassistant/...`
- Shellies topic base in use: `shellies/shellyem-34945473E228/...`
- Availability model in discovery:
- `~online` topic with `true` / `false`
- `~info` JSON field `mqtt.connected`
- Live telemetry was observed for:
- `shellies/shellyem-34945473E228/emeter/0/power`
- `shellies/shellyem-34945473E228/emeter/0/reactive_power`
- `shellies/shellyem-34945473E228/emeter/0/pf`
- `shellies/shellyem-34945473E228/emeter/0/voltage`
- `shellies/shellyem-34945473E228/emeter/0/total`
- `shellies/shellyem-34945473E228/emeter/0/total_returned`
- `shellies/shellyem-34945473E228/emeter/1/...`
This proves Home Assistant is receiving live MQTT telemetry, not just stale retained state.
## Home Assistant groups used for correlation
Representative entity groups found in `home`:
- `shelly_pompa`
- `shelly_server`
- `shelly_galleria`
- `shelly_3em_485519d91c40`
- `shelly_em_c45bbee1e684`
- `shelly_em_34945478061b`
- `shelly_em_ec64c9c6893b`
- `maddoprod`
- `pannelli_aux`
- `batteria_aux`
## OPNsense findings worth keeping in mind
- Active Shelly-confirmed subnet: `192.168.100.0/24`
- Observed interface: `vtnet0`
- OPNsense static mappings were more useful than live ARP for `Shelly-Server`.
- For `Shelly-Server`, OPNsense reservation data was useful for identity but wrong for the current live IP.
- OPNsense ARP snapshot was incomplete relative to Home Assistant inventory.
- OPNsense-backed host reservations confirmed:
- `192.168.100.62` -> `shelly-maddoProd` / `24:4c:ab:41:87:35`
- `192.168.100.75` -> `Shelly-Server` / `34:94:54:73:e2:28`
- `192.168.100.76` -> `Shelly-Pompa` / `24:4c:ab:41:6d:0c`
- `192.168.100.96` -> `shellyem-34945478061b` / `34:94:54:78:06:1b`
- MQTT discovery confirmed that `Shelly-Server` is actually live at `192.168.100.127`.
- That usually means one or more of the following:
- the device is on a valid live IP that does not match the OPNsense reservation
- the reservation is stale, not applied, or not being served by the DHCP source the device is actually using
- OPNsense ARP visibility is incomplete because ARP only reflects neighbors the firewall itself has talked to
## Best next manual checks
1. Find which DHCP server actually handed out `192.168.100.127` to MAC `34:94:54:73:E2:28`.
2. Check the AP or controller for the `Shellynet` client entry for MAC `34:94:54:73:E2:28` and confirm its DHCP source.
3. Renew DHCP on the device or reboot it after fixing the intended reservation path, so it either takes `192.168.100.75` or the reservation is updated to `192.168.100.127`.
4. Decide whether the intended fix is: make OPNsense own the lease again, or update OPNsense to reflect the real addressing source.