PWX-12-4422  ·  SNMP Manual

SNMP Monitoring Guide

Agent configuration, OID reference, trap events, and NMS integration (Zabbix, PRTG, LibreNMS).

SNMP v2c UDP 161 (agent)  ·  UDP 162 (traps) Enterprise OID 1.3.6.1.4.1.62751 RFC 1628 compatible

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
Enterprise OID: The device uses the private OID tree 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.
Community string: The current SNMP agent uses community string 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

These OIDs are part of the standard MIB-II (RFC 1213). Most NMS systems recognize them automatically — no custom MIB load required.
OIDObjectTypeR/WDescription
1.3.6.1.2.1.1.1.0sysDescrOCTET STRINGRODevice description — set via snmpSysDescription
1.3.6.1.2.1.1.3.0sysUpTimeTimeTicksROUptime in hundredths of a second since last COM module restart
1.3.6.1.2.1.1.4.0sysContactOCTET STRINGROContact person — set via snmpContact
1.3.6.1.2.1.1.5.0sysNameOCTET STRINGRODevice name — set via snmpSysName
1.3.6.1.2.1.1.6.0sysLocationOCTET STRINGROPhysical location — set via snmpSysLocation

Output Ports — Enterprise Table

Table OID: 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
OIDObjectTypeR/WDescription / Units
1.3.6.1.4.1.62751.1.1.1.1.NpsxOutputIndexInteger32ROPort index 0–11 (N = table row)
1.3.6.1.4.1.62751.1.1.1.2.NpsxOutputDescriptionOCTET STRINGRWUser label for the port (max 128 chars). E.g. "Router", "Switch A"
1.3.6.1.4.1.62751.1.1.1.3.NpsxOutputVoltageInteger32ROMeasured voltage × 100 (e.g. 4810 = 48.10 V)
1.3.6.1.4.1.62751.1.1.1.4.NpsxOutputCurrentInteger32ROMeasured current in mA (e.g. 1500 = 1.500 A)
1.3.6.1.4.1.62751.1.1.1.5.NpsxOutputStatusINTEGERRORelay state: 1=on, 2=off

Battery

OIDObjectTypeR/WDescription / Units
1.3.6.1.4.1.62751.1.4.1psxBatteryVoltageInteger32ROBattery pack voltage × 100 (e.g. 5220 = 52.20 V)
1.3.6.1.4.1.62751.1.4.2psxBatteryCountInteger32RONumber of battery cells configured (default 4)
1.3.6.1.4.1.62751.1.4.3psxBatteryCapacityInteger32ROBattery capacity × 10 Ah (e.g. 90 = 9.0 Ah)
1.3.6.1.4.1.62751.1.4.4psxBatteryStatusINTEGERROBattery status (RFC 1628): 2=normal, 3=low, 4=depleted, 5=discharging
1.3.6.1.4.1.62751.1.4.5psxBatteryMainVoltageInteger32ROCharger input voltage (mains side of LAD module)
1.3.6.1.4.1.62751.1.4.6psxBatteryLoadVoltageInteger32RO48 V bus voltage (output side of charger)
1.3.6.1.2.1.33.1.4.1upsOutputSourceINTEGERRORFC 1628 — current UPS output power source. Also sent in traps: 3=mains, 5=battery

AC Input

OIDObjectTypeR/WDescription
1.3.6.1.4.1.62751.1.5.1psxInputVoltageInteger32ROAC mains input voltage × 100 (e.g. 23000 = 230.00 V)
1.3.6.1.4.1.62751.1.5.2psxInputSourceINTEGERROOutput power source (RFC 1628): 3=mains OK, 5=battery
1.3.6.1.2.1.33.1.3.3.1.3upsInputVoltageGauge32RORFC 1628 — input voltage (referenced in traps)

Temperature

OIDObjectTypeR/WDescription
1.3.6.1.4.1.62751.1.3.1psxBoardTemperatureInteger32ROPCB board temperature in °C. Alarm threshold configurable in Web Management (default 50 °C).
1.3.6.1.4.1.62751.1.3.2psxMcuTemperatureInteger32ROESP32 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).

Sending condition: Traps are only sent when a trap server IP address is configured (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

Device name (sysName)
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
Device uptime
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
Voltage on OUT1 (index 0)
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
State of OUT1 (1=on, 2=off)
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

All enterprise OIDs of the device
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.62751
# Output includes all output ports, battery, temperatures...
Only output port table (description + voltage)
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
...
Standard MIB-II system walk
snmpwalk -v2c -c public 192.168.1.100 system
# Returns sysDescr, sysUpTime, sysContact, sysName, sysLocation

Catching trap notifications (testing)

Listen on port 162 (on the server where you expect traps)
# Linux / macOS
snmptrapd -f -Lo -c /etc/snmp/snmptrapd.conf
# alebo jednoduché zachytenie bez konfigurácie:
snmptrapd -f -Lo -On
To test trap sending from the UPS: Web Management → Settings → SNMP → click the Send Test SNMP Trap button.

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 snmptrapd and 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.

POWERSENTRIX-UPS-MIB.mib SMIv2 · RFC 2578 · RFC 1628 compatible

MIB file installation

Linux / macOS
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
Zabbix
# 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