Skip to content

No buttons appear in integration even with admin credentials and instcmds: all #484

@Orsacchio

Description

@Orsacchio

Disclaimer

I'm not a developer or programmer; just a beginner hobbyist. While I have gone through all the steps described below, this post is written with the aid of AI.

What I'm Trying to Do

I'm setting up a graceful shutdown system for my UPS (Eaton Ellipse PRO 650) using the official NUT add-on and integration. I want to use the shutdown.return command to power-cycle the UPS after Home Assistant shuts down, so everything reboots automatically when power returns.

My Setup

  • Home Assistant OS on Raspberry Pi 5
  • Network UPS Tools add-on (official from Community Add-ons)
  • UPS: Eaton Ellipse PRO 650, connected via USB

Add-on Configuration

users:
  - username: admin
    password: "<password>"
    instcmds:
      - all
    actions:
      - set
      - fsd
  - username: observer
    password: "<password>"
    instcmds: []
    actions: []
devices:
  - name: eaton-ellipsepro
    driver: usbhid-ups
    port: auto
    config: []
mode: netserver
shutdown_host: true

What I Expected

According to the integration documentation, if I configure a user with instcmds permissions, buttons like shutdown.return should appear on the device page and as actions in the automation editor.

What Actually Happens

  1. No buttons appear on the device page
  2. Automation editor shows: "No actions available for Eaton-Ellipsepro"
  3. Sensors work fine — I can see battery %, status, etc.

What I've Tried

Verified commands exist in the add-on

I ran this command from the HA terminal and confirmed the UPS supports the commands:

docker exec addon_a0d7b954_nut upscmd -l eaton-ellipsepro -u admin -p <password>

Output showed:

Instant commands supported on UPS [eaton-ellipsepro]:
beeper.disable - Disable the UPS beeper
beeper.enable - Enable the UPS beeper
load.off - Turn off the load immediately
load.off.delay - Turn off the load with a delay (seconds)
load.on - Turn on the load immediately
load.on.delay - Turn on the load with a delay (seconds)
shutdown.return - Turn off the load and return when power is back
shutdown.stayoff - Turn off the load and remain off
shutdown.stop - Stop a shutdown in progress

So the add-on and permissions are configured correctly.

Tried reconfiguring the integration

  • Went to Settings → Devices & Services → NUT → Reconfigure
  • Entered admin username and password
  • Got "Re-configuration was successful"
  • Still no buttons

Tried deleting and re-adding

  • Completely removed the integration
  • Re-added it with admin credentials from the start
  • Still no buttons

Odd behavior: Wrong password is accepted

When reconfiguring, I intentionally entered a wrong password. It still said "Re-configuration was successful" and sensors continued working. This makes me suspect the integration isn't actually logging in with the credentials I provide.

Checked the add-on logs

When I reload the integration, I see this in the add-on logs:

User upsmonmaster@127.0.0.1 logged into UPS [eaton-ellipsepro]

But I never see admin@... logging in. It looks like the integration connects anonymously to read sensors, but doesn't authenticate to query commands.

Workaround I Found

I'm not a programmer, but someone helped me write a small Python script that sends the command directly using the NUT protocol:

#!/usr/bin/env python3
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("a0d7b954-nut", 3493))
s.send(b"USERNAME admin\n")
s.recv(1024)
s.send(b"PASSWORD <password>\n")
s.recv(1024)
s.send(b"INSTCMD eaton-ellipsepro shutdown.return\n")
s.recv(1024)
s.close()

This works perfectly, which confirms to me that:

  1. The add-on is configured correctly
  2. The admin user has the right permissions
  3. The UPS accepts the command

The problem seems to be that the integration isn't using the credentials I configured.

My Request

I'd like the integration to actually authenticate with the admin credentials so I can use buttons/actions in the UI. Right now I have to use a workaround script, which defeats the purpose of having an integration.

Thank you for looking into this!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions