Skip to content

Releases: radioactive-bbs/shelly_plug_led

v1.5.0 — Power Strip support, independent on/off colors, audit fixes

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 05 Aug 21:28

Shelly Power Strip support, independent on/off colors, and an audit pass

This is the first tagged release of this fork. It builds on @ishiharas's original shelly_plug_led and adds the following on top of it.

New features

  • Shelly Power Strip (Gen4) support. The device picker now recognizes power strips, not just single plugs, and the RPC client auto-detects whether a device speaks PLUGS_UI (Plug S) or POWERSTRIP_UI (Power Strip).
  • Independent on-color / off-color entities. Each LED now gets two light entities — e.g. LED Ring On Color and LED Ring Off Color — matching the device's native switch-mode LED, which already shows a different color depending on the relay's own state. Set red-on/green-off once and the device handles it entirely in firmware, with no Home Assistant automation involved and no dependency on Home Assistant being online.
  • Fully independent toggles. Turning one color entity off only dims its own color slot to 0 brightness; it no longer forces the shared LED mode off and no longer affects the sibling entity. Previously both entities mirrored one shared on/off state, which made the toggle largely meaningless.
  • Diagnostics support. Settings → Devices & Services → Download diagnostics now works for this integration and redacts the stored username/password.
  • Visible reset failures. The "Reset LEDs to Default" button now raises a real error in the UI if the reset RPC fails, instead of silently doing nothing.

Fixes (from a critical code audit this release)

  • Device resolution. The config flow no longer blindly picks entry_devices[0] for a Shelly config entry. Newer multi-outlet devices register a physical "root" device plus one child device per output, and picking by list position could land on the wrong one (confirmed against real hardware, where it selected a device with no model info). The root device is now resolved deterministically by identifier shape, with sibling devices checked for a model string as a fallback.
  • Race condition. The on-color and off-color entities for one LED share a single coordinator; a refresh triggered by one entity's write could previously wipe the other entity's still-in-flight optimistic UI state. Each entity now tracks its own pending-write count and only clears its optimistic state once its own writes have settled.
  • Digest auth hardening. realm/nonce/opaque values taken from the device's WWW-Authenticate challenge are now sanitized before being interpolated into the outgoing Authorization header (defense-in-depth against header-value injection from a compromised device or LAN MITM).
  • Simplified LED-component probing. Real-hardware testing showed a device only ever answers one of PLUGS_UI/POWERSTRIP_UI successfully (the other 404s outright), so get_config() now uses simple first-success-wins instead of probing every component and comparing results.

Also in this release

  • Manifest documentation/issue_tracker point at this fork; codeowners credits both the original author and this fork.
  • README rewritten: features, supported hardware table, entities reference, the on/off-color model explained in depth, the Power Strip's shared-color-slot behavior, and a troubleshooting section.

Full diff: bda05cf...v1.5.0