Home Assistant
UPS
Here is my configuration.yaml for a cyberpower and the entities card setup.
First you need to download and install the latest CyberPower Panel Business V4 at https://www.cyberpowersystems.com/products/software/power-panel-business/
I installed this on my Windows 10 computer (IP 192.168.1.7). I disabled Personal Edition of CyberPower in my startup services and installed Version 4 of the Business edition that I downloaded from the link above (ppb440-setup.exe).
You launch CyberPower Business (username : admin , password: admin) and it should automatically find your UPS via the USB port connection.
I went to settings, enabled SNMP v1, and created the public and private groups and linked to 0.0.0.0 which means any computer on my network can query the snmp service. I set these to read/write. Open port 161 in the firewall and set for UDP inbound traffic.
Secondly you need to download the latest MIB file from CyberPower at https://www.cyberpowersystems.com/products/software/mib-files/
Note where this is saved, mine was of course in the Windows Downloads folder. Unzip the file, mine was called MIB002-0001-10.mib and I stored it in a folder called "MIB" off the Downloads folder.
Use an MIB browser, I used iReasoning MIB Browser (https://www.ireasoning.com/mibbrowser.shtml)
Install and start the iReasoning Browser. Choose "File...Open..." and go to the folder where you stored the CyberPower MIB file and select it. Start by selecting your ip address or localhost as the address in the top right box. In my image below you will see it is connected to 'localhost' since I am running the iReasoning Browser on the same computer the UPS is plugged into. If you are running this on another computer you would have to put in the IP address of the computer attached to the UPS (192.168.1.7 in my case). Easier to just run on the same Windows 10 machine. Note that my HA is running in Docker on a Ubuntu machine elsewhere on my network at 192.168.1.38 but I never need to enter this anywhere to get everything to work.
It's not super intuitive but start after loading the MIB go down the tree with 'private...enterprises...cps...products...ups' and work your way down the folder tree in the MIB file and you will see lots of OIDs you can use. Double click a 'leaf' on the tree and it will query the OID and return a value. The OID is listed at the bottom left and the values when you double click are shown on the right hand panel.
You can try any of the OIDs to see which work on your UPS, most were OK on my Value II 1600E but if the OID is not supported it will just tell you that.
Note two things. First the OIDs from CyberPower need the ".0" at the end, you cannot use just the OID you see in a viewer. Second, look at the response data, it might be an integer; ticks (e.g. time remaining in my example below); or a series of strings, for example the "Status", which you can then use to develop the value_template in configuration.yaml. I have many examples below.
Then its time to edit the 'sensor' section of your configuration.yaml file.
############################### # # # UPS # # # ############################### - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.4.2.1.0 accept_errors: 'true' community: public port: 161 name: UPS Output Voltage value_template: '{{ (value | int / 10 ) }}' unit_of_measurement: "V" - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.1.1.1.0 accept_errors: 'true' community: public port: 161 name: UPS Model - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.4.1.1.0 accept_errors: 'true' community: public port: 161 name: UPS Status value_template: > {% set vals = {'1': 'unknown', '2':'onLine', '3':'onBattery', '4':'onBoost', '5':'sleep', '6':'off', '7':'rebooting'} %} {{vals[value]}} - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.3.2.6.0 accept_errors: 'true' community: public port: 161 name: UPS Advanced Status value_template: > {% set vals = {'1': 'normal', '2':'Over Voltage', '3':'Under Voltage', '4':'Frequency failure', '5':'Blackout'} %} {{vals[value]}} - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.4.1.1.0 accept_errors: 'true' community: public port: 161 name: UPS Battery Status value_template: > {% set vals = {'1': 'unknown', '2':'Normal', '3':'Battery Low'} %} {{vals[value]}} - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.1.0 accept_errors: 'true' community: public port: 161 name: UPS Battery Capacity value_template: '{{ (value | float) }}' unit_of_measurement: "%" - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.4.2.3.0 accept_errors: 'true' community: public port: 161 name: UPS Load value_template: '{{ (value | float) }}' unit_of_measurement: "%" - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.2.0 accept_errors: 'true' community: public port: 161 name: UPS Battery Voltage value_template: '{{ (value | int / 10 ) }}' unit_of_measurement: "V" - platform: snmp host: 192.168.1.7 baseoid: .1.3.6.1.4.1.3808.1.1.1.2.2.4.0 accept_errors: 'true' community: public port: 161 name: UPS Run Time Remaining value_template: >- {% set time = (value | int) | int %} {% set minutes = ((time % 360000) / 6000) | int%} {% set hours = ((time % 8640000) / 360000) | int %} {% set days = (time / 8640000) | int %} {%- if time < 60 -%} Less then 1 min {%- else -%} {%- if days > 0 -%} {{ days }}d {%- endif -%} {%- if hours > 0 -%} {%- if days > 0 -%} {{ ' ' }} {%- endif -%} {{ hours }}hr {%- endif -%} {%- if minutes > 0 -%} {%- if days > 0 or hours > 0 -%} {{ ' ' }} {%- endif -%} {{ minutes }}min {%- endif -%} {%- endif -%} - platform: template sensors: ups_battery_capacity: unit_of_measurement: "%" value_template: "{{ states('sensor.ups_battery_capacity_2') }}" friendly_name: "Battery Capacity" icon_template: > {% set level = states('sensor.ups_battery_capacity_2') | float | multiply(0.1) | round(0,"floor") | multiply(10)| round(0) %} {% if is_state('sensor.ups_status', 'onLine') and is_state('sensor.ups_battery_capacity_2' , '100.0' ) %} mdi:battery {% elif is_state('sensor.ups_status', 'onLine') %} mdi:battery-charging-{{level}} {% else %} mdi:battery-{{level}} {% endif %}
Note that the template at the bottom creates a smart icon. It shows the level of the battery and the icon has the 'flash' symbol on the right if it is charging and does not have the flash if at 100% or running on batteries and discharging. (Thanks to RobC and AndyVR on Discord for this icon code)
the entities card setup
type: entities entities: - entity: sensor.ups_model name: Model icon: mdi:power-plug - entity: sensor.ups_status name: Status icon: mdi:power - entity: sensor.ups_battery_capacity name: Battery Capacity - entity: sensor.ups_run_time_remaining name: Run time remaining icon: mdi:av-timer - entity: sensor.ups_battery_status name: Battery Status icon: mdi:car-battery - entity: sensor.ups_battery_voltage name: Battery Voltage icon: mdi:car-battery - entity: sensor.ups_output_voltage name: Output Volts icon: mdi:power-socket-au - entity: sensor.ups_advanced_status name: Advanced status - entity: sensor.ups_load icon: mdi:signal-cellular-3 header: type: picture image: local/ups5.jpg tap_action: action: none hold_action: action: none
and the card itself Here is my configuration.yaml for a cyberpower and the entities card setup.
First you need to download and install the latest CyberPower Panel Business V4 at https://www.cyberpowersystems.com/products/software/power-panel-business/
I installed this on my Windows 10 computer (IP 192.168.1.7). I disabled Personal Edition of CyberPower in my startup services and installed Version 4 of the Business edition that I downloaded from the link above (ppb440-setup.exe).
You launch CyberPower Business (username : admin , password: admin) and it should automatically find your UPS via the USB port connection.
I went to settings, enabled SNMP v1, and created the public and private groups and linked to 0.0.0.0 which means any computer on my network can query the snmp service. I set these to read/write
Note in the image above the battery is at 94% and charging (the flash icon to the right of the battery). This is using the icon created in the ‘sensors’ template
https://community.home-assistant.io/t/monitor-cyberpower-ups-plugged-into-windows-machine-via-usb