Monitor CyberPower UPS plugged into Windows Machine via USB

Good Job @Simon_Bunn
Here what I have added to your idea:


inside **/homeassistant/ **
file: configuration.yaml

(...)
## 
recorder:
  purge_keep_days: 60
  auto_purge: true
  auto_repack: true
  #  include:
  #    domains:
  #      - sensor
  #      - switch
  #      - media_player
  exclude:
    entities:
      - sensor.date
    entity_globs:
      - sensor.weather_*
      - sensor.ups*_time
      - sensor.ups*_date
      - sensor.ups*_date_n_time*
      - sensor.ups*_selftest_date_temp*
      - sensor.ups*_run_time*
      - sensor.ups*_uptime*
      - sensor.system_monitor_network_throughput_*
      - sensor.system_monitor_memory_*
      - sensor.ups*_serial_number
      - sensor.ups*_serial_number
      - sensor.ups*_firmware*

(...)
sensor: !include_dir_merge_list ./entities/sensors
switch: !include_dir_merge_list ./entities/switches

inside **/homeassistant/entities/sensors/ **
file: cyberpower_ups01.yaml

###################################
# CyberPower UPS
#
# UPS on 192.168.1.11 - PC
#
# version 2025-02-12 09:23:14.524
###################################
# Inpired by:
#   https://community.home-assistant.io/t/cyberpower-ups-powerpanel-cloud/509968/7
#
# Confirmed working for model:
#    CP1500AVRLCD3 - PowerPanel Business v4.11.3 on Windows 11 (10.0.26100 64-bit)
#    CP1350AVRLCDa - PowerPanel Business v4.11.3 on Ubuntu 22.04.1 (Linux 6.8.0-52-generic 64-bit)
#
# Download location: https://www.cyberpower.com/global/en/download
#    Linux:   CyberPower_PPB_Linux+64bit_v4.11.3.sh - PowerPanel Business Local/Remote for Linux 64bit
#    Windows: CyberPower_PPB_Windows_v4.11.3        - PowerPanel Business Local/Remote for Windows
#
# unique_id: generated on: Version 1 of https://generateuuid.online/
#
#sensor:
- platform: snmp
  baseoid: .1.3.6.1.2.1.1.3.0
  name: UPS01 Uptime
  unique_id: 94840230-f0b9-11ef-1001-bdf054715aa8
  #  value_template: >
  #    {% set uptime = (value | string()) %}
  #    {% set seconds = (((uptime|string)[-2:])|int(0) % 60) %}
  #    {% set minutes = ((uptime|int(0) % 360000) // 6000)  %}
  #    {% set hours = ((uptime|int(0) % 8640000) // 360000)+0.1 %}
  #    {% set days = (uptime|int(0) // 8640000)  %}
  #    {%- if (days >= 2) %}{% set txtDay='days' %}{%- else -%}{% set txtDay='day' %}{%- endif %}
  #    {%- if (days < 1) %}{% set txtDay='' %}{% set days=0 %}{%- else -%}{% set txtDay=(txtDay+", ") %}{%- endif %}
  #    {% set seconds = '%ds ' % seconds %}
  #    {% set minutes = '%dm ' % minutes %}
  #    {% set hours = '%dh ' % hours if hours else '' %}
  #    {% set days = '%d ' % days if days else '' %}
  #    {{ days }}{{ txtDay }}{{ hours }}{{ minutes }}{{ seconds }}
  value_template: "{{ ((value | int(0) - (8640000) | int(0))/100) | int(0) | timestamp_custom('%dd %H:%M:%S', false,0) }}"
  scan_interval: 2
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.1.1.0
  name: UPS01 Model
  unique_id: 94840231-f0b9-11ef-0001-bdf054715aa8
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.1.2.0
  name: UPS01 Hostname
  unique_id: 94840232-f0b9-11ef-0001-bdf054715aa8
  value_template: >-
    {% set tmpData = (value | string) | upper %}
    {{ tmpData }}
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.2.1.0
  name: UPS01 FirmwareA
  unique_id: 94840233-f0b9-11ef-0001-bdf054715aa8
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.2.4.0
  name: UPS01 FirmwareB
  unique_id: 94840234-f0b9-11ef-0001-bdf054715aa8
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_firmware:
      friendly_name: "UPS01 Firmware"
      unique_id: 94840235-f0b9-11ef-0001-bdf054715aa8
      value_template: "{{ states('sensor.ups01_firmwarea') }}_{{ states('sensor.ups01_firmwareb') }}"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.2.7.0
  name: UPS01 Power Rating
  unique_id: 94840236-f0b9-11ef-0001-bdf054715aa8
  device_class: power
  unit_of_measurement: "W"
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.1.2.3.0
  name: UPS01 Serial Number
  unique_id: 94840237-f0b9-11ef-0001-bdf054715aa8
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.2.1.1.0
  name: UPS01 Battery Status
  unique_id: 94840238-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set vals = {'0': 'Unknown', '1':'Unknown', '2':'Normal', '3':'Low', '4':'NotPresent'} %}
    {{vals[value]}}
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.2.1.3.0
  name: UPS01 Battery Installed Date temp
  unique_id: 94840239-f0b9-11ef-0001-bdf054715aa8
  value_template: >-
    {% set tmpData = strptime(value, '%m/%d/%Y', now()) | as_datetime %}
    {%- if (tmpData is defined) and (tmpData != none) -%}
      {{ (tmpData.isoformat() | string)[0:10] }}
    {%- else -%}
      {{ '2000-01-01' }}
    {%- endif -%}
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_battery_installed_date:
      friendly_name: "UPS01 Battery Installed Date"
      unique_id: 9484023a-f0b9-11ef-0001-bdf054715aa8
      device_class: date
      value_template: "{{ states('sensor.ups01_battery_installed_date_temp') }}"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.1.0
  name: UPS01 Battery Capacity
  unique_id: 9484023b-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | float) }}"
  device_class: BATTERY
  unit_of_measurement: "%"
  scan_interval: 30
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.2.0
  name: UPS01 Battery Voltage
  unique_id: 9484023c-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | int / 10 ) }}"
  device_class: voltage
  unit_of_measurement: "V"
  scan_interval: 20
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.4.0
  name: UPS01 Run Time Remaining
  unique_id: 9484023d-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ ( (value | int) / (100 * 60) ) | round(1) }}"
  unit_of_measurement: minutes
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.3.2.2.0
  name: UPS01 Input Voltage
  unique_id: 9484023e-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | int / 10 ) }}"
  device_class: voltage
  unit_of_measurement: "V"
  scan_interval: 30
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.3.2.6.0
  name: UPS01 Advanced Status
  unique_id: 9484023f-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set vals = {'1': 'Normal', '2':'Over Voltage', '3':'Under Voltage', '4':'Frequency Failure', '5':'Blackout'} %}
    {{vals[value]}}
  scan_interval: 15
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.4.1.1.0
  name: UPS01 Status
  unique_id: 94840240-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set vals = {'1': 'Unknown', '2':'OnLine', '3':'OnBattery', '4':'OnBoost', '5':'OnSleep', '6':'Off', '7':'Rebooting', '8':'OnECO', '9':'OnBypass', '10':'OnBuck', '11':'OnOverload'} %}
    {{vals[value]}}
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.4.2.1.0
  name: UPS01 Output Voltage
  unique_id: 94840241-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | int / 10 ) }}"
  device_class: voltage
  unit_of_measurement: "V"
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
##
## note: the Output current isn't supported on model CP1350AVRLCDa
##
## use this calculation for model CP1350AVRLCDa , .1.3.6.1.4.1.3808.1.1.1.4.2.4.0 is not supported
##- platform: template
##  sensors:
##    ups01_output_current:
##      friendly_name: "UPS01 Output Current"
##      unique_id: 94840242-f0b9-11ef-0001-bdf054715aa8
##      device_class: current
##      unit_of_measurement: "A"
##      value_template: "{{ ((states('sensor.ups01_load') | float(0) * states('sensor.ups01_power_rating') | float(0) / states('sensor.ups01_output_voltage') | int ) / 100) | round(2) }} "
##
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.4.2.4.0
  name: UPS01 Output Current
  unique_id: 94840242-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | int / 10 ) }}"
  unit_of_measurement: "A"
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_output_power:
      friendly_name: "UPS01 Output Power"
      unique_id: 94840243-f0b9-11ef-0001-bdf054715aa8
      device_class: power
      unit_of_measurement: "W"
      value_template: "{{ (states('sensor.ups01_output_current') | float(0) * states('sensor.ups01_output_voltage') | int ) | round(1) }} "
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.4.2.3.0
  name: UPS01 Load
  unique_id: 94840244-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (value | float) }}"
  device_class: BATTERY
  unit_of_measurement: "%"
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.3.0
  name: UPS01 Selftest Result
  unique_id: 94840245-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set vals = {'0': 'Unknown', '1':'Ok', '2':'Failed', '3':'InvalidTest', '4':'TestInProgress'} %}
    {{vals[value]}}
  scan_interval: 5
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.4.0
  name: UPS01 Selftest Date temp
  unique_id: 94840246-f0b9-11ef-0001-bdf054715aa8
  value_template: >-
    {% set tmpData = strptime(value, '%m/%d/%Y', now()) | as_datetime %}
    {%- if (tmpData is defined) and (tmpData != none) -%}
      {{ (tmpData.isoformat() | string)[0:10] }}
    {%- else -%}
      {{ '2000-01-01' }}
    {%- endif -%}
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_selftest_date:
      friendly_name: "UPS01 Selftest Date"
      unique_id: 94840247-f0b9-11ef-0001-bdf054715aa8
      device_class: date
      value_template: "{{ states('sensor.ups01_selftest_date_temp') }}"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.7.0
  name: UPS01 Advance Test Estimation Results
  unique_id: 94840248-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set vals = {'0': 'Unknown', '1':'Ok', '2':'InvalidEstimation', '3':'EstimationInProgress'} %}
    {{vals[value]}}
  scan_interval: 15
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.8.0
  name: UPS01 Advance Test Estimation Date temp
  unique_id: 94840249-f0b9-11ef-0001-bdf054715aa8
  value_template: >-
    {%- if (states('sensor.ups01_advance_test_estimation_results') == 'Ok') -%}
      {{ as_datetime(strptime(value, '%m/%d/%Y', 0)).strftime('%Y-%m-%d') }}
    {%- else -%}
      {{ '2000-01-01' }}
    {%- endif -%}
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_advance_test_estimation_date:
      friendly_name: "UPS01 Advance Test Estimation Date"
      unique_id: 9484024a-f0b9-11ef-0001-bdf054715aa8
      device_class: date
      value_template: "{{ states('sensor.ups01_advance_test_estimation_date_temp') }}"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.2.1.4.0
  name: UPS01 IP Address
  unique_id: 9484024b-f0b9-11ef-0001-bdf054715aa8
  value_template: >
    {% set x = value %}
    {% set x = x[0] | ord | string + '.' +  x[1] | ord | string + '.' + x[2] | ord | string + '.' + x[3] | ord | string %}
    {{ x }}
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.2.1.5.1.0
  name: UPS01 Date
  unique_id: 9484024c-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ (strptime(value, '%m/%d/%Y', '2000-01-01') | string)[0:10] }} "
  scan_interval: 2
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.2.1.5.2.0
  name: UPS01 Time
  unique_id: 9484024d-f0b9-11ef-0001-bdf054715aa8
  value_template: "{{ value }}"
  scan_interval: 2
  host: 192.168.1.11
  port: 161
  community: public
  accept_errors: "false"
- platform: template
  sensors:
    ups01_clock:
      friendly_name: "UPS01 Clock"
      unique_id: 9484024e-f0b9-11ef-0001-bdf054715aa8
#      device_class: date
#       {% set tempData = (states('sensor.ups01_date')) + " " + (states('sensor.ups01_time'))  %}
#       {% set tempData = ( (states('sensor.ups01_date'))|string + "T" + (states('sensor.ups01_time')|string)|string ) |as_datetime(0) %}
      value_template: >
        {% set tempData = (states('sensor.ups01_date')) + " " + (states('sensor.ups01_time'))  %}
        {{ tempData }}
      attribute_templates:
        varTime: "{{ states('sensor.ups01_time') }}"
        varDate: "{{ states('sensor.ups01_date') }}"

#
#
#
# .1.3.6.1.4.1.3808.1.1.1.2.1.2.0
#     The UPS wasted battery time since the UPS has transfered to backup mode
#     TIMETICKS
#
# .1.3.6.1.4.1.3808.1.1.1.5.2.10.0
#     The delay time the UPS will remain on after receiving a turn off command. The possible values are between 60 to 5940 seconds
#     TIMETICKS
#
## .1.3.6.1.4.1.3808.1.1.1.5.2.11.0
#    The delay time the UPS will enter sleep mode after receiving a sleep command. WThe possible values are between 60 to 5940 seconds.
#     TIMETICKS
#
# This one is buggy
# .1.3.6.1.4.1.3808.1.1.1.5.2.4.0
#     This value is set to handle audible alarms when power failure.
#     INTEGER {timed(1), enable(2), disable(3), mute(4)}
#
# This one is buggy
# .1.3.6.1.4.1.3808.1.1.1.6.2.5.0
#    UPS will beep and simultaneously turn on the panel lights when the variable is set to flashAndBeep(2)
#    INTEGER {noFlashAndBeep(1), flashAndBeep(2)}

# This one is buggy
# .1.3.6.1.4.1.3808.1.1.1.7.2.1.0
#   The schedule of the UPS automatic selftest.
#   INTEGER {unknown(1), biweekly(2), weekly(3), atTurnOn(4), never(5) }
#
# This one is buggy
# .1.3.6.1.4.1.3808.1.1.1.7.2.5.0
#    UPS will perform a panel indicator test when the variable
#    INTEGER {noTestIndicators(1), testIndicators(2)}
#
# .1.3.6.1.4.1.3808.1.1.1.7.2.6.0
#    UPS will discharge to calibrate the UPS runtime when the variable is set to performEstimation(2).
#    INTEGER {noPerformEstimation(1), performEstimation(2), cancelCurrentEstimation(3)}
#
# .1.3.6.1.4.1.3808.1.1.1.3.2.5
#    The reason of UPS power failure. This value is set to:
#      -noTransfer(1), if UPS is in utility mode.
#      -highLineVoltage(2), if UPS switch to battery mode by reason of input voltage over the high transfer vloltage.
#      -brownout(3), if UPS switch to battery mode by reason of input voltage under the low transfer voltage.
#      -selfTest(4), if the UPS was commanded to do a self test.
#
# .1.3.6.1.4.1.3808.1.1.1.2.2.5.0
#   This value indicates if UPS batteries need to be replaced.
#    INTEGER {noBatteryNeedsReplacing(1),batteryNeedsReplacing(2)}
#
# .1.3.6.1.4.1.3808.1.1.1.2.1.3.0
#  Write to this value: to set the Battery Date
#     The UPS batteries last replaced date in mm/dd/yyyy format.
#     This value is originally set when manufactured. If batteries replaced, administrator should reset this value.

inside **/homeassistant/entities/switches/ **
file: cyberpower_ups01.yaml

###################################
# CyberPower UPS
#
# UPS on 192.168.1.11 - PC
#
# version 2025-02-12 09:23:14.524
###################################
# Inpired by:
#   https://community.home-assistant.io/t/cyberpower-ups-powerpanel-cloud/509968/7
#
# Confirmed working for model:
#    CP1500AVRLCD3 - PowerPanel Business v4.11.3 on Windows 11 (10.0.26100 64-bit)
#    CP1350AVRLCDa - PowerPanel Business v4.11.3 on Ubuntu 22.04.1 (Linux 6.8.0-52-generic 64-bit)
#
# Download location: https://www.cyberpower.com/global/en/download
#    Linux:   CyberPower_PPB_Linux+64bit_v4.11.3.sh - PowerPanel Business Local/Remote for Linux 64bit
#    Windows: CyberPower_PPB_Windows_v4.11.3        - PowerPanel Business Local/Remote for Windows
#switch:
- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.2.0
  name: UPS01 Test Battery
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: private
  payload_on: 2
  payload_off: 1

- platform: snmp
  baseoid: .1.3.6.1.4.1.3808.1.1.1.7.2.6.0
  name: UPS01 Calibrate Battery
  scan_interval: 60
  host: 192.168.1.11
  port: 161
  community: private
  payload_on: 2
  payload_off: 1

Here is my “graphical” modifications:

title: UPS on Host
type: entities
entities:
  - type: divider
    style:
      height: 0px
      margin-top: "-20px;"
  - entity: sensor.ups01_advanced_status
    name: UPS Status
    icon: mdi:power
  - type: divider
    style:
      height: 0px
      margin-top: "-15px;"
  - entity: sensor.ups01_run_time_remaining
    name: Run Time Remaining
    icon: mdi:av-timer
  - type: divider
    style:
      height: 0px
      margin-top: "-15px;"
  - entity: sensor.ups01_battery_capacity
    name: Battery Capacity
  - type: divider
    style:
      height: 0px
      margin-top: "-15px;"
  - entity: sensor.ups01_load
    icon: mdi:signal-cellular-3
    name: Load
  - type: divider
    style:
      height: 0px
      margin-top: "-15px;"
  - entity: sensor.ups01_input_voltage
    name: Input Voltage
  - type: divider
    style:
      height: 0px
      margin-top: "-15px;"
  - entity: sensor.ups01_output_power
    name: Output Power
    icon: mdi:lightning-bolt
  - type: divider
    style:
      height: 0px
      margin-top: "-10px;"
  - entity: sensor.ups01_battery_voltage
    name: Battery Voltage
    icon: mdi:car-battery
  - type: divider
    style:
      height: 0px
      margin-top: "-10px;"
  - entity: sensor.ups01_battery_status
    name: Battery Status
    icon: mdi:checkbox-marked-outline
    type: custom:secondaryinfo-entity-row
    secondary_info: Installed [[ sensor.ups01_battery_installed_date ]]
  - type: divider
    style:
      background-color: none
      height: 1px
      margin-top: "-5px;"
      width: 95%
      margin-left: auto
      margin-right: auto
  - type: divider
    style:
      background-color: none
      height: 0px
      margin-top: "-5px;"
      width: 95%
      margin-left: auto
      margin-right: auto
  - entity: sensor.ups01_hostname
    name: System Hostname
    type: custom:secondaryinfo-entity-row
    secondary_info: "[[ sensor.ups01_ip_address ]]"
  - type: divider
    style:
      height: 0px
      margin-top: "-5px;"
  - entity: sensor.ups01_model
    type: custom:multiple-entity-row
    name: Model
    icon: mdi:power-plug
    secondary_info:
      name: S/N
      entity: sensor.ups01_serial_number
      type: custom:multiple-entity-row
      secondary_info: sensor.ups01_serial_number
    entities:
      - entity: sensor.ups01_power_rating
        name: Rating
        styles:
          width: 100px
          text-align: center
          color: lightblue
          font-size: 12.5px
  - type: divider
    style:
      height: 0px
      margin-top: "-10px;"
  - entity: sensor.ups01_firmware
    name: Firmware
  - type: divider
    style:
      height: 0px
      margin-top: "-10px;"
  - entity: sensor.ups01_uptime
    icon: mdi:clock-outline
    name: Uptime
    type: custom:secondaryinfo-entity-row
    secondary_info: "Clock: [[ sensor.ups01_date_n_time ]]"
  - type: divider
    style:
      background-color: none
      height: 1px
      margin-top: "-5px;"
      width: 95%
      margin-left: auto
      margin-right: auto
  - type: divider
    style:
      background-color: none
      height: 0px
      margin-top: "-5px;"
      width: 95%
      margin-left: auto
      margin-right: auto
  - entity: switch.ups01_test_battery
    type: custom:multiple-entity-row
    name: Battery Selftest
    icon: mdi:battery-check
    toggle: true
    secondary_info: null
    entities:
      - entity: sensor.ups01_selftest_result
        name: Results
        styles:
          width: 60px
          text-align: center
          color: lime
          font-size: 12.5px
      - entity: sensor.ups01_selftest_date
        name: Test Date
        styles:
          width: 65px
          text-align: center
          font-size: 11px
  - type: divider
    style:
      height: 0px
      margin-top: "-5px;"
  - entity: switch.ups01_calibrate_battery
    type: custom:multiple-entity-row
    name: Battery Test Estimation
    icon: mdi:wrench-clock
    toggle: true
    secondary_info:
      name: Take ~
      entity: sensor.ups01_run_time_remaining
      type: custom:multiple-entity-row
      secondary_info: sensor.ups01_run_time_remaining
    entities:
      - entity: sensor.ups01_advance_test_estimation_results
        name: Results
        styles:
          width: 60px
          text-align: center
          color: lime
          font-size: 12.5px
      - entity: sensor.ups01_advance_test_estimation_date_temp
        name: Test Date
        styles:
          width: 65px
          text-align: center
          font-size: 11px
show_header_toggle: false
state_color: true
grid_options:
  columns: 12
  rows: auto