1 SNMP Overview
PWX-12-4422 has a built-in SNMPv2c agent (lwIP stack) running on the ESP32 communication module. The agent allows NMS systems to read live UPS data and receive trap notifications about events — without cloud, without any additional software.
- Voltage & current on each of 12 outputs
- Relay state per output (ON/OFF)
- Battery pack and cell voltages
- AC mains input voltage
- Board temperature (PCB + MCU)
- Device uptime
- AC mains failure (switch to battery)
- AC mains restored
- Input voltage threshold exceeded
- High temperature (> threshold)
- Output port state change
- Agent port: UDP 161
- Trap port: UDP 162 (target server)
- Protocol: SNMPv2c
- Community string: configurable
- Reach: same LAN or VPN
- RFC 1628 (UPS-MIB) compatible
1.3.6.1.4.1.62751 (PowerSentrix enterprise). Standard MIB-II system group (1.3.6.1.2.1.1) is also implemented — sysDescr, sysUpTime, sysContact, sysName, sysLocation. 2 SNMP Agent Configuration
SNMP is configured via the built-in UPS web management. Open a browser, enter the UPS IP address, and navigate to Settings → SNMP.
SNMP Settings Parameters
| Parameter | Default value | Description |
|---|---|---|
snmpEnabled |
0 (disabled) |
Enable/disable SNMP agent. Restart required after change. |
snmpSysName |
ESP32_Core_board_V2 |
Device name (sysName OID). Recommend setting to a location description, e.g. UPS-ServerRoom-A. |
snmpSysDescription |
simple_snmp_agent |
Device description (sysDescr OID). Recommend: PowerSentrix PWX-12-4422. |
snmpContact |
yourmail@contact.com |
Contact person/email for the sysContact OID. |
snmpSysLocation |
Your Institute or Company |
Physical location (sysLocation OID). E.g. Rack A, Server Room 1, Building B. |
snmpServerAddress |
empty | IP address of the trap destination server (UDP port 162). E.g. 192.168.1.50. If empty, no traps are sent. |
public for read access (GET/WALK). The community string is not configurable via Web Management — it is hardcoded in firmware. For production deployments we recommend isolating SNMP to a management VLAN. 3 OID Reference
Complete list of SNMP objects implemented in the PWX-12-4422. RW = read-write (SET supported), RO = read-only (GET only).
System Group — Standard MIB-II
| OID | Object | Type | R/W | Description |
|---|---|---|---|---|
| 1.3.6.1.2.1.1.1.0 | sysDescr | OCTET STRING | RO | Device description — set via snmpSysDescription |
| 1.3.6.1.2.1.1.3.0 | sysUpTime | TimeTicks | RO | Uptime in hundredths of a second since last COM module restart |
| 1.3.6.1.2.1.1.4.0 | sysContact | OCTET STRING | RO | Contact person — set via snmpContact |
| 1.3.6.1.2.1.1.5.0 | sysName | OCTET STRING | RO | Device name — set via snmpSysName |
| 1.3.6.1.2.1.1.6.0 | sysLocation | OCTET STRING | RO | Physical location — set via snmpSysLocation |
Output Ports — Enterprise Table
1.3.6.1.4.1.62751.1.1 — 12 rows (index 0–11), each row = one DC output port.Example snmpwalk:
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751.1.1 | OID | Object | Type | R/W | Description / Units |
|---|---|---|---|---|
| 1.3.6.1.4.1.62751.1.1.1.1.N | psxOutputIndex | Integer32 | RO | Port index 0–11 (N = table row) |
| 1.3.6.1.4.1.62751.1.1.1.2.N | psxOutputDescription | OCTET STRING | RW | User label for the port (max 128 chars). E.g. "Router", "Switch A" |
| 1.3.6.1.4.1.62751.1.1.1.3.N | psxOutputVoltage | Integer32 | RO | Measured voltage × 100 (e.g. 4810 = 48.10 V) |
| 1.3.6.1.4.1.62751.1.1.1.4.N | psxOutputCurrent | Integer32 | RO | Measured current in mA (e.g. 1500 = 1.500 A) |
| 1.3.6.1.4.1.62751.1.1.1.5.N | psxOutputStatus | INTEGER | RO | Relay state: 1=on, 2=off |
Battery
| OID | Object | Type | R/W | Description / Units |
|---|---|---|---|---|
| 1.3.6.1.4.1.62751.1.4.1 | psxBatteryVoltage | Integer32 | RO | Battery pack voltage × 100 (e.g. 5220 = 52.20 V) |
| 1.3.6.1.4.1.62751.1.4.2 | psxBatteryCount | Integer32 | RO | Number of battery cells configured (default 4) |
| 1.3.6.1.4.1.62751.1.4.3 | psxBatteryCapacity | Integer32 | RO | Battery capacity × 10 Ah (e.g. 90 = 9.0 Ah) |
| 1.3.6.1.4.1.62751.1.4.4 | psxBatteryStatus | INTEGER | RO | Battery status (RFC 1628): 2=normal, 3=low, 4=depleted, 5=discharging |
| 1.3.6.1.4.1.62751.1.4.5 | psxBatteryMainVoltage | Integer32 | RO | Charger input voltage (mains side of LAD module) |
| 1.3.6.1.4.1.62751.1.4.6 | psxBatteryLoadVoltage | Integer32 | RO | 48 V bus voltage (output side of charger) |
| 1.3.6.1.2.1.33.1.4.1 | upsOutputSource | INTEGER | RO | RFC 1628 — current UPS output power source. Also sent in traps: 3=mains, 5=battery |
AC Input
| OID | Object | Type | R/W | Description |
|---|---|---|---|---|
| 1.3.6.1.4.1.62751.1.5.1 | psxInputVoltage | Integer32 | RO | AC mains input voltage × 100 (e.g. 23000 = 230.00 V) |
| 1.3.6.1.4.1.62751.1.5.2 | psxInputSource | INTEGER | RO | Output power source (RFC 1628): 3=mains OK, 5=battery |
| 1.3.6.1.2.1.33.1.3.3.1.3 | upsInputVoltage | Gauge32 | RO | RFC 1628 — input voltage (referenced in traps) |
Temperature
| OID | Object | Type | R/W | Description |
|---|---|---|---|---|
| 1.3.6.1.4.1.62751.1.3.1 | psxBoardTemperature | Integer32 | RO | PCB board temperature in °C. Alarm threshold configurable in Web Management (default 50 °C). |
| 1.3.6.1.4.1.62751.1.3.2 | psxMcuTemperature | Integer32 | RO | ESP32 MCU die temperature in °C. |
4 Trap Events
Traps are asynchronous push notifications that the UPS sends to the configured server (UDP port 162) immediately when an event occurs — without waiting for an NMS poll. Traps are sent as SNMPv2c TRAP PDUs (SNMP_GENTRAP_ENTERPRISE_SPECIFIC type).
snmpServerAddress) and the SNMP agent is enabled. If the network is down the trap may be lost — SNMP traps have no delivery acknowledgement (unlike Inform). | Trap OID | Event | Varbinds | Severity |
|---|---|---|---|
| 1.3.6.1.4.1.62751.2.0.1 | Power source changed Mains → battery or battery → mains |
upsOutputSource (Integer32)3=mains, 5=battery |
CRITICAL |
| 1.3.6.1.4.1.62751.2.0.2 | AC input voltage threshold Input voltage outside normal range |
upsInputVoltage (Integer32) |
WARNING |
| 1.3.6.1.4.1.62751.2.0.3 | High temperature Board temperature exceeded threshold (default 50 °C) |
psxBoardTemperature (Integer32, °C) |
WARNING |
| 1.3.6.1.4.1.62751.2.0.4 | Output port state changed Relay toggled (manual or ExtraAction) |
psxOutputIndex, psxOutputStatus |
INFO |
| 1.3.6.1.4.1.62751.2.0.5 | Generic event Text message with numeric value (diagnostics) |
String + numeric value | INFO |
5 Command Examples — net-snmp
Examples use net-snmp tools (Linux/macOS: apt install snmp, Windows: net-snmp installer). Replace the UPS IP with the actual device address.
Basic GET requests
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.1.5.0
# Output:
SNMPv2-MIB::sysName.0 = STRING: UPS-ServerRoom-A
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.1.3.0 SNMPv2-MIB::sysUpTime.0 = Timeticks: (123456789) 14 days, 6:53:27.89
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751.1.1.1.3.0
# Response: 4810 = 48.10 V
iso.3.6.1.4.1.62751.1.1.1.3.0 = INTEGER: 4810
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751.1.1.1.5.0
iso.3.6.1.4.1.62751.1.1.1.5.0 = INTEGER: 1 # 1=on
Walk — traversing the full tree
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751
# Output includes all output ports, battery, temperatures...
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751.1.1 # Sample output: iso.3.6.1.4.1.62751.1.1.1.2.0 = STRING: "Router" iso.3.6.1.4.1.62751.1.1.1.2.1 = STRING: "Switch A" iso.3.6.1.4.1.62751.1.1.1.2.2 = STRING: "IP Camera 1" ... iso.3.6.1.4.1.62751.1.1.1.3.0 = INTEGER: 4810 iso.3.6.1.4.1.62751.1.1.1.3.1 = INTEGER: 4808 ...
snmpwalk -v2c -c public 192.168.1.100 system
# Returns sysDescr, sysUpTime, sysContact, sysName, sysLocation
Catching trap notifications (testing)
# Linux / macOS snmptrapd -f -Lo -c /etc/snmp/snmptrapd.conf # alebo jednoduché zachytenie bez konfigurácie: snmptrapd -f -Lo -On
6 NMS Integration
PWX-12-4422 is compatible with any NMS supporting SNMPv2c. Below are steps for the most popular platforms.
Fastest approach is to use an SNMP template. Upload the MIB to Zabbix IDE.
- Configuration → Hosts → Add host
- Interface: SNMP v2, Community:
public - Import MIB: Administration → General → Other → SNMP MIBs
- Add items manually or via discovery rule (OID: 1.3.6.1.4.1.62751.1.1)
- Trap receiving: configure
snmptrapdand Zabbix SNMP trapper
PRTG has a built-in SNMP scanner — device will be auto-discovered.
- Add Device → enter UPS IP
- Add Sensor → SNMP Custom → OID table
- OID for voltages:
1.3.6.1.4.1.62751.1.1.1.3.N - SNMP Trap sensor: Add Sensor → SNMP Trap Receiver
- Upload MIB: Setup → MIB Database
LibreNMS auto-discovers the device as a Generic SNMP host. The MIB file enables better labels.
- Devices → Add device → enter IP, v2c, community public
- Copy MIB to
/usr/share/snmp/mibs/ - Custom OIDs via OID-based poller (YAML definition)
- Traps: configure
snmptrapd→ LibreNMS trap handler
Recommended combination for custom dashboards with history.
- Use Telegraf SNMP plugin for data collection
- Define OID table in
telegraf.conf - Store to InfluxDB, visualise in Grafana
- Alerting via Grafana Alertmanager
Telegraf configuration (example)
# telegraf.conf — SNMP input plugin pre PWX-12-4422 [[inputs.snmp]] agents = ["udp://192.168.1.100:161"] version = 2 community = "public" [[inputs.snmp.field]] name = "uptime" oid = "1.3.6.1.2.1.1.3.0" [[inputs.snmp.field]] name = "board_temp" oid = "1.3.6.1.4.1.62751.1.3.1" [[inputs.snmp.table]] name = "psx_outputs" oid = "1.3.6.1.4.1.62751.1.1" [[inputs.snmp.table.field]] name = "description" oid = "1.3.6.1.4.1.62751.1.1.1.2" is_tag = true [[inputs.snmp.table.field]] name = "voltage" oid = "1.3.6.1.4.1.62751.1.1.1.3" [[inputs.snmp.table.field]] name = "current" oid = "1.3.6.1.4.1.62751.1.1.1.4" [[inputs.snmp.table.field]] name = "status" oid = "1.3.6.1.4.1.62751.1.1.1.5"
7 MIB File
Standardised MIB file in SMIv2 format (RFC 2578). Defines the full OID tree 1.3.6.1.4.1.62751, trap notifications and conformance groups. Compatible with RFC 1628 (UPS-MIB) conventions.
MIB file installation
sudo cp POWERSENTRIX-UPS-MIB.mib /usr/share/snmp/mibs/ # Overenie — zoznam OIDov: snmptranslate -Pu -m POWERSENTRIX-UPS-MIB -IR psxOutputVoltage POWERSENTRIX-UPS-MIB::psxOutputVoltage # Walk s popiskami miesto číselných OIDov: snmpwalk -v2c -c public -m POWERSENTRIX-UPS-MIB 192.168.1.100 powerSentrix
# Nahranie cez GUI: Administration → General → Other → SNMP MIBs → Import # Alebo cez filesystem (Zabbix 6+): cp POWERSENTRIX-UPS-MIB.mib /usr/share/snmp/mibs/
MIB file content — OID tree structure
enterprises.62751 (powerSentrix)
├── .1 psxObjects
│ ├── .1 psxOutputs
│ │ └── .1 psxOutputTable [INDEX: psxOutputIndex 0–11]
│ │ ├── .1.1.N psxOutputIndex — Integer32 (0–11)
│ │ ├── .1.2.N psxOutputDescription — DisplayString (RW)
│ │ ├── .1.3.N psxOutputVoltage — Integer32 (0.01 V)
│ │ ├── .1.4.N psxOutputCurrent — Integer32 (mA)
│ │ └── .1.5.N psxOutputStatus — on(1) | off(2)
│ ├── .2 psxSystem
│ │ ├── .1 psxSysUptime — TimeTicks
│ │ ├── .2 psxComFirmwareVersion — DisplayString
│ │ ├── .3 psxMainFirmwareVersion — DisplayString
│ │ ├── .4 psxSerialNumber — DisplayString
│ │ └── .5 psxModelName — DisplayString
│ ├── .3 psxTemperature
│ │ ├── .1 psxBoardTemperature — Integer32 (°C)
│ │ └── .2 psxMcuTemperature — Integer32 (°C)
│ ├── .4 psxBattery
│ │ ├── .1 psxBatteryVoltage — Integer32 (0.01 V)
│ │ ├── .2 psxBatteryCount — Integer32
│ │ ├── .3 psxBatteryCapacity — Integer32 (0.1 Ah)
│ │ ├── .4 psxBatteryStatus — ENUM (RFC 1628)
│ │ ├── .5 psxBatteryMainVoltage — Integer32 (0.01 V)
│ │ └── .6 psxBatteryLoadVoltage — Integer32 (0.01 V)
│ └── .5 psxInput
│ ├── .1 psxInputVoltage — Integer32 (0.01 V)
│ └── .2 psxInputSource — ENUM (RFC 1628)
├── .2 psxTraps
│ └── .0 psxTrapPrefix
│ ├── .1 psxPowerSourceChanged — NOTIFICATION
│ ├── .2 psxInputVoltageTrap — NOTIFICATION
│ ├── .3 psxHighTemperatureTrap — NOTIFICATION
│ ├── .4 psxOutputStateChanged — NOTIFICATION
│ └── .5 psxGenericEventTrap — NOTIFICATION
└── .3 psxConformance
├── .1 psxCompliances
└── .2 psxGroups