Custom Home Assistant integration for Tripp Lite/Eaton WebcardLX cards installed in:
Tower models:
- Tripp Lite
SU1000XLA - Tripp Lite
SU1500XLA - Tripp Lite
SU2200XLA - Tripp Lite
SU3000XLA - Tripp Lite
SU1000XLCD - Tripp Lite
SU2200XLCD - Tripp Lite
SU3000XLCD
2U rack models:
- Tripp Lite
SU1500RTXL2U - Tripp Lite
SU1500RTXL2UA - Tripp Lite
SU2200RTXL2U - Tripp Lite
SU2200RTXL2UA - Tripp Lite
SU3000RTXL2U - Tripp Lite
SU3000RTXL2UA
3U rack models:
- Tripp Lite
SU5000RT3U - Tripp Lite
SU5000RT3UHW - Tripp Lite
SU6000RT3U - Tripp Lite
SU8000RT3U - Tripp Lite
SU10000RT3U
The integration uses the local PowerAlert Device Manager REST API documented by Tripp Lite/Eaton and follows Home Assistant’s config entry, diagnostics, reauth, reconfigure, and entity naming patterns.
This integration can be installed with HACS as a custom repository.
-
Make sure HACS is installed and configured in Home Assistant.
-
In Home Assistant, go to HACS > Integrations.
-
Open the three-dot menu and select Custom repositories.
-
Add this repository URL:
https://github.com/Limecooler/ha-tripp-lite -
Select Integration as the category and click Add.
-
Search HACS for Tripp Lite WebcardLX.
-
Select the integration and click Download.
-
Restart Home Assistant.
After restart, if a WebcardLX card is on the same network, it may appear automatically as a discovered device in Settings > Devices & services. If not, add it manually:
- Go to Settings > Devices & services > Add integration.
- Search for Tripp Lite WebcardLX.
- Enter the IP address, username, and password. The default local username for these cards is
localadmin.
- Copy
custom_components/tripp_lite_webcardlxinto your Home Assistantcustom_componentsdirectory. - Restart Home Assistant.
After restart, if a WebcardLX card is on the same network, it may appear automatically as a discovered device in Settings > Devices & services. If not, add it manually:
- Go to Settings > Devices & services > Add integration.
- Search for Tripp Lite WebcardLX.
- Enter the IP address, username, and password. The default local username for these cards is
localadmin.
Create or select a WebcardLX user that can read UPS variables, loads, alarms, actions, ready state, and system details. The default local username for these cards is localadmin. To use buttons, switches, or services that control loads, reboot the UPS, turn outputs on or off, acknowledge alarms, or edit variables, the WebcardLX user must also have the matching control permissions.
UPS output controls are intentionally disabled by default where Home Assistant supports that behavior. Turning off, rebooting, or cycling a UPS or load can immediately interrupt connected equipment. Test controls with non-critical loads first.
The integration creates entities for any UPS device records reported by the WebcardLX. Variables and loads from connected peripheral devices are filtered out.
The polling interval can be adjusted in integration options.
WebcardLX cards are detected automatically via DHCP using two independent signals, so discovery works regardless of how a site has named or numbered its cards:
Hostname patterns — HA watches for DHCP leases whose hostname contains any of:
webcardlxpoweralerttripplitetripp-lite
MAC address OUI — Tripp Lite's registered hardware OUI is 00:06:67. Any WebcardLX card that uses factory-default MAC allocation is detected even when its hostname has been customized to something that does not match the hostname patterns.
When a previously unseen card appears, HA creates a notification and opens the setup flow with the discovered IP address pre-filled. The user provides the username and password to complete setup.
When a card that is already configured sends a DHCP lease, HA silently updates the stored IP address if it changed. No user interaction is required. This keeps the integration connected when a card's DHCP lease renews to a different address.
The integration tries to pin each config entry to a unique identifier in priority order: MAC address, serial number, asset tag, URL. The MAC address is the most reliable anchor for DHCP-discovered cards because it is stable across firmware updates and IP changes.
The WebcardLX card MAC is used for config entry identity but is not attached to every UPS device, because one card can report multiple UPS devices. UPS device identity uses the device serial number as the primary stable identifier, with a fallback to config entry + device ID when the card does not report one.
Non-main controllable loads and outlets are represented as child devices linked to the UPS device. The main output remains on the UPS device itself.
The integration dynamically discovers supported functionality from the card, so entities are only created when the API reports the relevant data or capability.
Primary UPS monitor sensors are created from /api/variables when the card reports matching data:
- UPS status
- Runtime remaining
- Battery capacity and battery voltage
- Input voltage, current, and frequency
- Input power (W)
- Output voltage, current, frequency, power, apparent power, reactive power, power factor, and utilization
- Output energy — 24-hour rolling total (kWh), reported as
totalstate class for the HA energy dashboard - Temperature
Additional readable UPS variables are exposed dynamically as sensors when they are not passwords, not empty, not editable settings, and not better represented as binary sensors.
The integration also creates diagnostic sensors for:
- Load/outlet state and metrics from
/api/loads - Alarm counts and highest severity from
/api/alarms/summary - WebcardLX ready/system detail/uptime diagnostics
Recent alarms from /api/alarms, supported action metadata from /api/actions/supported, and supported scheduling metadata from /api/schedulings/supported are collected for diagnostics and capability gating.
Binary sensors include:
- Online
- On battery
- Battery discharging
- Active alarms
- Boolean UPS status variables such as low-battery, fault, overload, or replace-battery indicators
- Controllable load on/off switches
- Editable boolean variables as configuration switches, disabled by default
Buttons are created only when /api/actions/supported reports matching support:
- Load cycle buttons, disabled by default
- UPS turn on/off/reboot buttons, disabled by default
- Acknowledge all alarms button
Editable WebcardLX variables are exposed as number, select, switch, or text entities when the API reports the variable as editable. These entities are disabled by default because they represent configuration changes rather than routine monitoring.
Services are provided for load actions, UPS power actions, alarm acknowledgement, variable updates, and editable device properties. Services use Home Assistant entity, device, or config-entry targets. They do not accept raw WebcardLX variable IDs, load IDs, or implicit "only entry" defaults.
The WebcardLX API also includes broad card-administration surfaces such as local users, passwords, AAA servers, email/SMS/SNMP contacts, notification action-rule CRUD, AutoProbe management, log export, and schedule CRUD. Those are not exposed as entities because they are management-plane features of the card rather than UPS capabilities specific to the supported SU models.
The integration uses a DataUpdateCoordinator and local polling. The default polling interval is 30 seconds; the minimum accepted interval is 10 seconds.
Required polling surfaces are /api/devices and /api/variables. If either fails, the coordinator update fails and entities become unavailable through Home Assistant’s normal coordinator behavior.
Other surfaces are optional and fail soft: loads, load groups, controls, actions, schedules, alarms, events, ready state, system details, and uptime. Endpoint-specific failures are logged and replaced with safe defaults so core UPS sensors can remain available when a card user lacks a permission or a firmware build omits a surface. A 403 on an optional endpoint is treated as permission or capability failure, not automatic reauthentication.
Variables, loads, alarm summary, ready state, and uptime refresh on every normal poll. Static or slow metadata refreshes less often: actions, schedules, load groups, control metadata, and system details refresh every 10 minutes. Events refresh every 5 minutes and are limited to the newest records. Requests use a 10 second total timeout with a 5 second connect timeout.
Runs an action against a targeted WebcardLX load switch entity. Target one or more switch entities created by this integration.
Required fields:
target.entity_id: load switch entitiesaction:on,off, orcycle
Runs immediate UPS device controls documented by the API. Target one or more Home Assistant UPS devices created by this integration.
Required fields:
target.device_idaction:turn_on,turn_off, orreboot
Optional fields:
delayturn_on_delayturn_off_delay
Acknowledges specific active alarm IDs for an explicit config entry. Alarm IDs are validated against the current coordinator data.
Required fields:
config_entry_idalarm_ids
Acknowledges all active alarms for an explicit config entry.
Required fields:
config_entry_id
Updates a targeted WebcardLX configuration entity. Target a number, select, switch, or text entity created by this integration. The service validates the current variable capability before writing and rejects password variables.
Required fields:
target.entity_idvalue
Optional fields:
tolerance
Updates editable UPS device metadata. Target one or more Home Assistant UPS devices. The allowed fields are name, location, region, configured_device_id, configured_asset_tag, and install_date.
Notify when the UPS has an active alarm:
alias: UPS active alarm
triggers:
- trigger: state
entity_id: binary_sensor.ups_active_alarms
to: "on"
actions:
- action: notify.mobile_app_phone
data:
message: "The UPS has an active alarm."Turn off a controllable load:
action: tripp_lite_webcardlx.execute_load_action
target:
entity_id: switch.rack_ups_load_1
data:
action: offUpdate an editable threshold variable:
action: tripp_lite_webcardlx.set_variable
target:
entity_id: number.rack_ups_low_battery_threshold
data:
value: 25
tolerance: 0.5Notify when the UPS transfers to battery:
alias: UPS on battery
triggers:
- trigger: state
entity_id: binary_sensor.ups_on_battery
to: "on"
actions:
- action: notify.mobile_app_phone
data:
message: "The UPS is running on battery."Use the integration’s Reconfigure flow to change the IP address or credentials. Password fields are not prefilled; leaving the password blank during reconfigure keeps the stored password.
Use Options to change the polling interval.
If authentication fails during setup or polling, Home Assistant starts the reauthentication flow.
Diagnostics are available from the integration’s device/service page. The diagnostics output includes config entry data and the last coordinator payload with sensitive values redacted, including URLs, usernames, passwords, tokens, authorization headers, serial numbers, MAC addresses, asset tags, location/contact-style fields, and raw alarm/event text.
The repository includes a command-line smoke test for validating a real WebcardLX card before or during field testing. It uses the same API client and most of the same entity classification helpers as the Home Assistant integration. By default it is read-only: it logs in, checks required and optional endpoints, filters data to supported UPS devices, estimates the entities that Home Assistant would create, and logs out.
Run it from the repository with a Python environment that has the test dependencies installed:
WEBCARDLX_PASSWORD='secret' .venv312/bin/python scripts/webcardlx_smoke_test.py \
192.168.1.50 \
--insecure \
--refresh-token-test \
--verbose \
--report-json /tmp/webcardlx-smoke.jsonThe script defaults to HTTPS and username localadmin. Use --scheme http for HTTP cards, --port for nonstandard ports, and --username only when the card uses a different account. Use --insecure only for a local card with a self-signed certificate. Optional endpoint failures are reported as warnings because permissions and firmware capabilities vary by card; add --strict when you want optional endpoint warnings or unsupported-model filtering to fail the run.
Mutation checks are opt-in. Variable updates, alarm acknowledgements, and device-property updates require --allow-mutations. Load and UPS power controls also require --i-understand-power-risk because they can interrupt connected equipment.
WEBCARDLX_PASSWORD='secret' .venv312/bin/python scripts/webcardlx_smoke_test.py \
192.168.1.50 \
--insecure \
--allow-mutations \
--set-variable 1234 42For power-control tests, first run with --verbose and inspect the controllable load sample. Then pass explicit WebcardLX IDs, for example --execute-load LOAD_ID DEVICE_ID cycle, together with both mutation flags. Avoid power-control smoke tests on production loads unless the attached equipment can be safely interrupted.
cannot_connect: Confirm the IP address, routing, and that PowerAlert Device Manager is reachable from Home Assistant.invalid_auth: Confirm the WebcardLX local username and password. The default local username islocaladmin.unsupported_model: Confirm the UPS model is one of the supported models listed at the top of this document. The integration accepts any device record when no explicitly supported model is detected, so a missing device record is more likely the cause than a missing model entry.- Self-signed HTTPS certificate failures: leave Verify SSL certificate disabled, which is the default for new entries.
- Missing load switches: check whether
/api/actions/supportedand/api/loadsreport load control support andcontrollable: true. - Missing UPS status sensors: check whether
/api/variablesincludes a status, operating mode, power source, input source, line status, online, on-battery, or battery-discharging variable.
Direct API checks can help isolate permissions and device capability issues. Replace the host and password with values from your environment, and change the username only if the card is not using the default localadmin account. The token extraction below accepts both flat and JSON:API-style token responses:
TOKEN="$(
curl -sk -X POST "https://192.168.1.50/api/oauth/token" \
-H "Content-Type: application/json" \
-d '{"username":"localadmin","password":"secret","grant_type":"password"}' \
| jq -r '.access_token // .data.attributes.access_token'
)"
curl -k -H "Authorization: Bearer ${TOKEN}" https://192.168.1.50/api/variables
curl -k -H "Authorization: Bearer ${TOKEN}" https://192.168.1.50/api/actions/supported
curl -k -H "Authorization: Bearer ${TOKEN}" https://192.168.1.50/api/loads
curl -k -H "Authorization: Bearer ${TOKEN}" https://192.168.1.50/api/alarms/summaryIf the API returns data but entities are missing, confirm the relevant variable or load belongs to a supported UPS device record rather than a connected peripheral. The integration filters variables and loads to the supported UPS device IDs and keeps vanished variables/loads unavailable rather than silently retargeting them.
The integration follows the standard Home Assistant component layout with manifest.json, config_flow.py, coordinator.py, platform files, entity.py, diagnostics.py, services.yaml, strings.json, icons.json, and quality_scale.yaml. The WebcardLX client is embedded in api.py for this custom integration; if this is prepared for Home Assistant Core, the client should be split into a separately versioned async library and listed in manifest.json requirements.
- Delete the integration entry from Settings > Devices & services.
- Restart Home Assistant if you plan to remove the custom component files.
- Delete
custom_components/tripp_lite_webcardlx.