4.1 KiB
OpenEVSE → Home Assistant (MQTT discovery)
The OpenEVSE WiFi firmware natively publishes raw values to openevse/<key>
on whichever MQTT broker you've configured it against, but it does not
publish HA discovery configs. Without those, HA can't see any of it unless
you hand-write mqtt: sensor: blocks in configuration.yaml.
This package fixes that with a single one-shot tool that publishes retained
homeassistant/.../config payloads pointing at the OpenEVSE state topics
the firmware already provides. No daemon, no broker proxy — HA subscribes
to OpenEVSE's own topics directly once discovery is in place.
Status: live
23 entities exposed for the charger at 10.0.0.249 (device id a048):
sensor.openevse_power W live charging power
sensor.openevse_voltage V
sensor.openevse_amp A (firmware reports mA; converted in HA)
sensor.openevse_pilot A pilot current the EVSE is signalling
sensor.openevse_max_current A hardware/soft-limit ceiling
sensor.openevse_session_energy Wh
sensor.openevse_total_energy Wh total_increasing → Energy dashboard
sensor.openevse_total_day kWh total_increasing
sensor.openevse_total_week kWh
sensor.openevse_total_month kWh
sensor.openevse_total_year kWh
sensor.openevse_session_elapsed s
sensor.openevse_uptime s diagnostic
sensor.openevse_temp °C (firmware reports tenths-°C; converted)
sensor.openevse_temp_max °C
sensor.openevse_status text "active" / "disabled" / "sleeping" / ...
sensor.openevse_state # numeric state code
sensor.openevse_srssi dBm diagnostic — Wi-Fi signal
sensor.openevse_freeram B diagnostic
sensor.openevse_total_switches # diagnostic — total_increasing
binary_sensor.openevse_vehicle plug — car connected
binary_sensor.openevse_evse_connected connectivity (diagnostic)
binary_sensor.openevse_manual_override
Availability is wired to OpenEVSE's retained announce topic
(openevse/announce/<id>), which the firmware uses as its LWT — entities
flip to "Unavailable" if the EVSE drops off the broker.
How it works
bin/openevse-publish-discoveryconnects to the broker, reads the retainedopenevse/announce/<id>payload to learn the device id and metadata (name, http URL).- Builds 23
homeassistant/{sensor,binary_sensor}/openevse_<key>/configpayloads — one per entity. Each declaresstate_topicpointing at the matchingopenevse/<key>topic, plusdevice_class,unit_of_measurement,state_class,value_template(where unit conversion is needed),suggested_display_precision, and a sharedavailabilityblock. - Publishes them with QoS 0,
retain=true. HA picks them up immediately via its existinghomeassistant/#subscription.
The two unit conversions baked into discovery payloads (so HA never sees raw units):
| Source topic | Raw value | HA value |
|---|---|---|
openevse/amp |
milliamps | A (/ 1000) |
openevse/temp[_max] |
tenths-°C | °C (/ 10) |
What's in the box
openevse/
├── README.md ← you are here
├── Install.md ← run order, verification, rollback
└── bin/
└── openevse-publish-discovery ← one-shot (PEP-723 uv inline-script)
Quick start
Broker creds default-load from ~/.config/powermon/powermon.yaml
(mqttbroker.{name,port,username,password}), so on this host:
~/solar/openevse/bin/openevse-publish-discovery
That's it. To remove every entity later:
~/solar/openevse/bin/openevse-publish-discovery --purge
See Install.md for verification steps, dry-run preview,
and CLI overrides if your broker isn't the one in powermon.yaml.
Related packages
../LVX6048/— same broker, same discovery pattern (via patched powermon).../eg4battery/— same broker, same discovery pattern (viaeg4-batterydaemon).