ESPHome component to monitor and control a APC UPS via RS232 with MQTT
- Fixed switches. They're working now.
- When power is lost or restored, an external command (Q-status flag) is sent to update the status (on_line and on_battery)
- Added a record of the date of battery replacement
- Added switches: shutdown with grace period, soft shutdown, shutdown immediately, turn on
- APC SUA1000I (firmware
652.13.I)
- ESPHome 2024.5.0 or higher.
- Generic ESP32/ESP8266 board
RS232 UART-TTL
┌───────────┐ ┌──────────┐ ┌─────────┐
│ │<--- TX -----│ RS232 │<---- TX ------│ │
│ │---- RX ---->│ to TTL │----- RX ----->│ ESP32/ │
│ APC UPS │<--- GND --->│ module │<---- GND ---->│ ESP8266 │
│ │ | |<-- 3.3V VCC --│ │
│ │ └──────────┘ │ │
│ │ ┌──────────┐ │ │
│ │<--- GND --->│ DC-DC │<---- GND ---->│ │
│ │---- 24V --->| XL1509 │-- 3.3V VCC -->│ │
└───────────┘ └──────────┘ └─────────┘
| UPS pin | RS232 to TTL pin | MAX3232 pin |
|---|---|---|
| RX (pin 1) | RX (pin 2) | P14 (DOUT1) |
| TX (pin 2) | TX (pin 3) | P13 (RIN1) |
| GND (pin 4, 9) | GND (pin 5) | P15 (GND) |
| 24V battery (pin8) | 24V (free pin 9) | connected to DC-DC |
| Pin | Label | ESPHome | ESP8266 | ESP32 | ESP-01 |
|---|---|---|---|---|---|
| P11 (DIN1) | TXD | tx_pin |
GPIO4 |
GPIO16 |
GPIO1 |
| P12 (ROUT1) | RXD | rx_pin |
GPIO5 |
GPIO17 |
GPIO3 |
| P16 (VCC) | VCC | ||||
| P15 (GND) | GND |
You can install this component with ESPHome external components feature like this:
external_components:
- source: github://samoswall/esphome-apc-ups@main| Type | Symbol | Variable | Info |
|---|---|---|---|
| Binary_Sensor | Y | smart_mode | Enable smart mode |
| Switch | A | front_panel_test | Front panel test |
| Sensor | B | battery_voltage | Battery voltage |
| Sensor | C | internal_temperature | Internal temperature |
| Switch | D | start_runtime_calibration | Start runtime calibration |
| Text_Sensor (writable) | E | Automatic self test interval @TODO | |
| Sensor | F | grid_frequency | Input line frequency |
| Text_Sensor | G | cause_of_last_transfer | Cause of last transfer to battery |
| Text_Sensor | I | Measure-UPS alarm enable @TODO (no decode) | |
| Text_Sensor | J | Measure-UPS alarm status @TODO (no decode) | |
| Switch | K | shutdown_with_grace_period | Shutdown with grace period |
| Sensor | L | grid_voltage | Input line voltage |
| Sensor | M | max_grid_voltage | Maximum line voltage |
| Sensor | N | min_grid_voltage | Minimum line voltage |
| Sensor | O | ac_output_voltage | Output voltage |
| Sensor | P | ac_output_load | Power load in % |
| Sensor | Q | status_bitmask | Status flags. (See table) |
| Switch | R | Turn dumb @TODO | |
| Switch | S | soft_shutdown | Soft shutdown |
| Switch | U | simulate_power_failure | Simulate power failure |
| Text_Sensor | V | old_firmware_version | Old firmware version |
| Switch | W | self_test | Self test |
| Text_Sensor | X | self_test_results | Self test results |
| Switch | Z | shutdown_immediately | Shutdown immediately |
| Text_Sensor | a | protocol_info | Protocol info |
| Text_Sensor | b | firmware_revision | Firmware revision |
| Text_Sensor | c | local_identifier | UPS local identifier |
| Sensor | e | return_threshold | Return threshold |
| Sensor | f | state_of_charge | Battery level |
| Sensor | g | nominal_battery_voltage | Nominal battery voltage |
| Sensor | h | ambient_humidity | Measure-UPS ambient humidity |
| Text_Sensor | i | Measure-UPS dry contacts @TODO | |
| Sensor | j | estimated_runtime | Estimated runtime |
| Text_Sensor | k | alarm_delay | Alarm delay |
| Sensor | l | low_transfer_voltage | Low transfer voltage |
| Text_Sensor | m | manufacture_date | Manufacture date |
| Text_Sensor | n | serial_number | Serial number |
| Sensor | o | nominal_output_voltage | Nominal Output Voltage |
| Text_Sensor (writable) | p | Shutdown grace delay @TODO | |
| Text_Sensor (writable) | q | Low battery warning @TODO | |
| Text_Sensor (writable) | r | Wakeup delay @TODO | |
| Text_Sensor (writable) | s | Sensitivity @TODO | |
| Sensor | t | ambient_temperature | Measure-UPS ambient temperature |
| Sensor | u | upper_transfer_voltage | Upper transfer voltage |
| Text_Sensor | v | measure_upc_firmware | Measure-UPS firmware |
| Text_Sensor | x | last_battery_change_date | Last battery change date |
| Switch | x | save_last_battery_change_date | Save last battery change date |
| Text_Sensor | y | copyright_notice | Copyright notice |
| Switch | z | Reset to factory settings @TODO | |
| Text_Sensor | 9 | line_quality | Line quality @TODO |
| Text_Sensor | 0x01 | model_name | Model name |
| Switch | 0x0E | turn_on | Turn ON UPS |
| Type | Bit | Variable |
|---|---|---|
| Binary_Sensor | 0 | runtime_calibration |
| Binary_Sensor | 1 | smart_trim |
| Binary_Sensor | 2 | smart_boost |
| Binary_Sensor | 3 | on_line |
| Binary_Sensor | 4 | on_battery |
| Binary_Sensor | 5 | output_overloaded |
| Binary_Sensor | 6 | battery_low |
| Binary_Sensor | 7 | replace_battery |