
# APC UPS by SNMP

## Overview

The template to monitor APC UPS with NMC by Zabbix SNMP agent.
Note: please, use the latest version of the firmware for your NMC in order for the template to work correctly.

## Requirements

Zabbix version: 7.0 and higher.

## Tested versions

This template has been tested on:
- APC UPS

## Configuration

> Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section.

## Setup

1\. Create a host for APC UPS management IP as SNMPv2 interface.

2\. Link the template to the host.

3\. Customize macro values if needed.

### Macros used

|Name|Description|Default|
|----|-----------|-------|
|{$BATTERY.TEMP.MAX.WARN}|
Maximum battery temperature for trigger expression.
|`55`|
|{$BATTERY.CAPACITY.MIN.WARN}|
Minimum battery capacity percentage for trigger expression.
|`50`|
|{$UPS.OUTPUT.MAX.WARN}|
Maximum output load in % for trigger expression.
|`80`|
|{$UPS.INPUT_FREQ.MIN.WARN}|
Minimum input frequency for trigger expression.
|`49.7`|
|{$UPS.INPUT_FREQ.MAX.WARN}|
Maximum input frequency for trigger expression.
|`50.3`|
|{$UPS.INPUT_VOLT.MIN.WARN}|
Minimum input voltage for trigger expression.
|`197`|
|{$UPS.INPUT_VOLT.MAX.WARN}|
Maximum input voltage for trigger expression.
|`243`|
|{$TIME.PERIOD}|
Time period for trigger expression.
|`15m`|
|{$SNMP.TIMEOUT}|
The time interval for SNMP agent availability trigger expression.
|`5m`|

### Items

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Model|
MIB: PowerNet-MIB

The UPS model name (e.g. 'APC Smart-UPS 600').
|SNMP agent|system.model[upsBasicIdentModel]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Serial number|
MIB: PowerNet-MIB

An 8-character string identifying the serial number of

 the UPS internal microprocessor.  This number is set at

 the factory.  NOTE: This number does NOT correspond to

 the serial number on the rear of the UPS.
|SNMP agent|system.sn[upsAdvIdentSerialNumber]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Battery status|
MIB: PowerNet-MIB

The status of the UPS batteries. A batteryLow(3) value

 indicates the UPS will be unable to sustain the current

 load, and its services will be lost if power is not restored.

 The amount of run time in reserve at the time of low battery

 can be configured by the upsAdvConfigLowBatteryRunTime.

 A batteryInFaultCondition(4)value indicates that a battery

 installed has an internal error condition.
|SNMP agent|battery.status[upsBasicBatteryStatus]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Battery capacity|
MIB: PowerNet-MIB

The remaining battery capacity expressed as

 percentage of full capacity.
|SNMP agent|battery.capacity[upsHighPrecBatteryCapacity]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Battery runtime remaining|
MIB: PowerNet-MIB

The UPS battery run time remaining before battery

 exhaustion.
|SNMP agent|battery.runtime_remaining[upsAdvBatteryRunTimeRemaining]
**Preprocessing**

- 
Custom multiplier: `0.01`

- 
Discard unchanged with heartbeat: `6h`

|
|Battery voltage|
MIB: PowerNet-MIB

The actual battery bus voltage in Volts.
|SNMP agent|battery.voltage[upsHighPrecBatteryActualVoltage]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Battery last replace date|
MIB: PowerNet-MIB

The date when the UPS system's batteries were last replaced

 in mm/dd/yy (or yyyy) format. For Smart-UPS models, this value

 is originally set at the factory. When the UPS batteries

 are replaced, this value should be reset by the administrator.

 For Symmetra PX 250/500 this OID is read-only and is configurable in the local display only.
|SNMP agent|battery.last_replace_date[upsBasicBatteryLastReplaceDate]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Battery replace indicator|
MIB: PowerNet-MIB

Indicates whether the UPS batteries need replacement.
|SNMP agent|battery.replace_indicator[upsAdvBatteryReplaceIndicator]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|External battery packs count|
MIB: PowerNet-MIB

The number of external battery packs connected to the UPS. If

 the UPS does not use smart cells then the agent reports

 ERROR_NO_SUCH_NAME.
|SNMP agent|battery.external_packs_count[upsAdvBatteryNumOfBattPacks]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Battery temperature|
MIB: PowerNet-MIB

The current internal UPS temperature in Celsius.

Temperatures below zero read as 0.
|SNMP agent|battery.temperature[upsHighPrecBatteryTemperature]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Input voltage|
MIB: PowerNet-MIB

The current utility line voltage in VAC.
|SNMP agent|input.voltage[upsHighPrecInputLineVoltage]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Input frequency|
MIB: PowerNet-MIB

The current input frequency to the UPS system in Hz.
|SNMP agent|input.frequency[upsHighPrecInputFrequency]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Input fail cause|
MIB: PowerNet-MIB

The reason for the occurrence of the last transfer to UPS

battery power.  The variable is set to:

- noTransfer(1) -- if there is no transfer yet.

- highLineVoltage(2) -- if the transfer to battery is caused

by an over voltage greater than the high transfer voltage.

- brownout(3) -- if the duration of the outage is greater than

five seconds and the line voltage is between 40% of the

rated output voltage and the low transfer voltage.

- blackout(4) -- if the duration of the outage is greater than five

seconds and the line voltage is between 40% of the rated

output voltage and ground.

- smallMomentarySag(5) -- if the duration of the outage is less

than five seconds and the line voltage is between 40% of the

rated output voltage and the low transfer voltage.

- deepMomentarySag(6) -- if the duration of the outage is less

than five seconds and the line voltage is between 40% of the

rated output voltage and ground.  The variable is set to

- smallMomentarySpike(7) -- if the line failure is caused by a

rate of change of input voltage less than ten volts per cycle.

- largeMomentarySpike(8) -- if the line failure is caused by

a rate of change of input voltage greater than ten volts per cycle.

- selfTest(9) -- if the UPS was commanded to do a self test.

- rateOfVoltageChange(10) -- if the failure is due to the rate of change of

the line voltage.
|SNMP agent|input.fail[upsAdvInputLineFailCause]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Output voltage|
MIB: PowerNet-MIB

The output voltage of the UPS system in VAC.
|SNMP agent|output.voltage[upsHighPrecOutputVoltage]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Output load|
MIB: PowerNet-MIB

The current UPS load expressed as percentage

of rated capacity.
|SNMP agent|output.load[upsHighPrecOutputLoad]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Output current|
MIB: PowerNet-MIB

The current in amperes drawn by the load on the UPS.
|SNMP agent|output.current[upsHighPrecOutputCurrent]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|Output status|
MIB: PowerNet-MIB

The current state of the UPS. If the UPS is unable to

 determine the state of the UPS this variable is set

 to unknown(1).

During self-test most UPSes report onBattery(3) but

 some that support it will report onBatteryTest(15).

 To determine self-test status across all UPSes, refer

 to the upsBasicStateOutputState OID.
|SNMP agent|output.status[upsBasicOutputStatus]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|Uptime (network)|
MIB: SNMPv2-MIB

The time (in hundredths of a second) since the network management portion of the system was last re-initialized.
|SNMP agent|system.net.uptime[sysUpTime.0]
**Preprocessing**

- 
Custom multiplier: `0.01`

|
|Uptime (hardware)|
MIB: HOST-RESOURCES-MIB

The amount of time since this host was last initialized. Note that this is different from sysUpTime in the SNMPv2-MIB [RFC1907] because sysUpTime is the uptime of the network management portion of the system.
|SNMP agent|system.hw.uptime[hrSystemUptime.0]
**Preprocessing**

- 
Check for not supported value: `any error`

⛔️Custom on fail: Set value to: `0`

- 
Custom multiplier: `0.01`

|
|SNMP traps (fallback)|
The item is used to collect all SNMP traps unmatched by other snmptrap items
|SNMP trap|snmptrap.fallback|
|System location|
MIB: SNMPv2-MIB

The physical location of this node (e.g., `telephone closet, 3rd floor').  If the location is unknown, the value is the zero-length string.
|SNMP agent|system.location[sysLocation.0]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|System contact details|
MIB: SNMPv2-MIB

The textual identification of the contact person for this managed

node, together with information on how to contact this person.  If no contact

information is known, the value is the zero-length string.
|SNMP agent|system.contact[sysContact.0]
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|System object ID|
MIB: SNMPv2-MIB

The vendor's authoritative identification of the network management

subsystem contained in the entity.  This value is allocated within the SMI enterprises

subtree (1.3.6.1.4.1) and provides an easy and unambiguous means for determining`what</p><p>kind of box' is being managed.  For example, if vendor`Flintstones, Inc.' was

assigned the subtree1.3.6.1.4.1.4242, it could assign the identifier 1.3.6.1.4.1.4242.1.1

to its `Fred Router'.</p>|SNMP agent|system.objectid[sysObjectID.0]<p>**Preprocessing**</p><ul><li><p>Discard unchanged with heartbeat: `6h`

|
|System name|
MIB: SNMPv2-MIB

An administratively-assigned name for this managed node.By

convention, this is the node's fully-qualified domain name.  If the name is unknown,

the value is the zero-length string.
|SNMP agent|system.name[sysName.0]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|System description|
MIB: SNMPv2-MIB

A textual description of the entity. This value should

include the full name and version identification of the system's hardware type, software operating-system, and

networking software.
|SNMP agent|system.descr[sysDescr.0]
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|SNMP agent availability|
Availability of SNMP checks on the host. The value of this item corresponds to availability icons in the host list.

Possible values:

0 - not available

1 - available

2 - unknown
|Zabbix internal|zabbix[host,snmp,available]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### Triggers

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: Battery has an internal error condition|
A battery installed has an internal error condition.
|`last(/APC UPS by SNMP/battery.status[upsBasicBatteryStatus])=4`|Average||
|APC UPS: Battery is Low|
The UPS will be unable to sustain the current load, and its services will be lost if power is not restored.
|`last(/APC UPS by SNMP/battery.status[upsBasicBatteryStatus])=3`|Average||
|APC UPS: Battery has low capacity||`last(/APC UPS by SNMP/battery.capacity[upsHighPrecBatteryCapacity]) < {$BATTERY.CAPACITY.MIN.WARN}`|High||
|APC UPS: Battery needs replacement|
A battery installed has an internal error condition.
|`last(/APC UPS by SNMP/battery.replace_indicator[upsAdvBatteryReplaceIndicator])=2`|High||
|APC UPS: Battery has high temperature||`min(/APC UPS by SNMP/battery.temperature[upsHighPrecBatteryTemperature],{$TIME.PERIOD}) > {$BATTERY.TEMP.MAX.WARN}`|High||
|APC UPS: Unacceptable input voltage||`min(/APC UPS by SNMP/input.voltage[upsHighPrecInputLineVoltage],{$TIME.PERIOD}) > 0 and (min(/APC UPS by SNMP/input.voltage[upsHighPrecInputLineVoltage],{$TIME.PERIOD}) > {$UPS.INPUT_VOLT.MAX.WARN} or max(/APC UPS by SNMP/input.voltage[upsHighPrecInputLineVoltage],{$TIME.PERIOD}) < {$UPS.INPUT_VOLT.MIN.WARN})`|High||
|APC UPS: Unacceptable input frequency||`min(/APC UPS by SNMP/input.frequency[upsHighPrecInputFrequency],{$TIME.PERIOD}) > 0 and (min(/APC UPS by SNMP/input.frequency[upsHighPrecInputFrequency],{$TIME.PERIOD}) > {$UPS.INPUT_FREQ.MAX.WARN} or max(/APC UPS by SNMP/input.frequency[upsHighPrecInputFrequency],{$TIME.PERIOD}) < {$UPS.INPUT_FREQ.MIN.WARN})`|High||
|APC UPS: Output load is high|
A battery installed has an internal error condition.
|`min(/APC UPS by SNMP/output.load[upsHighPrecOutputLoad],{$TIME.PERIOD}) > {$UPS.OUTPUT.MAX.WARN}`|High||
|APC UPS: UPS is Timed Sleeping||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=5`|Average||
|APC UPS: UPS is Switched Bypass||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=9`|Average||
|APC UPS: UPS is Software Bypass||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=6`|Average||
|APC UPS: UPS is Sleeping Until Power Return||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=11`|Average||
|APC UPS: UPS is Rebooting||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=8`|Average||
|APC UPS: UPS is On Smart Trim||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=12`|Average||
|APC UPS: UPS is on Smart Boost||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=4`|Average||
|APC UPS: UPS is on battery||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=3`|Average||
|APC UPS: UPS is Off||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=7`|Average||
|APC UPS: UPS is Emergency Static Bypass||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=16`|Average||
|APC UPS: UPS is Hardware Failure Bypass||`last(/APC UPS by SNMP/output.status[upsBasicOutputStatus])=10`|Average||
|APC UPS: Host has been restarted|
Uptime is less than 10 minutes.
|`(last(/APC UPS by SNMP/system.hw.uptime[hrSystemUptime.0])>0 and last(/APC UPS by SNMP/system.hw.uptime[hrSystemUptime.0])<10m) or (last(/APC UPS by SNMP/system.hw.uptime[hrSystemUptime.0])=0 and last(/APC UPS by SNMP/system.net.uptime[sysUpTime.0])<10m)`|Warning|**Manual close**: Yes
**Depends on**:

- APC UPS: No SNMP data collection
|
|APC UPS: System name has changed|
The name of the system has changed. Acknowledge to close the problem manually.
|`last(/APC UPS by SNMP/system.name[sysName.0],#1)<>last(/APC UPS by SNMP/system.name[sysName.0],#2) and length(last(/APC UPS by SNMP/system.name[sysName.0]))>0`|Info|**Manual close**: Yes|
|APC UPS: No SNMP data collection|
SNMP is not available for polling. Please check device connectivity and SNMP settings.
|`max(/APC UPS by SNMP/zabbix[host,snmp,available],{$SNMP.TIMEOUT})=0`|Warning||

### LLD rule Input phases discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Input phases discovery|
The input phase identifier. OID upsPhaseInputPhaseIndex.1.1
|SNMP agent|input.phases.discovery|

### Item prototypes for Input phases discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#PHASEINDEX}: Phase input voltage|
MIB: PowerNet-MIB

The input voltage in VAC, or -1 if it's unsupported

 by this UPS.
|SNMP agent|phase.input.voltage[upsPhaseInputVoltage.1.1.{#PHASEINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#PHASEINDEX}: Phase input current|
MIB: PowerNet-MIB

The input current in 0.1 amperes, or -0.1 if it's

 unsupported by this UPS.
|SNMP agent|phase.input.current[upsPhaseInputCurrent.1.1.{#PHASEINDEX}]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|

### Trigger prototypes for Input phases discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: {#PHASEINDEX}: Unacceptable phase {#PHASEINDEX} input voltage||`min(/APC UPS by SNMP/phase.input.voltage[upsPhaseInputVoltage.1.1.{#PHASEINDEX}],{$TIME.PERIOD}) > {$UPS.INPUT_VOLT.MAX.WARN} or max(/APC UPS by SNMP/phase.input.voltage[upsPhaseInputVoltage.1.1.{#PHASEINDEX}],{$TIME.PERIOD}) < {$UPS.INPUT_VOLT.MIN.WARN}`|High||

### LLD rule Output phases discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Output phases discovery|
The output phase identifier. OID upsPhaseOutputPhaseIndex.1.1
|SNMP agent|output.phases.discovery|

### Item prototypes for Output phases discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#PHASEINDEX}: Phase output voltage|
MIB: PowerNet-MIB

The output voltage in VAC, or -1 if it's unsupported

 by this UPS.
|SNMP agent|phase.output.voltage[upsPhaseOutputVoltage.1.1.{#PHASEINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#PHASEINDEX}: Phase output current|
MIB: PowerNet-MIB

The output current in 0.1 amperes drawn

 by the load on the UPS, or -1 if it's unsupported

 by this UPS.
|SNMP agent|phase.output.current[upsPhaseOutputCurrent.1.1.{#PHASEINDEX}]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|{#PHASEINDEX}: Phase output load, %|
MIB: PowerNet-MIB

The percentage of the UPS load capacity in VA at

 redundancy @ (n + x) presently being used on this

 output phase, or -1 if it's unsupported by this UPS.
|SNMP agent|phase.output.load.percent[upsPhaseOutputPercentLoad.1.1.{#PHASEINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### Trigger prototypes for Output phases discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: {#PHASEINDEX}: Unacceptable phase {#PHASEINDEX} output voltage||`min(/APC UPS by SNMP/phase.output.voltage[upsPhaseOutputVoltage.1.1.{#PHASEINDEX}],{$TIME.PERIOD}) > {$UPS.INPUT_VOLT.MAX.WARN} or max(/APC UPS by SNMP/phase.output.voltage[upsPhaseOutputVoltage.1.1.{#PHASEINDEX}],{$TIME.PERIOD}) < {$UPS.INPUT_VOLT.MIN.WARN}`|High||

### LLD rule External battery packs discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|External battery packs discovery||SNMP agent|battery.packs.discovery|

### Item prototypes for External battery packs discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery status|
MIB: PowerNet-MIB

The battery cartridge status.

bit 0 Disconnected

bit 1 Overvoltage

bit 2 NeedsReplacement

bit 3 OvertemperatureCritical

bit 4 Charger

bit 5 TemperatureSensor

bit 6 BusSoftStart

bit 7 OvertemperatureWarning

bit 8 GeneralError

bit 9 Communication

bit 10 DisconnectedFrame

bit 11 FirmwareMismatch
|SNMP agent|battery.pack.status[upsHighPrecBatteryPackCartridgeStatus.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery temperature|
MIB: PowerNet-MIB

The current internal UPS temperature in Celsius.

Temperatures below zero read as 0.
|SNMP agent|battery.temperature[upsHighPrecBatteryPackTemperature.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}]
**Preprocessing**

- 
Custom multiplier: `0.1`

- 
Discard unchanged with heartbeat: `6h`

|
|{#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Serial number|
MIB: PowerNet-MIB

The battery pack serial number.
|SNMP agent|system.sn[upsHighPrecBatteryPackSerialNumber.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery estimated replace date|
MIB: PowerNet-MIB

The battery cartridge estimated battery replace date.
|SNMP agent|battery.estimated_replace_date[upsHighPrecBatteryPackCartridgeReplaceDate.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery pack cartridge health|
MIB: PowerNet-MIB

The battery cartridge health.

  bit 0 Battery lifetime okay

  bit 1 Battery lifetime near end, order replacement cartridge

  bit 2 Battery lifetime exceeded, replace battery

  bit 3 Battery lifetime near end acknowledged, order replacement cartridge

  bit 4 Battery lifetime exceeded acknowledged, replace battery

  bit 5 Battery measured lifetime near end, order replacement cartridge

  bit 6 Battery measured lifetime near end acknowledged, order replacement cartridge
|SNMP agent|battery.pack.cartridge_health[upsHighPrecBatteryPackCartridgeHealth.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### Trigger prototypes for External battery packs discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: {#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery status is not okay|
The battery cartridge status:
bit 0 Disconnected
bit 1 Overvoltage
bit 2 NeedsReplacement
bit 3 OvertemperatureCritical
bit 4 Charger
bit 5 TemperatureSensor
bit 6 BusSoftStart
bit 7 OvertemperatureWarning
bit 8 GeneralError
bit 9 Communication
bit 10 DisconnectedFrame
bit 11 FirmwareMismatch
|`find(/APC UPS by SNMP/battery.pack.status[upsHighPrecBatteryPackCartridgeStatus.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}],,"regexp","^(0{16})$")=0`|Warning||
|APC UPS: {#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery has high temperature||`min(/APC UPS by SNMP/battery.temperature[upsHighPrecBatteryPackTemperature.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}],{$TIME.PERIOD}) > {$BATTERY.TEMP.MAX.WARN}`|High||
|APC UPS: {#BATTERY_PACK}.{#CARTRIDGE_INDEX}: Battery lifetime is not okay|
The battery cartridge health.
  bit 0 Battery lifetime okay
  bit 1 Battery lifetime near end, order replacement cartridge
  bit 2 Battery lifetime exceeded, replace battery
  bit 3 Battery lifetime near end acknowledged, order replacement cartridge
  bit 4 Battery lifetime exceeded acknowledged, replace battery
  bit 5 Battery measured lifetime near end, order replacement cartridge
  bit 6 Battery measured lifetime near end acknowledged, order replacement cartridge
|`find(/APC UPS by SNMP/battery.pack.cartridge_health[upsHighPrecBatteryPackCartridgeHealth.{#BATTERY_PACK}.{#CARTRIDGE_INDEX}],,"regexp","^(0)[0\|1]{15}$")=1`|Warning||

### LLD rule External bad battery packs discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|External bad battery packs discovery|
Discovery of the number of external defective battery packs.
|SNMP agent|battery.packs.bad.discovery|

### Item prototypes for External bad battery packs discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#SNMPINDEX}: External battery packs bad|
MIB: PowerNet-MIB

The number of external battery packs connected to the UPS that

are defective. If the UPS does not use smart cells then the

agent reports ERROR_NO_SUCH_NAME.
|SNMP agent|battery.external_packs_bad[upsAdvBatteryNumOfBadBattPacks.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### LLD rule External sensor port 1 discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|External sensor port 1 discovery|
uioSensorStatusTable
|SNMP agent|external.sensor1.discovery|

### Item prototypes for External sensor port 1 discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#EXTERNAL_SENSOR1_NAME}: Temperature sensor|
MIB: PowerNet-MIB

The sensor's current temperature reading in Celsius.

 -1 indicates an invalid reading due to lost communications.
|SNMP agent|external.sensor.temperature[uioSensorStatusTemperatureDegC.1.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#EXTERNAL_SENSOR1_NAME}: Humidity sensor|
MIB: PowerNet-MIB

The sensor's current humidity reading - a relative humidity

 percentage. -1 indicates an invalid reading due to either a

 sensor that doesn't read humidity or lost communications.
|SNMP agent|external.sensor.humidity[uioSensorStatusHumidity.1.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#EXTERNAL_SENSOR1_NAME}: Sensor alarm status|
MIB: PowerNet-MIB

The alarm status of the sensor. Possible values:

uioNormal                 (1),

uioWarning                (2),

uioCritical               (3),

sensorStatusNotApplicable (4)
|SNMP agent|external.sensor.status[uioSensorStatusAlarmStatus.1.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### Trigger prototypes for External sensor port 1 discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: {#EXTERNAL_SENSOR1_NAME}: Sensor has status Not Applicable|
The external sensor does not work or is not connected.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.1.{#SNMPINDEX}])=4`|Info||
|APC UPS: {#EXTERNAL_SENSOR1_NAME}: Sensor has status Warning|
The external sensor has returned a value greater than the warning threshold.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.1.{#SNMPINDEX}])=2`|Average||
|APC UPS: {#EXTERNAL_SENSOR1_NAME}: Sensor has status Critical|
The external sensor has returned a value greater than the critical threshold.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.1.{#SNMPINDEX}])=3`|High||

### LLD rule External sensor port 2 discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|External sensor port 2 discovery|
uioSensorStatusTable
|SNMP agent|external.sensor2.discovery|

### Item prototypes for External sensor port 2 discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|{#EXTERNAL_SENSOR2_NAME}: Temperature sensor|
MIB: PowerNet-MIB

The sensor's current temperature reading in Celsius.

 -1 indicates an invalid reading due to lost communications.
|SNMP agent|external.sensor.temperature[uioSensorStatusTemperatureDegC.2.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#EXTERNAL_SENSOR2_NAME}: Humidity sensor|
MIB: PowerNet-MIB

The sensor's current humidity reading - a relative humidity

 percentage. -1 indicates an invalid reading due to either a

 sensor that doesn't read humidity or lost communications.
|SNMP agent|external.sensor.humidity[uioSensorStatusHumidity.2.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|
|{#EXTERNAL_SENSOR2_NAME}: Sensor alarm status|
MIB: PowerNet-MIB

The alarm status of the sensor. Possible values:

uioNormal                 (1),

uioWarning                (2),

uioCritical               (3),

sensorStatusNotApplicable (4)
|SNMP agent|external.sensor.status[uioSensorStatusAlarmStatus.2.{#SNMPINDEX}]
**Preprocessing**

- 
Discard unchanged with heartbeat: `6h`

|

### Trigger prototypes for External sensor port 2 discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|APC UPS: {#EXTERNAL_SENSOR2_NAME}: Sensor has status Not Applicable|
The external sensor does not work or is not connected.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.2.{#SNMPINDEX}])=4`|Info||
|APC UPS: {#EXTERNAL_SENSOR2_NAME}: Sensor has status Warning|
The external sensor has returned a value greater than the warning threshold.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.2.{#SNMPINDEX}])=2`|Average||
|APC UPS: {#EXTERNAL_SENSOR2_NAME}: Sensor has status Critical|
The external sensor has returned a value greater than the critical threshold.
|`last(/APC UPS by SNMP/external.sensor.status[uioSensorStatusAlarmStatus.2.{#SNMPINDEX}])=3`|High||

## Feedback

Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com)

You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)

