   ABBMODULARUPS-MIB DEFINITIONS ::= BEGIN
	
	--
	-- Modular UPS data
	--

   IMPORTS
       MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
       OBJECT-IDENTITY, Counter32, Gauge32, Integer32, Unsigned32, 
		   enterprises
           FROM SNMPv2-SMI
       DisplayString, TimeStamp, TimeInterval, TestAndIncr,
         AutonomousType, TEXTUAL-CONVENTION  
           FROM SNMPv2-TC
       MODULE-COMPLIANCE, OBJECT-GROUP
           FROM SNMPv2-CONF;


   abb MODULE-IDENTITY
       LAST-UPDATED "201911190000Z" 
       ORGANIZATION "ABB Power Protection SA"
       CONTACT-INFO
              "ABB Power Protection SA
			  Via Luserte Sud 9
			  6572 Quartino
			  Switzerland"
       DESCRIPTION
               "The MIB module to describe ABB Power Protection SA 
               Uninterruptible Power Supplies."
       REVISION "201911190000Z"
       DESCRIPTION 
       			"Unique objects name version "
       REVISION "201911010000Z"
       DESCRIPTION 
       			"Read-Only version "
       REVISION "201907290000Z"
       DESCRIPTION 
       			"Initial version "       
       ::= { enterprises 53973 }


   PositiveInteger ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS       current
       DESCRIPTION
               "This data type is a non-zero and non-negative value."
       SYNTAX       Integer32 (1..2147483647)

   NonNegativeInteger ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS       current
       DESCRIPTION
               "This data type is a non-negative value."
       SYNTAX       Integer32 (0..2147483647)

   ups                  OBJECT IDENTIFIER ::= { abb 1 }
   
   upsModular           OBJECT IDENTIFIER ::= { ups 1 }

   --
   -- System data
   --
   
   upsSystem            OBJECT IDENTIFIER ::= { upsModular 1 }
   
   upsModularDiscoveredUPSsMask OBJECT-TYPE
       SYNTAX     Unsigned32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
            "Reading this variable returns bit mask indicating which 
            module in a parallel system is alive.

              1  Module 1 alive
              2  Module 2 alive
              4  Module 3 alive
              8  Module 4 alive
             16  Module 5 alive
             32  Module 6 alive
             64  Module 7 alive
            128  Module 8 alive
            256  Module 9 alive
            512  Module 10 alive
           1024  Module 11 alive
           2048  Module 12 alive
           4096  Module 13 alive
           8192  Module 14 alive
          16384  Module 15 alive
          32768  Module 16 alive
          65536  Module 17 alive
         131072  Module 18 alive
         262144  Module 19 alive
         524288  Module 20 alive
        1048576  Module 21 alive
        2097152  Module 22 alive
        4194304  Module 23 alive
        8388608  Module 24 alive
       16777216  Module 25 alive
       33554432  Module 26 alive
       67108864  Module 27 alive
      134217728  Module 28 alive
      268435456  Module 29 alive
      536870912  Module 30 alive
             "
    ::= { upsSystem 4 }

	upsObjects           OBJECT IDENTIFIER ::= { upsSystem 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for upsIdentName and
   --      upsIdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   upsIdent              OBJECT IDENTIFIER ::= { upsObjects 1 }

   upsIdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { upsIdent 1 }

   upsIdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { upsIdent 2 }

   upsIdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               upsIdentAgentSoftwareVersion in some implementations."
       ::= { upsIdent 3 }

   upsIdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               upsIdentUPSSoftwareVersion in some implementations."
       ::= { upsIdent 4 }

   upsIdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { upsIdent 5 }

   upsIdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { upsIdent 6 }


   --
   -- Battery Group
   --

   upsBattery            OBJECT IDENTIFIER ::= { upsObjects 2 }

   upsBatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               upsConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to upsConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { upsBattery 1 }

   upsSecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { upsBattery 2 }

   upsEstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { upsBattery 3 }

   upsEstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { upsBattery 4 }

   upsBatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { upsBattery 5 }

   upsBatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { upsBattery 6 }

   upsBatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { upsBattery 7 }


   --
   -- Input Group
   --

   upsInput              OBJECT IDENTIFIER ::= { upsObjects 3 }

   upsInputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { upsInput 1 }


   upsInputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { upsInput 2 }

   upsInputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsInputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of upsInputNumLines."
       ::= { upsInput 3 }

   upsInputEntry OBJECT-TYPE
       SYNTAX     UpsInputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { upsInputLineIndex }
       ::= { upsInputTable 1 }

   UpsInputEntry ::= SEQUENCE {
       upsInputLineIndex   PositiveInteger,
       upsInputFrequency   NonNegativeInteger,
       upsInputVoltage     NonNegativeInteger,
       upsInputCurrent     NonNegativeInteger
   }

   upsInputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { upsInputEntry 1 }

   upsInputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { upsInputEntry 2 }

   upsInputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { upsInputEntry 3 }

   upsInputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { upsInputEntry 4 }

   --
   -- The Output group.
   --

   upsOutput             OBJECT IDENTIFIER ::= { upsObjects 4 }

   upsOutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { upsOutput 1 }

   upsOutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { upsOutput 2 }

   upsOutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { upsOutput 3 }

   upsOutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsOutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of upsOutputNumLines."
       ::= { upsOutput 4 }

   upsOutputEntry OBJECT-TYPE
       SYNTAX     UpsOutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { upsOutputLineIndex }
       ::= { upsOutputTable 1 }

   UpsOutputEntry ::= SEQUENCE {
       upsOutputLineIndex   PositiveInteger,
       upsOutputVoltage     NonNegativeInteger,
       upsOutputCurrent     NonNegativeInteger,
       upsOutputPower       NonNegativeInteger,
       upsOutputPercentLoad INTEGER
   }

   upsOutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { upsOutputEntry 1 }

   upsOutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { upsOutputEntry 2 }

   upsOutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { upsOutputEntry 3 }

   upsOutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { upsOutputEntry 4 }

   upsOutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { upsOutputEntry 5 }

   --
   -- The Bypass group.
   --

   upsBypass             OBJECT IDENTIFIER ::= { upsObjects 5 }

   upsBypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { upsBypass 1 }

   upsBypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { upsBypass 2 }

   upsBypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsBypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of upsBypassNumLines."
       ::= { upsBypass 3 }

   upsBypassEntry OBJECT-TYPE
       SYNTAX     UpsBypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { upsBypassLineIndex }
       ::= { upsBypassTable 1 }

   UpsBypassEntry ::= SEQUENCE {
       upsBypassLineIndex  PositiveInteger,
       upsBypassVoltage    NonNegativeInteger,
       upsBypassCurrent    NonNegativeInteger,
       upsBypassPower      NonNegativeInteger
   }

   upsBypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { upsBypassEntry 1 }

   upsBypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { upsBypassEntry 2 }

   upsBypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { upsBypassEntry 3 }

   upsBypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { upsBypassEntry 4 }


   --
   -- The Alarm group.
   --

   upsAlarm              OBJECT IDENTIFIER ::= { upsObjects 6 }

   upsAlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { upsAlarm 1 }

   upsAlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsAlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               upsAlarmId equal to 1, and increments the value of
               upsAlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of upsAlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               upsAlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), upsAlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of upsAlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of upsAlarmsPresent."
       ::= { upsAlarm 2 }

   upsAlarmEntry OBJECT-TYPE
       SYNTAX     UpsAlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { upsAlarmId }
       ::= { upsAlarmTable 1 }

   UpsAlarmEntry ::= SEQUENCE {
       upsAlarmId          PositiveInteger,
       upsAlarmDescr       AutonomousType,
       upsAlarmTime        TimeStamp
   }

   upsAlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { upsAlarmEntry 1 }

   upsAlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { upsAlarmEntry 2 }

   upsAlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of upsAlarmTime shall equal
               0."
       ::= { upsAlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   upsWellKnownAlarms    OBJECT IDENTIFIER ::= { upsAlarm 3 }
   upsAlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { upsWellKnownAlarms  1 }

   upsAlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { upsWellKnownAlarms  2 }

   upsAlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to upsConfigLowBattTime."
       ::= { upsWellKnownAlarms  3 }


   upsAlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { upsWellKnownAlarms  4 }

   upsAlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { upsWellKnownAlarms  5 }

   upsAlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { upsWellKnownAlarms  6 }

   upsAlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { upsWellKnownAlarms  7 }

   upsAlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { upsWellKnownAlarms  8 }

   upsAlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { upsWellKnownAlarms  9 }

   upsAlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { upsWellKnownAlarms 10 }

   upsAlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { upsWellKnownAlarms 11 }

   upsAlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { upsWellKnownAlarms 12 }

   upsAlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { upsWellKnownAlarms 13 }

   upsAlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { upsWellKnownAlarms 14 }

   upsAlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { upsWellKnownAlarms 15 }

   upsAlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { upsWellKnownAlarms 16 }

   upsAlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { upsWellKnownAlarms 17 }

   upsAlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { upsWellKnownAlarms 18 }

   upsAlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { upsWellKnownAlarms 19 }

   upsAlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { upsWellKnownAlarms 20 }

   upsAlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { upsWellKnownAlarms 21 }

   upsAlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A upsShutdownAfterDelay countdown is underway."
       ::= { upsWellKnownAlarms 22 }

   upsAlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { upsWellKnownAlarms 23 }

   upsAlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { upsWellKnownAlarms 24 }


   --
   -- The Test Group
   --

   upsTest               OBJECT IDENTIFIER ::= { upsObjects 7 }

   upsTestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               upsTestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               upsTestResultsSummary. Tests in progress may be
               aborted by setting the upsTestId variable to
               upsTestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value upsTestNoTestsInitiated is returned."
       ::= { upsTest 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   upsTestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = upsTestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, upsTestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               upsTestResultsSummary */
                     get (upsTestSpinLock, upsTestResultsSummary,
               upsTestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, upsTestResultsSummary,
               upsTestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if upsTestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of upsTestSpinLock at agent
               initialization shall
                     be 1."
       ::= { upsTest 2 }

   upsTestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of upsTestId to upsTestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { upsTest 3 }

   upsTestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about upsTestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { upsTest 4 }

   upsTestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of upsTestResultsSummary is noTestsInitiated(6),
               upsTestStartTime has the value 0."
       ::= { upsTest 5 }

   upsTestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               upsTestResultsSummary is noTestsInitiated(6),
               upsTestElapsedTime has the value 0."
       ::= { upsTest 6 }

   --
   -- Well known tests.
   --

   upsWellKnownTests     OBJECT IDENTIFIER ::= { upsTest 7 }


   upsTestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { upsWellKnownTests  1 }

   upsTestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { upsWellKnownTests  2 }

   upsTestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { upsWellKnownTests  3 }

   upsTestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { upsWellKnownTests  4 }

   upsTestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { upsWellKnownTests  5 }


   --
   -- The Control group.
   --

   upsControl            OBJECT IDENTIFIER ::= { upsObjects 8 }

   upsShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               upsShutdownAfterDelay and upsRebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { upsControl 1 }

   upsShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of upsShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if upsShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if upsShutdownType =
               output and the output is already off.  When read,
               upsShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any upsShutdownAfterDelay already in effect."
       ::= { upsControl 2 }

   upsStartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any upsStartupAfterDelay
               countdown or upsRebootWithDuration countdown in
               progress.  When read, upsStartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { upsControl 3 }

   upsRebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of upsShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, upsRebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { upsControl 4 }


   --
   -- notifications, i.e., traps
   --
   upsTraps              OBJECT IDENTIFIER ::= { upsSystem 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   upsTrapOnBattery NOTIFICATION-TYPE
       OBJECTS { upsEstimatedMinutesRemaining, upsSecondsOnBattery,
                 upsConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { upsTraps 1 }

   upsTrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { upsTestId, upsTestSpinLock,
                 upsTestResultsSummary, upsTestResultsDetail,
                 upsTestStartTime, upsTestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { upsTraps 2 }

   upsTrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { upsAlarmId, upsAlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for upsAlarmOnBattery and
               upsAlarmTestInProgress."
     ::= { upsTraps 3 }

   upsTrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { upsAlarmId, upsAlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for upsAlarmTestInProgress."
     ::= { upsTraps 4 }


   --
   -- conformance information
   --
   upsConformance        OBJECT IDENTIFIER ::= { upsSystem 3 }

   upsCompliances        OBJECT IDENTIFIER ::= { upsConformance 1 }


   --
   -- compliance statements
   --

   upsSubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { upsSubsetIdentGroup,
                     upsSubsetBatteryGroup, upsSubsetInputGroup,
                     upsSubsetOutputGroup, upsSubsetAlarmGroup,
                     upsSubsetControlGroup }

       OBJECT     upsBatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     upsAlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: upsAlarmOnBattery, upsAlarmLowBattery,
               upsAlarmInputBad, upsAlarmUpsOutputOff,
               upsAlarmUpsSystemOff, and upsAlarmTestInProgress."

       OBJECT     upsOutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     upsShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { upsCompliances 1 }

   upsBasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { upsBasicIdentGroup,
                     upsBasicBatteryGroup, upsBasicInputGroup,
                     upsBasicOutputGroup, upsBasicAlarmGroup,
                     upsBasicTestGroup, upsBasicControlGroup }


       OBJECT     upsAlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: upsAlarmOnBattery, upsAlarmLowBattery,
               upsAlarmDepletedBattery, upsAlarmTempBad,
               upsAlarmInputBad, upsAlarmOutputOverload,
               upsAlarmOnBypass, upsAlarmBypassBad,
               upsAlarmOutputOffAsRequested,
               upsAlarmUpsOffAsRequested, upsAlarmUpsOutputOff,
               upsAlarmUpsSystemOff, upsAlarmGeneralFault,
               upsAlarmDiagnosticTestFailed,
               upsAlarmCommunicationsLost, upsAlarmShutdownPending,
               and upsAlarmTestInProgress."

       OBJECT     upsTestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               upsTestNoTestsInitiated."

       OBJECT     upsOutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP upsBasicBypassGroup
           DESCRIPTION
               "The upsBasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     upsShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { upsCompliances 2 }

   upsFullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { upsFullIdentGroup, upsFullBatteryGroup,
                     upsFullInputGroup, upsFullOutputGroup,
                     upsFullAlarmGroup, upsFullTestGroup,
                     upsFullControlGroup }

       OBJECT     upsAlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: upsAlarmBatteryBad, upsAlarmOnBattery,
               upsAlarmLowBattery, upsAlarmDepletedBattery,
               upsAlarmTempBad, upsAlarmInputBad, upsAlarmOnBypass,
               upsAlarmBypassBad, upsAlarmOutputOffAsRequested,
               upsAlarmUpsOffAsRequested, upsAlarmUpsOutputOff,
               upsAlarmUpsSystemOff, upsAlarmGeneralFault,
               upsAlarmDiagnosticTestFailed,
               upsAlarmCommunicationsLost, upsAlarmShutdownPending,
               and upsAlarmTestInProgress."

       OBJECT     upsTestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: upsTestNoTestsInitiated,
               upsTestGeneralSystemsTest, and
               upsTestQuickBatteryTest."

       OBJECT     upsOutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP upsFullBypassGroup
           DESCRIPTION
               "The upsFullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     upsShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { upsCompliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   upsGroups             OBJECT IDENTIFIER ::= { upsConformance 2 }

   upsSubsetGroups       OBJECT IDENTIFIER ::= { upsGroups 1 }

   upsSubsetIdentGroup OBJECT-GROUP
       OBJECTS { upsIdentManufacturer, upsIdentModel,
                 upsIdentAgentSoftwareVersion, upsIdentName,
                 upsIdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The upsSubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the upsSubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { upsSubsetGroups 1 }

   upsSubsetBatteryGroup OBJECT-GROUP
       OBJECTS { upsBatteryStatus, upsSecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The upsSubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { upsSubsetGroups 2 }

   upsSubsetInputGroup OBJECT-GROUP
       OBJECTS { upsInputLineBads }
       STATUS  current
       DESCRIPTION
               "The upsSubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { upsSubsetGroups 3 }

   upsSubsetOutputGroup OBJECT-GROUP
       OBJECTS { upsOutputSource }
       STATUS  current
       DESCRIPTION
               "The upsSubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { upsSubsetGroups 4 }


   -- { upsSubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   upsSubsetAlarmGroup OBJECT-GROUP
       OBJECTS { upsAlarmsPresent, upsAlarmDescr, upsAlarmTime }
       STATUS  current
       DESCRIPTION
               "The upsSubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { upsSubsetGroups 6 }

   -- { upsSubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   upsSubsetControlGroup OBJECT-GROUP
       OBJECTS { upsShutdownType, upsShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The upsSubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { upsSubsetGroups 8 }

   upsBasicGroups        OBJECT IDENTIFIER ::= { upsGroups 2 }

   upsBasicIdentGroup OBJECT-GROUP
       OBJECTS { upsIdentManufacturer, upsIdentModel,
                 upsIdentUPSSoftwareVersion,
                 upsIdentAgentSoftwareVersion, upsIdentName }
       STATUS  current
       DESCRIPTION
               "The upsBasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 1 }

   upsBasicBatteryGroup OBJECT-GROUP
       OBJECTS { upsBatteryStatus, upsSecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The upsBasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 2 }

   upsBasicInputGroup OBJECT-GROUP
       OBJECTS { upsInputLineBads, upsInputNumLines,
                 upsInputFrequency, upsInputVoltage }
       STATUS  current
       DESCRIPTION
               "The upsBasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 3 }

   upsBasicOutputGroup OBJECT-GROUP
       OBJECTS { upsOutputSource, upsOutputFrequency,
                 upsOutputNumLines, upsOutputVoltage }
       STATUS  current
       DESCRIPTION
               "The upsBasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 4 }

   upsBasicBypassGroup OBJECT-GROUP
       OBJECTS { upsBypassFrequency, upsBypassNumLines,
                 upsBypassVoltage }
       STATUS  current
       DESCRIPTION
               "The upsBasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 5 }

   upsBasicAlarmGroup OBJECT-GROUP
       OBJECTS { upsAlarmsPresent, upsAlarmDescr, upsAlarmTime }
       STATUS  current
       DESCRIPTION

               "The upsBasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 6 }

   upsBasicTestGroup OBJECT-GROUP
       OBJECTS { upsTestId, upsTestSpinLock,
                 upsTestResultsSummary, upsTestResultsDetail,
                 upsTestStartTime, upsTestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The upsBasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 7 }

   upsBasicControlGroup OBJECT-GROUP
       OBJECTS { upsShutdownType, upsShutdownAfterDelay,
                 upsStartupAfterDelay, upsRebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The upsBasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { upsBasicGroups 8 }

   upsFullGroups         OBJECT IDENTIFIER ::= { upsGroups 3 }

   upsFullIdentGroup OBJECT-GROUP
       OBJECTS { upsIdentManufacturer, upsIdentModel,
                 upsIdentUPSSoftwareVersion,
                 upsIdentAgentSoftwareVersion, upsIdentName,
                 upsIdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The upsFullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { upsFullGroups 1 }

   upsFullBatteryGroup OBJECT-GROUP
       OBJECTS { upsBatteryStatus, upsSecondsOnBattery,
                 upsEstimatedMinutesRemaining,
                 upsEstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The upsFullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { upsFullGroups 2 }

   upsFullInputGroup OBJECT-GROUP
       OBJECTS { upsInputLineBads, upsInputNumLines,
                 upsInputFrequency, upsInputVoltage }
       STATUS  current
       DESCRIPTION
               "The upsFullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { upsFullGroups 3 }

   upsFullOutputGroup OBJECT-GROUP
       OBJECTS { upsOutputSource, upsOutputFrequency,
                 upsOutputNumLines, upsOutputVoltage,
                 upsOutputCurrent, upsOutputPower,
                 upsOutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The upsFullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { upsFullGroups 4 }

   upsFullBypassGroup OBJECT-GROUP
       OBJECTS { upsBypassFrequency, upsBypassNumLines,
                 upsBypassVoltage }
       STATUS  current
       DESCRIPTION
               "The upsFullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { upsFullGroups 5 }

   upsFullAlarmGroup OBJECT-GROUP
       OBJECTS { upsAlarmsPresent, upsAlarmDescr, upsAlarmTime }
       STATUS  current
       DESCRIPTION

               "The upsFullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { upsFullGroups 6 }

   upsFullTestGroup OBJECT-GROUP
       OBJECTS { upsTestId, upsTestSpinLock,
                 upsTestResultsSummary, upsTestResultsDetail,
                 upsTestStartTime, upsTestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The upsFullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { upsFullGroups 7 }

   upsFullControlGroup OBJECT-GROUP
       OBJECTS { upsShutdownType, upsShutdownAfterDelay,
                 upsStartupAfterDelay, upsRebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The upsFullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { upsFullGroups 8 }

   --*******************************************************************
   --
   -- Module 1 data
   --

   upsModule1           OBJECT IDENTIFIER ::= { upsModular 2 }

   ups01Objects           OBJECT IDENTIFIER ::= { upsModule1 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups01IdentName and
   --      ups01IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups01Ident              OBJECT IDENTIFIER ::= { ups01Objects 1 }

   ups01IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups01Ident 1 }

   ups01IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups01Ident 2 }

   ups01IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups01IdentAgentSoftwareVersion in some implementations."
       ::= { ups01Ident 3 }

   ups01IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups01IdentUPSSoftwareVersion in some implementations."
       ::= { ups01Ident 4 }

   ups01IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups01Ident 5 }

   ups01IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups01Ident 6 }


   --
   -- Battery Group
   --

   ups01Battery            OBJECT IDENTIFIER ::= { ups01Objects 2 }

   ups01BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups01ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups01ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups01Battery 1 }

   ups01SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups01Battery 2 }

   ups01EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups01Battery 3 }

   ups01EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups01Battery 4 }

   ups01BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups01Battery 5 }

   ups01BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups01Battery 6 }

   ups01BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups01Battery 7 }


   --
   -- Input Group
   --

   ups01Input              OBJECT IDENTIFIER ::= { ups01Objects 3 }

   ups01InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups01Input 1 }


   ups01InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups01Input 2 }

   ups01InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups01InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups01InputNumLines."
       ::= { ups01Input 3 }

   ups01InputEntry OBJECT-TYPE
       SYNTAX     Ups01InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups01InputLineIndex }
       ::= { ups01InputTable 1 }

   Ups01InputEntry ::= SEQUENCE {
       ups01InputLineIndex   PositiveInteger,
       ups01InputFrequency   NonNegativeInteger,
       ups01InputVoltage     NonNegativeInteger,
       ups01InputCurrent     NonNegativeInteger,
       ups01InputTruePower   NonNegativeInteger
   }

   ups01InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups01InputEntry 1 }

   ups01InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups01InputEntry 2 }

   ups01InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups01InputEntry 3 }

   ups01InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups01InputEntry 4 }

   ups01InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups01InputEntry 5 }


   --
   -- The Output group.
   --

   ups01Output             OBJECT IDENTIFIER ::= { ups01Objects 4 }

   ups01OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups01Output 1 }

   ups01OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups01Output 2 }

   ups01OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups01Output 3 }

   ups01OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups01OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups01OutputNumLines."
       ::= { ups01Output 4 }

   ups01OutputEntry OBJECT-TYPE
       SYNTAX     Ups01OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups01OutputLineIndex }
       ::= { ups01OutputTable 1 }

   Ups01OutputEntry ::= SEQUENCE {
       ups01OutputLineIndex   PositiveInteger,
       ups01OutputVoltage     NonNegativeInteger,
       ups01OutputCurrent     NonNegativeInteger,
       ups01OutputPower       NonNegativeInteger,
       ups01OutputPercentLoad Integer32
   }

   ups01OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups01OutputEntry 1 }

   ups01OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups01OutputEntry 2 }

   ups01OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups01OutputEntry 3 }

   ups01OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups01OutputEntry 4 }

   ups01OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups01OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups01Bypass             OBJECT IDENTIFIER ::= { ups01Objects 5 }

   ups01BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups01Bypass 1 }

   ups01BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups01Bypass 2 }

   ups01BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups01BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups01BypassNumLines."
       ::= { ups01Bypass 3 }

   ups01BypassEntry OBJECT-TYPE
       SYNTAX     Ups01BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups01BypassLineIndex }
       ::= { ups01BypassTable 1 }

   Ups01BypassEntry ::= SEQUENCE {
       ups01BypassLineIndex  PositiveInteger,
       ups01BypassVoltage    NonNegativeInteger,
       ups01BypassCurrent    NonNegativeInteger,
       ups01BypassPower      NonNegativeInteger
   }

   ups01BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups01BypassEntry 1 }

   ups01BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups01BypassEntry 2 }

   ups01BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups01BypassEntry 3 }

   ups01BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups01BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups01Alarm              OBJECT IDENTIFIER ::= { ups01Objects 6 }

   ups01AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups01Alarm 1 }

   ups01AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups01AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups01AlarmId equal to 1, and increments the value of
               ups01AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups01AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups01AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups01AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups01AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups01AlarmsPresent."
       ::= { ups01Alarm 2 }

   ups01AlarmEntry OBJECT-TYPE
       SYNTAX     Ups01AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups01AlarmId }
       ::= { ups01AlarmTable 1 }

   Ups01AlarmEntry ::= SEQUENCE {
       ups01AlarmId          PositiveInteger,
       ups01AlarmDescr       AutonomousType,
       ups01AlarmTime        TimeStamp
   }

   ups01AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups01AlarmEntry 1 }

   ups01AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups01AlarmEntry 2 }

   ups01AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups01AlarmTime shall equal
               0."
       ::= { ups01AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups01WellKnownAlarms    OBJECT IDENTIFIER ::= { ups01Alarm 3 }
   ups01AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups01WellKnownAlarms  1 }

   ups01AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups01WellKnownAlarms  2 }

   ups01AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups01ConfigLowBattTime."
       ::= { ups01WellKnownAlarms  3 }


   ups01AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups01WellKnownAlarms  4 }

   ups01AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups01WellKnownAlarms  5 }

   ups01AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups01WellKnownAlarms  6 }

   ups01AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups01WellKnownAlarms  7 }

   ups01AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups01WellKnownAlarms  8 }

   ups01AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups01WellKnownAlarms  9 }

   ups01AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups01WellKnownAlarms 10 }

   ups01AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups01WellKnownAlarms 11 }

   ups01AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups01WellKnownAlarms 12 }

   ups01AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups01WellKnownAlarms 13 }

   ups01AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups01WellKnownAlarms 14 }

   ups01AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups01WellKnownAlarms 15 }

   ups01AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups01WellKnownAlarms 16 }

   ups01AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups01WellKnownAlarms 17 }

   ups01AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups01WellKnownAlarms 18 }

   ups01AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups01WellKnownAlarms 19 }

   ups01AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups01WellKnownAlarms 20 }

   ups01AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups01WellKnownAlarms 21 }

   ups01AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups01ShutdownAfterDelay countdown is underway."
       ::= { ups01WellKnownAlarms 22 }

   ups01AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups01WellKnownAlarms 23 }

   ups01AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups01WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups01Test               OBJECT IDENTIFIER ::= { ups01Objects 7 }

   ups01TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups01TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups01TestResultsSummary. Tests in progress may be
               aborted by setting the ups01TestId variable to
               ups01TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups01TestNoTestsInitiated is returned."
       ::= { ups01Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups01TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (ups01TestSpinLock)
                     while (ups01TestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (ups01TestSpinLock)
                     }
                     lock_value = ups01TestSpinLock
                     /* no test in progress, start the test */
                     set (ups01TestSpinLock = lock_value, ups01TestId =
               requested_test)
                     if (error_index == 1) { /* (ups01TestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (ups01TestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups01TestResultsSummary */
                     get (ups01TestSpinLock, ups01TestResultsSummary,
               ups01TestResultsDetail)
                     while (ups01TestResultsSummary == inProgress) {
                       short delay
                       get (ups01TestSpinLock, ups01TestResultsSummary,
               ups01TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups01TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups01TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups01Test 2 }

   ups01TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups01TestId to ups01TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups01Test 3 }

   ups01TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups01TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups01Test 4 }

   ups01TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups01TestResultsSummary is noTestsInitiated(6),
               ups01TestStartTime has the value 0."
       ::= { ups01Test 5 }

   ups01TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups01TestResultsSummary is noTestsInitiated(6),
               ups01TestElapsedTime has the value 0."
       ::= { ups01Test 6 }

   --
   -- Well known tests.
   --

   ups01WellKnownTests     OBJECT IDENTIFIER ::= { ups01Test 7 }


   ups01TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups01WellKnownTests  1 }

   ups01TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups01WellKnownTests  2 }

   ups01TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups01WellKnownTests  3 }

   ups01TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups01WellKnownTests  4 }

   ups01TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups01WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups01Control            OBJECT IDENTIFIER ::= { ups01Objects 8 }

   ups01ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups01ShutdownAfterDelay and ups01RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups01Control 1 }

   ups01ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups01ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups01ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups01ShutdownType =
               output and the output is already off.  When read,
               ups01ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups01ShutdownAfterDelay already in effect."
       ::= { ups01Control 2 }

   ups01StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups01StartupAfterDelay
               countdown or ups01RebootWithDuration countdown in
               progress.  When read, ups01StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups01Control 3 }

   ups01RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups01ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups01RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups01Control 4 }

   --
   -- notifications, i.e., traps
   --
   ups01Traps              OBJECT IDENTIFIER ::= { upsModule1 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups01TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups01EstimatedMinutesRemaining, ups01SecondsOnBattery,
                 ups01ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups01Traps 1 }

   ups01TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups01TestId, ups01TestSpinLock,
                 ups01TestResultsSummary, ups01TestResultsDetail,
                 ups01TestStartTime, ups01TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups01Traps 2 }

   ups01TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups01AlarmId, ups01AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups01AlarmOnBattery and
               ups01AlarmTestInProgress."
     ::= { ups01Traps 3 }

   ups01TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups01AlarmId, ups01AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups01AlarmTestInProgress."
     ::= { ups01Traps 4 }


   --
   -- conformance information
   --
   ups01Conformance        OBJECT IDENTIFIER ::= { upsModule1 3 }

   ups01Compliances        OBJECT IDENTIFIER ::= { ups01Conformance 1 }


   --
   -- compliance statements
   --

   ups01SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups01SubsetIdentGroup,
                     ups01SubsetBatteryGroup, ups01SubsetInputGroup,
                     ups01SubsetOutputGroup, ups01SubsetAlarmGroup,
                     ups01SubsetControlGroup }

       OBJECT     ups01BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups01AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups01AlarmOnBattery, ups01AlarmLowBattery,
               ups01AlarmInputBad, ups01AlarmUpsOutputOff,
               ups01AlarmUpsSystemOff, and ups01AlarmTestInProgress."

       OBJECT     ups01OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups01ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups01Compliances 1 }

   ups01BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups01BasicIdentGroup,
                     ups01BasicBatteryGroup, ups01BasicInputGroup,
                     ups01BasicOutputGroup, ups01BasicAlarmGroup,
                     ups01BasicTestGroup, ups01BasicControlGroup }


       OBJECT     ups01AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups01AlarmOnBattery, ups01AlarmLowBattery,
               ups01AlarmDepletedBattery, ups01AlarmTempBad,
               ups01AlarmInputBad, ups01AlarmOutputOverload,
               ups01AlarmOnBypass, ups01AlarmBypassBad,
               ups01AlarmOutputOffAsRequested,
               ups01AlarmUpsOffAsRequested, ups01AlarmUpsOutputOff,
               ups01AlarmUpsSystemOff, ups01AlarmGeneralFault,
               ups01AlarmDiagnosticTestFailed,
               ups01AlarmCommunicationsLost, ups01AlarmShutdownPending,
               and ups01AlarmTestInProgress."

       OBJECT     ups01TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups01TestNoTestsInitiated."

       OBJECT     ups01OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups01BasicBypassGroup
           DESCRIPTION
               "The ups01BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups01ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups01Compliances 2 }

   ups01FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups01FullIdentGroup, ups01FullBatteryGroup,
                     ups01FullInputGroup, ups01FullOutputGroup,
                     ups01FullAlarmGroup, ups01FullTestGroup,
                     ups01FullControlGroup }

       OBJECT     ups01AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups01AlarmBatteryBad, ups01AlarmOnBattery,
               ups01AlarmLowBattery, ups01AlarmDepletedBattery,
               ups01AlarmTempBad, ups01AlarmInputBad, ups01AlarmOnBypass,
               ups01AlarmBypassBad, ups01AlarmOutputOffAsRequested,
               ups01AlarmUpsOffAsRequested, ups01AlarmUpsOutputOff,
               ups01AlarmUpsSystemOff, ups01AlarmGeneralFault,
               ups01AlarmDiagnosticTestFailed,
               ups01AlarmCommunicationsLost, ups01AlarmShutdownPending,
               and ups01AlarmTestInProgress."

       OBJECT     ups01TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups01TestNoTestsInitiated,
               ups01TestGeneralSystemsTest, and
               ups01TestQuickBatteryTest."

       OBJECT     ups01OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups01FullBypassGroup
           DESCRIPTION
               "The ups01FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups01ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups01Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --ups01IdentManufacturer                  x       x       x
   --ups01IdentModel                         x       x       x
   --ups01IdentUPSSoftwareVersion                    x       x
   --ups01IdentAgentSoftwareVersion          x       x       x
   --ups01IdentName                          x       x       x
   --ups01IdentAttachedDevices               x               x
   --
   --ups01BatteryStatus                      x       x       x  notes
   --ups01SecondsOnBattery                   x       x       x
   --ups01EstimatedMinutesRemaining                          x
   --ups01EstimatedChargeRemaining                           x
   --ups01BatteryVoltage
   --ups01BatteryCurrent
   --ups01BatteryTemperature
   --
   --ups01InputLineBads                      x       x       x
   --ups01InputNumLines                              x       x
   --ups01InputFrequency                             x       x
   --ups01InputVoltage                               x       x
   --ups01InputCurrent
   --ups01InputTruePower
   --
   --ups01OutputSource                       x       x       x  notes
   --ups01OutputFrequency                            x       x
   --ups01OutputNumLines                             x       x
   --ups01OutputVoltage                              x       x
   --ups01OutputCurrent                                      x
   --ups01OutputPower                                        x
   --ups01OutputPercentLoad                                  x
   --
   --
   --ups01BypassFrequency                            x       x  notes
   --ups01BypassNumLines                             x       x
   --ups01BypassVoltage                              x       x
   --ups01BypassCurrent
   --ups01BypassPower
   --
   --
   --ups01AlarmsPresent                      x       x       x
   --ups01AlarmDescr                         x       x       x  notes
   --ups01AlarmTime                          x       x       x
   --
   --ups01TestId                                     x       x  notes
   --ups01TestSpinLock                               x       x
   --ups01TestResultsSummary                         x       x
   --ups01TestResultsDetail                          x       x
   --ups01TestStartTime                              x       x
   --ups01TestElapsedTime                            x       x
   --
   --ups01ShutdownType                       x       x       x  notes
   --ups01ShutdownAfterDelay                 x       x       x
   --ups01StartupAfterDelay                          x       x
   --ups01RebootWithDuration                         x       x
   --


   -- units of conformance
   ups01Groups            OBJECT IDENTIFIER ::= { ups01Conformance 2 }

   ups01SubsetGroups      OBJECT IDENTIFIER ::= { ups01Groups 1 }

   ups01SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups01IdentManufacturer, ups01IdentModel,
                 ups01IdentAgentSoftwareVersion, ups01IdentName,
                 ups01IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups01SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups01SubsetGroups 1 }

   ups01SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups01BatteryStatus, ups01SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups01SubsetGroups 2 }

   ups01SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups01InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups01SubsetGroups 3 }

   ups01SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups01OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups01SubsetGroups 4 }


   -- { ups01SubsetGroups 5 } is reserved for
   -- future use (ups01SubsetBypassGroup)

   ups01SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups01AlarmsPresent, ups01AlarmDescr, ups01AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups01SubsetGroups 6 }

   -- { ups01SubsetGroups 7 } is reserved for
   -- future use (ups01SubsetTestGroup)

   ups01SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups01ShutdownType, ups01ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups01SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups01SubsetGroups 8 }

   ups01BasicGroups        OBJECT IDENTIFIER ::= { ups01Groups 2 }

   ups01BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups01IdentManufacturer, ups01IdentModel,
                 ups01IdentUPSSoftwareVersion,
                 ups01IdentAgentSoftwareVersion, ups01IdentName }
       STATUS  current
       DESCRIPTION
               "The ups01BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 1 }

   ups01BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups01BatteryStatus, ups01SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups01BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 2 }

   ups01BasicInputGroup OBJECT-GROUP
       OBJECTS { ups01InputLineBads, ups01InputNumLines,
                 ups01InputFrequency, ups01InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups01BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 3 }

   ups01BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups01OutputSource, ups01OutputFrequency,
                 ups01OutputNumLines, ups01OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups01BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 4 }

   ups01BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups01BypassFrequency, ups01BypassNumLines,
                 ups01BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups01BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 5 }

   ups01BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups01AlarmsPresent, ups01AlarmDescr, ups01AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups01BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 6 }

   ups01BasicTestGroup OBJECT-GROUP
       OBJECTS { ups01TestId, ups01TestSpinLock,
                 ups01TestResultsSummary, ups01TestResultsDetail,
                 ups01TestStartTime, ups01TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups01BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 7 }

   ups01BasicControlGroup OBJECT-GROUP
       OBJECTS { ups01ShutdownType, ups01ShutdownAfterDelay,
                 ups01StartupAfterDelay, ups01RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups01BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups01BasicGroups 8 }

   ups01FullGroups         OBJECT IDENTIFIER ::= { ups01Groups 3 }

   ups01FullIdentGroup OBJECT-GROUP
       OBJECTS { ups01IdentManufacturer, ups01IdentModel,
                 ups01IdentUPSSoftwareVersion,
                 ups01IdentAgentSoftwareVersion, ups01IdentName,
                 ups01IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups01FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups01FullGroups 1 }

   ups01FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups01BatteryStatus, ups01SecondsOnBattery,
                 ups01EstimatedMinutesRemaining,
                 ups01EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups01FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups01FullGroups 2 }

   ups01FullInputGroup OBJECT-GROUP
       OBJECTS { ups01InputLineBads, ups01InputNumLines,
                 ups01InputFrequency, ups01InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups01FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups01FullGroups 3 }

   ups01FullOutputGroup OBJECT-GROUP
       OBJECTS { ups01OutputSource, ups01OutputFrequency,
                 ups01OutputNumLines, ups01OutputVoltage,
                 ups01OutputCurrent, ups01OutputPower,
                 ups01OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups01FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups01FullGroups 4 }

   ups01FullBypassGroup OBJECT-GROUP
       OBJECTS { ups01BypassFrequency, ups01BypassNumLines,
                 ups01BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups01FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups01FullGroups 5 }

   ups01FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups01AlarmsPresent, ups01AlarmDescr, ups01AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups01FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups01FullGroups 6 }

   ups01FullTestGroup OBJECT-GROUP
       OBJECTS { ups01TestId, ups01TestSpinLock,
                 ups01TestResultsSummary, ups01TestResultsDetail,
                 ups01TestStartTime, ups01TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups01FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups01FullGroups 7 }

   ups01FullControlGroup OBJECT-GROUP
       OBJECTS { ups01ShutdownType, ups01ShutdownAfterDelay,
                 ups01StartupAfterDelay, ups01RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups01FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups01FullGroups 8 }


   --*******************************************************************
   --
   -- Module 2 data
   --

   upsModule2           OBJECT IDENTIFIER ::= { upsModular 3 }

   ups02Objects           OBJECT IDENTIFIER ::= { upsModule2 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for upsIdentName and
   --      upsIdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups02Ident              OBJECT IDENTIFIER ::= { ups02Objects 1 }

   ups02IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups02Ident 1 }

   ups02IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups02Ident 2 }

   ups02IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               upsIdentAgentSoftwareVersion in some implementations."
       ::= { ups02Ident 3 }

   ups02IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               upsIdentUPSSoftwareVersion in some implementations."
       ::= { ups02Ident 4 }

   ups02IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups02Ident 5 }

   ups02IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups02Ident 6 }


   --
   -- Battery Group
   --

   ups02Battery            OBJECT IDENTIFIER ::= { ups02Objects 2 }

   ups02BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               upsConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to upsConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups02Battery 1 }

   ups02SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups02Battery 2 }

   ups02EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups02Battery 3 }

   ups02EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups02Battery 4 }

   ups02BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups02Battery 5 }

   ups02BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups02Battery 6 }

   ups02BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups02Battery 7 }


   --
   -- Input Group
   --

   ups02Input              OBJECT IDENTIFIER ::= { ups02Objects 3 }

   ups02InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups02Input 1 }


   ups02InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups02Input 2 }

   ups02InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups02InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of upsInputNumLines."
       ::= { ups02Input 3 }

   ups02InputEntry OBJECT-TYPE
       SYNTAX     Ups02InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups02InputLineIndex }
       ::= { ups02InputTable 1 }

   Ups02InputEntry ::= SEQUENCE {
       ups02InputLineIndex   PositiveInteger,
       ups02InputFrequency   NonNegativeInteger,
       ups02InputVoltage     NonNegativeInteger,
       ups02InputCurrent     NonNegativeInteger,
       ups02InputTruePower   NonNegativeInteger
   }

   ups02InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups02InputEntry 1 }

   ups02InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups02InputEntry 2 }

   ups02InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups02InputEntry 3 }

   ups02InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups02InputEntry 4 }

   ups02InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups02InputEntry 5 }


   --
   -- The Output group.
   --

   ups02Output             OBJECT IDENTIFIER ::= { ups02Objects 4 }

   ups02OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups02Output 1 }

   ups02OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups02Output 2 }

   ups02OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups02Output 3 }

   ups02OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups02OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups02OutputNumLines."
       ::= { ups02Output 4 }

   ups02OutputEntry OBJECT-TYPE
       SYNTAX     Ups02OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups02OutputLineIndex }
       ::= { ups02OutputTable 1 }

   Ups02OutputEntry ::= SEQUENCE {
       ups02OutputLineIndex   PositiveInteger,
       ups02OutputVoltage     NonNegativeInteger,
       ups02OutputCurrent     NonNegativeInteger,
       ups02OutputPower       NonNegativeInteger,
       ups02OutputPercentLoad INTEGER
   }

   ups02OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups02OutputEntry 1 }

   ups02OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups02OutputEntry 2 }

   ups02OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups02OutputEntry 3 }

   ups02OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups02OutputEntry 4 }

   ups02OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups02OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups02Bypass             OBJECT IDENTIFIER ::= { ups02Objects 5 }

   ups02BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups02Bypass 1 }

   ups02BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups02Bypass 2 }

   ups02BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups02BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups02BypassNumLines."
       ::= { ups02Bypass 3 }

   ups02BypassEntry OBJECT-TYPE
       SYNTAX     Ups02BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups02BypassLineIndex }
       ::= { ups02BypassTable 1 }

   Ups02BypassEntry ::= SEQUENCE {
       ups02BypassLineIndex  PositiveInteger,
       ups02BypassVoltage    NonNegativeInteger,
       ups02BypassCurrent    NonNegativeInteger,
       ups02BypassPower      NonNegativeInteger
   }

   ups02BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups02BypassEntry 1 }

   ups02BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups02BypassEntry 2 }

   ups02BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups02BypassEntry 3 }

   ups02BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups02BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups02Alarm              OBJECT IDENTIFIER ::= { ups02Objects 6 }

   ups02AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups02Alarm 1 }

   ups02AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups02AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups02AlarmId equal to 1, and increments the value of
               ups02AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups02AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups02AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups02AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups02AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups02AlarmsPresent."
       ::= { ups02Alarm 2 }

   ups02AlarmEntry OBJECT-TYPE
       SYNTAX     Ups02AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups02AlarmId }
       ::= { ups02AlarmTable 1 }

   Ups02AlarmEntry ::= SEQUENCE {
       ups02AlarmId          PositiveInteger,
       ups02AlarmDescr       AutonomousType,
       ups02AlarmTime        TimeStamp
   }

   ups02AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups02AlarmEntry 1 }

   ups02AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups02AlarmEntry 2 }

   ups02AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups02AlarmTime shall equal
               0."
       ::= { ups02AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups02WellKnownAlarms    OBJECT IDENTIFIER ::= { ups02Alarm 3 }
   ups02AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups02WellKnownAlarms  1 }

   ups02AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups02WellKnownAlarms  2 }

   ups02AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups02ConfigLowBattTime."
       ::= { ups02WellKnownAlarms  3 }


   ups02AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups02WellKnownAlarms  4 }

   ups02AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups02WellKnownAlarms  5 }

   ups02AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups02WellKnownAlarms  6 }

   ups02AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups02WellKnownAlarms  7 }

   ups02AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups02WellKnownAlarms  8 }

   ups02AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups02WellKnownAlarms  9 }

   ups02AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups02WellKnownAlarms 10 }

   ups02AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups02WellKnownAlarms 11 }

   ups02AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups02WellKnownAlarms 12 }

   ups02AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups02WellKnownAlarms 13 }

   ups02AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups02WellKnownAlarms 14 }

   ups02AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups02WellKnownAlarms 15 }

   ups02AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups02WellKnownAlarms 16 }

   ups02AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups02WellKnownAlarms 17 }

   ups02AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups02WellKnownAlarms 18 }

   ups02AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups02WellKnownAlarms 19 }

   ups02AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups02WellKnownAlarms 20 }

   ups02AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups02WellKnownAlarms 21 }

   ups02AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A upsShutdownAfterDelay countdown is underway."
       ::= { ups02WellKnownAlarms 22 }

   ups02AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups02WellKnownAlarms 23 }

   ups02AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups02WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups02Test               OBJECT IDENTIFIER ::= { ups02Objects 7 }

   ups02TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups02TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups02TestResultsSummary. Tests in progress may be
               aborted by setting the ups02TestId variable to
               ups02TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups02TestNoTestsInitiated is returned."
       ::= { ups02Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups02TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (ups02TestSpinLock)
                     while (ups02TestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (ups02TestSpinLock)
                     }
                     lock_value = ups02TestSpinLock
                     /* no test in progress, start the test */
                     set (ups02TestSpinLock = lock_value, upsTestId =
               requested_test)
                     if (error_index == 1) { /* (ups02TestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (ups02TestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups02TestResultsSummary */
                     get (ups02TestSpinLock, ups02TestResultsSummary,
               ups02TestResultsDetail)
                     while (ups02TestResultsSummary == inProgress) {
                       short delay
                       get (ups02TestSpinLock, ups02TestResultsSummary,
               ups02TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups02TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups02TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups02Test 2 }

   ups02TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups02TestId to ups02TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups02Test 3 }

   ups02TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups02TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups02Test 4 }

   ups02TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups02TestResultsSummary is noTestsInitiated(6),
               ups02TestStartTime has the value 0."
       ::= { ups02Test 5 }

   ups02TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups02TestResultsSummary is noTestsInitiated(6),
               ups02TestElapsedTime has the value 0."
       ::= { ups02Test 6 }

   --
   -- Well known tests.
   --

   ups02WellKnownTests     OBJECT IDENTIFIER ::= { ups02Test 7 }


   ups02TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups02WellKnownTests  1 }

   ups02TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups02WellKnownTests  2 }

   ups02TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups02WellKnownTests  3 }

   ups02TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups02WellKnownTests  4 }

   ups02TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups02WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups02Control            OBJECT IDENTIFIER ::= { ups02Objects 8 }

   ups02ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups02ShutdownAfterDelay and ups02RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups02Control 1 }

   ups02ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups02ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups02ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups02ShutdownType =
               output and the output is already off.  When read,
               ups02ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups02ShutdownAfterDelay already in effect."
       ::= { ups02Control 2 }

   ups02StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups02StartupAfterDelay
               countdown or ups02RebootWithDuration countdown in
               progress.  When read, ups02StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups02Control 3 }

   ups02RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups02ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups02RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups02Control 4 }

   --
   -- notifications, i.e., traps
   --
   ups02Traps              OBJECT IDENTIFIER ::= { upsModule2 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups02TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups02EstimatedMinutesRemaining, ups02SecondsOnBattery,
                 ups02ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups02Traps 1 }

   ups02TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups02TestId, ups02TestSpinLock,
                 ups02TestResultsSummary, ups02TestResultsDetail,
                 ups02TestStartTime, ups02TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups02Traps 2 }

   ups02TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups02AlarmId, ups02AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups02AlarmOnBattery and
               upsAlarmTestInProgress."
     ::= { ups02Traps 3 }

   ups02TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups02AlarmId, ups02AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups02AlarmTestInProgress."
     ::= { ups02Traps 4 }


   --
   -- conformance information
   --
   ups02Conformance       OBJECT IDENTIFIER ::= { upsModule2 3 }

   ups02Compliances       OBJECT IDENTIFIER ::= { ups02Conformance 1 }


   --
   -- compliance statements
   --

   ups02SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups02SubsetIdentGroup,
                     ups02SubsetBatteryGroup, ups02SubsetInputGroup,
                     ups02SubsetOutputGroup, ups02SubsetAlarmGroup,
                     ups02SubsetControlGroup }

       OBJECT     ups02BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups02AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups02AlarmOnBattery, ups02AlarmLowBattery,
               ups02AlarmInputBad, ups02AlarmUpsOutputOff,
               ups02AlarmUpsSystemOff, and ups02AlarmTestInProgress."

       OBJECT     ups02OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups02ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups02Compliances 1 }

   ups02BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups02BasicIdentGroup,
                     ups02BasicBatteryGroup, ups02BasicInputGroup,
                     ups02BasicOutputGroup, ups02BasicAlarmGroup,
                     ups02BasicTestGroup, ups02BasicControlGroup }


       OBJECT     ups02AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups02AlarmOnBattery, ups02AlarmLowBattery,
               ups02AlarmDepletedBattery, ups02AlarmTempBad,
               ups02AlarmInputBad, ups02AlarmOutputOverload,
               ups02AlarmOnBypass, ups02AlarmBypassBad,
               ups02AlarmOutputOffAsRequested,
               ups02AlarmUpsOffAsRequested, ups02AlarmUpsOutputOff,
               ups02AlarmUpsSystemOff, ups02AlarmGeneralFault,
               ups02AlarmDiagnosticTestFailed,
               ups02AlarmCommunicationsLost, ups02AlarmShutdownPending,
               and ups02AlarmTestInProgress."

       OBJECT     ups02TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups02TestNoTestsInitiated."

       OBJECT     ups02OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups02BasicBypassGroup
           DESCRIPTION
               "The ups02BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups02ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups02Compliances 2 }

   ups02FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups02FullIdentGroup, ups02FullBatteryGroup,
                     ups02FullInputGroup, ups02FullOutputGroup,
                     ups02FullAlarmGroup, ups02FullTestGroup,
                     ups02FullControlGroup }

       OBJECT     ups02AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups02AlarmBatteryBad, ups02AlarmOnBattery,
               ups02AlarmLowBattery, ups02AlarmDepletedBattery,
               ups02AlarmTempBad, ups02AlarmInputBad, ups02AlarmOnBypass,
               ups02AlarmBypassBad, ups02AlarmOutputOffAsRequested,
               ups02AlarmUpsOffAsRequested, ups02AlarmUpsOutputOff,
               ups02AlarmUpsSystemOff, ups02AlarmGeneralFault,
               ups02AlarmDiagnosticTestFailed,
               ups02AlarmCommunicationsLost, ups02AlarmShutdownPending,
               and ups02AlarmTestInProgress."

       OBJECT     ups02TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups02TestNoTestsInitiated,
               ups02TestGeneralSystemsTest, and
               ups02TestQuickBatteryTest."

       OBJECT     ups02OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups02FullBypassGroup
           DESCRIPTION
               "The ups02FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups02ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups02Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups02Groups             OBJECT IDENTIFIER ::= { ups02Conformance 2 }

   ups02SubsetGroups       OBJECT IDENTIFIER ::= { ups02Groups 1 }

   ups02SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups02IdentManufacturer, ups02IdentModel,
                 ups02IdentAgentSoftwareVersion, ups02IdentName,
                 ups02IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups02SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups02SubsetGroups 1 }

   ups02SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups02BatteryStatus, ups02SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups02SubsetGroups 2 }

   ups02SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups02InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups02SubsetGroups 3 }

   ups02SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups02OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups02SubsetGroups 4 }


   -- { ups02SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups02SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups02AlarmsPresent, ups02AlarmDescr, ups02AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups02SubsetGroups 6 }

   -- { ups02SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups02SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups02ShutdownType, ups02ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups02SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups02SubsetGroups 8 }

   ups02BasicGroups      OBJECT IDENTIFIER ::= { ups02Groups 2 }

   ups02BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups02IdentManufacturer, ups02IdentModel,
                 ups02IdentUPSSoftwareVersion,
                 ups02IdentAgentSoftwareVersion, ups02IdentName }
       STATUS  current
       DESCRIPTION
               "The ups02BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 1 }

   ups02BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups02BatteryStatus, ups02SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups02BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 2 }

   ups02BasicInputGroup OBJECT-GROUP
       OBJECTS { ups02InputLineBads, ups02InputNumLines,
                 ups02InputFrequency, ups02InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups02BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 3 }

   ups02BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups02OutputSource, ups02OutputFrequency,
                 ups02OutputNumLines, ups02OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups02BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 4 }

   ups02BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups02BypassFrequency, ups02BypassNumLines,
                 ups02BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups02BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 5 }

   ups02BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups02AlarmsPresent, ups02AlarmDescr, ups02AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups02BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 6 }

   ups02BasicTestGroup OBJECT-GROUP
       OBJECTS { ups02TestId, ups02TestSpinLock,
                 ups02TestResultsSummary, ups02TestResultsDetail,
                 ups02TestStartTime, ups02TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups02BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 7 }

   ups02BasicControlGroup OBJECT-GROUP
       OBJECTS { ups02ShutdownType, ups02ShutdownAfterDelay,
                 ups02StartupAfterDelay, ups02RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups02BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups02BasicGroups 8 }

   ups02FullGroups       OBJECT IDENTIFIER ::= { ups02Groups 3 }

   ups02FullIdentGroup OBJECT-GROUP
       OBJECTS { ups02IdentManufacturer, ups02IdentModel,
                 ups02IdentUPSSoftwareVersion,
                 ups02IdentAgentSoftwareVersion, ups02IdentName,
                 ups02IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups02FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups02FullGroups 1 }

   ups02FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups02BatteryStatus, ups02SecondsOnBattery,
                 ups02EstimatedMinutesRemaining,
                 ups02EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups02FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups02FullGroups 2 }

   ups02FullInputGroup OBJECT-GROUP
       OBJECTS { ups02InputLineBads, ups02InputNumLines,
                 ups02InputFrequency, ups02InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups02FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups02FullGroups 3 }

   ups02FullOutputGroup OBJECT-GROUP
       OBJECTS { ups02OutputSource, ups02OutputFrequency,
                 ups02OutputNumLines, ups02OutputVoltage,
                 ups02OutputCurrent, ups02OutputPower,
                 ups02OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups02FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups02FullGroups 4 }

   ups02FullBypassGroup OBJECT-GROUP
       OBJECTS { ups02BypassFrequency, ups02BypassNumLines,
                 ups02BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups02FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups02FullGroups 5 }

   ups02FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups02AlarmsPresent, ups02AlarmDescr, ups02AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups02FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups02FullGroups 6 }

   ups02FullTestGroup OBJECT-GROUP
       OBJECTS { ups02TestId, ups02TestSpinLock,
                 ups02TestResultsSummary, ups02TestResultsDetail,
                 ups02TestStartTime, ups02TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups02FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups02FullGroups 7 }

   ups02FullControlGroup OBJECT-GROUP
       OBJECTS { ups02ShutdownType, ups02ShutdownAfterDelay,
                 ups02StartupAfterDelay, ups02RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups02FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups02FullGroups 8 }

   --*******************************************************************
   --
   -- Module 3 data
   --

   upsModule3           OBJECT IDENTIFIER ::= { upsModular 4 }
   ups03Objects           OBJECT IDENTIFIER ::= { upsModule3 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for upsIdentName and
   --      upsIdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups03Ident              OBJECT IDENTIFIER ::= { ups03Objects 1 }

   ups03IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups03Ident 1 }

   ups03IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups03Ident 2 }

   ups03IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups03IdentAgentSoftwareVersion in some implementations."
       ::= { ups03Ident 3 }

   ups03IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups03IdentUPSSoftwareVersion in some implementations."
       ::= { ups03Ident 4 }

   ups03IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups03Ident 5 }

   ups03IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups03Ident 6 }


   --
   -- Battery Group
   --

   ups03Battery           OBJECT IDENTIFIER ::= { ups03Objects 2 }

   ups03BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups03ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups03ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups03Battery 1 }

   ups03SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups03Battery 2 }

   ups03EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups03Battery 3 }

   ups03EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups03Battery 4 }

   ups03BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups03Battery 5 }

   ups03BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups03Battery 6 }

   ups03BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups03Battery 7 }


   --
   -- Input Group
   --

   ups03Input               OBJECT IDENTIFIER ::= { ups03Objects 3 }

   ups03InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups03Input  1 }


   ups03InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups03Input  2 }

   ups03InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups03InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups03InputNumLines."
       ::= { ups03Input  3 }

   ups03InputEntry OBJECT-TYPE
       SYNTAX     Ups03InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups03InputLineIndex }
       ::= { ups03InputTable 1 }

   Ups03InputEntry ::= SEQUENCE {
       ups03InputLineIndex   PositiveInteger,
       ups03InputFrequency   NonNegativeInteger,
       ups03InputVoltage     NonNegativeInteger,
       ups03InputCurrent     NonNegativeInteger,
       ups03InputTruePower   NonNegativeInteger
   }

   ups03InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups03InputEntry 1 }

   ups03InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups03InputEntry 2 }

   ups03InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups03InputEntry 3 }

   ups03InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups03InputEntry 4 }

   ups03InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups03InputEntry 5 }


   --
   -- The Output group.
   --

   ups03Output             OBJECT IDENTIFIER ::= { ups03Objects 4 }

   ups03OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups03Output 1 }

   ups03OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups03Output 2 }

   ups03OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups03Output 3 }

   ups03OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups03OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups03OutputNumLines."
       ::= { ups03Output 4 }

   ups03OutputEntry OBJECT-TYPE
       SYNTAX     Ups03OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups03OutputLineIndex }
       ::= { ups03OutputTable 1 }

   Ups03OutputEntry ::= SEQUENCE {
       ups03OutputLineIndex   PositiveInteger,
       ups03OutputVoltage     NonNegativeInteger,
       ups03OutputCurrent     NonNegativeInteger,
       ups03OutputPower       NonNegativeInteger,
       ups03OutputPercentLoad INTEGER
   }

   ups03OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups03OutputEntry 1 }

   ups03OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups03OutputEntry 2 }

   ups03OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups03OutputEntry 3 }

   ups03OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups03OutputEntry 4 }

   ups03OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups03OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups03Bypass             OBJECT IDENTIFIER ::= { ups03Objects 5 }

   ups03BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups03Bypass  1 }

   ups03BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups03Bypass  2 }

   ups03BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups03BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups03BypassNumLines."
       ::= { ups03Bypass  3 }

   ups03BypassEntry OBJECT-TYPE
       SYNTAX     Ups03BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups03BypassLineIndex }
       ::= { ups03BypassTable 1 }

   Ups03BypassEntry ::= SEQUENCE {
       ups03BypassLineIndex  PositiveInteger,
       ups03BypassVoltage    NonNegativeInteger,
       ups03BypassCurrent    NonNegativeInteger,
       ups03BypassPower      NonNegativeInteger
   }

   ups03BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups03BypassEntry 1 }

   ups03BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups03BypassEntry 2 }

   ups03BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups03BypassEntry 3 }

   ups03BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups03BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups03Alarm                OBJECT IDENTIFIER ::= { ups03Objects 6 }

   ups03AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups03Alarm   1 }

   ups03AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups03AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups03AlarmId equal to 1, and increments the value of
               ups03AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups03AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups03AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups03AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups03AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups03AlarmsPresent."
       ::= { ups03Alarm   2 }

   ups03AlarmEntry OBJECT-TYPE
       SYNTAX     Ups03AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups03AlarmId }
       ::= { ups03AlarmTable 1 }

   Ups03AlarmEntry ::= SEQUENCE {
       ups03AlarmId          PositiveInteger,
       ups03AlarmDescr       AutonomousType,
       ups03AlarmTime        TimeStamp
   }

   ups03AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups03AlarmEntry 1 }

   ups03AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups03AlarmEntry 2 }

   ups03AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups03AlarmTime shall equal
               0."
       ::= { ups03AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups03WellKnownAlarms    OBJECT IDENTIFIER ::= { ups03Alarm 3 }
   ups03AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups03WellKnownAlarms 1 }

   ups03AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups03WellKnownAlarms 2 }

   ups03AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups03ConfigLowBattTime."
       ::= { ups03WellKnownAlarms 3 }


   ups03AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups03WellKnownAlarms 4 }

   ups03AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups03WellKnownAlarms 5 }

   ups03AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups03WellKnownAlarms 6 }

   ups03AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups03WellKnownAlarms 7 }

   ups03AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups03WellKnownAlarms 8 }

   ups03AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups03WellKnownAlarms 9 }

   ups03AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups03WellKnownAlarms 10 }

   ups03AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups03WellKnownAlarms 11 }

   ups03AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups03WellKnownAlarms 12 }

   ups03AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups03WellKnownAlarms 13 }

   ups03AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups03WellKnownAlarms 14 }

   ups03AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups03WellKnownAlarms 15 }

   ups03AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups03WellKnownAlarms 16 }

   ups03AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups03WellKnownAlarms 17 }

   ups03AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups03WellKnownAlarms 18 }

   ups03AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups03WellKnownAlarms 19 }

   ups03AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups03WellKnownAlarms 20 }

   ups03AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups03WellKnownAlarms 21 }

   ups03AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups03ShutdownAfterDelay countdown is underway."
       ::= { ups03WellKnownAlarms 22 }

   ups03AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups03WellKnownAlarms 23 }

   ups03AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups03WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups03Test               OBJECT IDENTIFIER ::= { ups03Objects 7 }

   ups03TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups03TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups03TestResultsSummary. Tests in progress may be
               aborted by setting the ups03TestId variable to
               ups03TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups03TestNoTestsInitiated is returned."
       ::= { ups03Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups03TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups03TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups03TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups03TestResultsSummary */
                     get (upsTestSpinLock, ups03TestResultsSummary,
               ups03TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups03TestResultsSummary,
               ups03TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups03TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups03TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups03Test 2 }

   ups03TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups03TestId to upsTestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups03Test 3 }

   ups03TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups03TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups03Test 4 }

   ups03TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups03TestResultsSummary is noTestsInitiated(6),
               ups03TestStartTime has the value 0."
       ::= { ups03Test 5 }

   ups03TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups03TestResultsSummary is noTestsInitiated(6),
               ups03TestElapsedTime has the value 0."
       ::= { ups03Test 6 }

   --
   -- Well known tests.
   --

   ups03WellKnownTests     OBJECT IDENTIFIER ::= { ups03Test 7 }


   ups03TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups03WellKnownTests  1 }

   ups03TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups03WellKnownTests  2 }

   ups03TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups03WellKnownTests  3 }

   ups03TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups03WellKnownTests  4 }

   ups03TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups03WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups03Control             OBJECT IDENTIFIER ::= { ups03Objects 8 }

   ups03ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups03ShutdownAfterDelay and upsRebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups03Control  1 }

   ups03ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups03ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups03ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups03ShutdownType =
               output and the output is already off.  When read,
               ups03ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups03ShutdownAfterDelay already in effect."
       ::= { ups03Control  2 }

   ups03StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups03StartupAfterDelay
               countdown or ups03RebootWithDuration countdown in
               progress.  When read, ups03StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups03Control  3 }

   ups03RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups03ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups03RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups03Control  4 }


   --
   -- notifications, i.e., traps
   --
   ups03Traps                OBJECT IDENTIFIER ::= { upsModule3 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups03TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups03EstimatedMinutesRemaining, upsSecondsOnBattery,
                 ups03ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups03Traps   1 }

   ups03TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups03TestId, upsTestSpinLock,
                 ups03TestResultsSummary, upsTestResultsDetail,
                 ups03TestStartTime, ups03TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups03Traps   2 }

   ups03TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups03AlarmId, ups03AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups03AlarmOnBattery and
               ups03AlarmTestInProgress."
     ::= { ups03Traps   3 }

   ups03TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups03AlarmId, ups03AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups03AlarmTestInProgress."
     ::= { ups03Traps   4 }


   --
   -- conformance information
   --
   ups03Conformance        OBJECT IDENTIFIER ::= { upsModule3 3 }

   ups03Compliances        OBJECT IDENTIFIER ::= { ups03Conformance 1 }


   --
   -- compliance statements
   --

   ups03SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups03SubsetIdentGroup,
                     ups03SubsetBatteryGroup, ups03SubsetInputGroup,
                     ups03SubsetOutputGroup, ups03SubsetAlarmGroup,
                     ups03SubsetControlGroup }

       OBJECT     ups03BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups03AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups03AlarmOnBattery, ups03AlarmLowBattery,
               ups03AlarmInputBad, ups03AlarmUpsOutputOff,
               ups03AlarmUpsSystemOff, and ups03AlarmTestInProgress."

       OBJECT     ups03OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups03ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups03Compliances 1 }

   ups03BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups03BasicIdentGroup,
                     ups03BasicBatteryGroup, ups03BasicInputGroup,
                     ups03BasicOutputGroup, ups03BasicAlarmGroup,
                     ups03BasicTestGroup, ups03BasicControlGroup }


       OBJECT     ups03AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups03AlarmOnBattery, ups03AlarmLowBattery,
               ups03AlarmDepletedBattery, ups03AlarmTempBad,
               ups03AlarmInputBad, ups03AlarmOutputOverload,
               ups03AlarmOnBypass, ups03AlarmBypassBad,
               ups03AlarmOutputOffAsRequested,
               ups03AlarmUpsOffAsRequested, ups03AlarmUpsOutputOff,
               ups03AlarmUpsSystemOff, ups03AlarmGeneralFault,
               ups03AlarmDiagnosticTestFailed,
               ups03AlarmCommunicationsLost, ups03AlarmShutdownPending,
               and ups03AlarmTestInProgress."

       OBJECT     ups03TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups03TestNoTestsInitiated."

       OBJECT     ups03OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups03BasicBypassGroup
           DESCRIPTION
               "The ups03BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups03ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups03Compliances 2 }

   ups03FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups03FullIdentGroup, upsFullBatteryGroup,
                     ups03FullInputGroup, upsFullOutputGroup,
                     ups03FullAlarmGroup, upsFullTestGroup,
                     ups03FullControlGroup }

       OBJECT     ups03AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups03AlarmBatteryBad, ups03AlarmOnBattery,
               ups03AlarmLowBattery, ups03AlarmDepletedBattery,
               ups03AlarmTempBad, ups03AlarmInputBad, upsAlarmOnBypass,
               ups03AlarmBypassBad, ups03AlarmOutputOffAsRequested,
               ups03AlarmUpsOffAsRequested, ups03AlarmUpsOutputOff,
               ups03AlarmUpsSystemOff, ups03AlarmGeneralFault,
               ups03AlarmDiagnosticTestFailed,
               ups03AlarmCommunicationsLost, ups03AlarmShutdownPending,
               and ups03AlarmTestInProgress."

       OBJECT     ups03TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups03TestNoTestsInitiated,
               ups03TestGeneralSystemsTest, and
               ups03TestQuickBatteryTest."

       OBJECT     ups03OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups03FullBypassGroup
           DESCRIPTION
               "The ups03FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups03ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups03Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups03Groups             OBJECT IDENTIFIER ::= { ups03Conformance 2 }

   ups03SubsetGroups       OBJECT IDENTIFIER ::= { ups03Groups 1 }

   ups03SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups03IdentManufacturer, ups03IdentModel,
                 ups03IdentAgentSoftwareVersion, ups03IdentName,
                 ups03IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups03SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups03SubsetGroups 1 }

   ups03SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups03BatteryStatus, ups03SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups03SubsetGroups 2 }

   ups03SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups03InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups03SubsetGroups 3 }

   ups03SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups03OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups03SubsetGroups 4 }


   -- { ups03SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups03SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups03AlarmsPresent, ups03AlarmDescr, ups03AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups03SubsetGroups 6 }

   -- { ups03SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups03SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups03ShutdownType, ups03ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups03SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups03SubsetGroups 8 }

   ups03BasicGroups        OBJECT IDENTIFIER ::= { ups03Groups 2 }

   ups03BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups03IdentManufacturer, ups03IdentModel,
                 ups03IdentUPSSoftwareVersion,
                 ups03IdentAgentSoftwareVersion, ups03IdentName }
       STATUS  current
       DESCRIPTION
               "The ups03BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 1 }

   ups03BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups03BatteryStatus, ups03SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups03BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 2 }

   ups03BasicInputGroup OBJECT-GROUP
       OBJECTS { ups03InputLineBads, ups03InputNumLines,
                 ups03InputFrequency, ups03InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups03BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 3 }

   ups03BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups03OutputSource, ups03OutputFrequency,
                 ups03OutputNumLines, ups03OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups03BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 4 }

   ups03BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups03BypassFrequency, ups03BypassNumLines,
                 ups03BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups03BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 5 }

   ups03BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups03AlarmsPresent, ups03AlarmDescr, ups03AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups03BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 6 }

   ups03BasicTestGroup OBJECT-GROUP
       OBJECTS { ups03TestId, ups03TestSpinLock,
                 ups03TestResultsSummary, ups03TestResultsDetail,
                 ups03TestStartTime, ups03TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups03BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 7 }

   ups03BasicControlGroup OBJECT-GROUP
       OBJECTS { ups03ShutdownType, ups03ShutdownAfterDelay,
                 ups03StartupAfterDelay, ups03RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups03BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups03BasicGroups 8 }

   ups03FullGroups         OBJECT IDENTIFIER ::= { ups03Groups 3 }

   ups03FullIdentGroup OBJECT-GROUP
       OBJECTS { ups03IdentManufacturer, ups03IdentModel,
                 ups03IdentUPSSoftwareVersion,
                 ups03IdentAgentSoftwareVersion, ups03IdentName,
                 ups03IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups03FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups03FullGroups 1 }

   ups03FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups03BatteryStatus, ups03SecondsOnBattery,
                 ups03EstimatedMinutesRemaining,
                 ups03EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups03FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups03FullGroups 2 }

   ups03FullInputGroup OBJECT-GROUP
       OBJECTS { ups03InputLineBads, ups03InputNumLines,
                 ups03InputFrequency, ups03InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups03FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups03FullGroups 3 }

   ups03FullOutputGroup OBJECT-GROUP
       OBJECTS { ups03OutputSource, ups03OutputFrequency,
                 ups03OutputNumLines, ups03OutputVoltage,
                 ups03OutputCurrent, ups03OutputPower,
                 ups03OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups03FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups03FullGroups 4 }

   ups03FullBypassGroup OBJECT-GROUP
       OBJECTS { ups03BypassFrequency, ups03BypassNumLines,
                 ups03BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups03FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups03FullGroups 5 }

   ups03FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups03AlarmsPresent, ups03AlarmDescr, ups03AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups03FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups03FullGroups 6 }

   ups03FullTestGroup OBJECT-GROUP
       OBJECTS { ups03TestId, ups03TestSpinLock,
                 ups03TestResultsSummary, ups03TestResultsDetail,
                 ups03TestStartTime, ups03TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups03FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups03FullGroups 7 }

   ups03FullControlGroup OBJECT-GROUP
       OBJECTS { ups03ShutdownType, ups03ShutdownAfterDelay,
                 ups03StartupAfterDelay, ups03RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups03FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups03FullGroups 8 }

   --*******************************************************************
   --
   -- Module 4 data
   --

   upsModule4           OBJECT IDENTIFIER ::= { upsModular 5 }
   ups04Objects           OBJECT IDENTIFIER ::= { upsModule4 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups04IdentName and
   --      ups04IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups04Ident              OBJECT IDENTIFIER ::= { ups04Objects 1 }

   ups04IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups04Ident 1 }

   ups04IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups04Ident 2 }

   ups04IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups04IdentAgentSoftwareVersion in some implementations."
       ::= { ups04Ident 3 }

   ups04IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups04IdentUPSSoftwareVersion in some implementations."
       ::= { ups04Ident 4 }

   ups04IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups04Ident 5 }

   ups04IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups04Ident 6 }


   --
   -- Battery Group
   --

   ups04Battery            OBJECT IDENTIFIER ::= { ups04Objects 2 }

   ups04BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups04ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups04ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups04Battery 1 }

   ups04SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups04Battery 2 }

   ups04EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups04Battery 3 }

   ups04EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups04Battery 4 }

   ups04BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups04Battery 5 }

   ups04BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups04Battery 6 }

   ups04BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups04Battery 7 }


   --
   -- Input Group
   --

   ups04Input              OBJECT IDENTIFIER ::= { ups04Objects 3 }

   ups04InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups04Input 1 }


   ups04InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups04Input 2 }

   ups04InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups04InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups04InputNumLines."
       ::= { ups04Input 3 }

   ups04InputEntry OBJECT-TYPE
       SYNTAX     Ups04InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups04InputLineIndex }
       ::= { ups04InputTable 1 }

   Ups04InputEntry ::= SEQUENCE {
       ups04InputLineIndex   PositiveInteger,
       ups04InputFrequency   NonNegativeInteger,
       ups04InputVoltage     NonNegativeInteger,
       ups04InputCurrent     NonNegativeInteger,
       ups04InputTruePower   NonNegativeInteger
   }

   ups04InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups04InputEntry 1 }

   ups04InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups04InputEntry 2 }

   ups04InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups04InputEntry 3 }

   ups04InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups04InputEntry 4 }

   ups04InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups04InputEntry 5 }


   --
   -- The Output group.
   --

   ups04Output             OBJECT IDENTIFIER ::= { ups04Objects 4 }

   ups04OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups04Output 1 }

   ups04OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups04Output 2 }

   ups04OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups04Output 3 }

   ups04OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups04OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups04OutputNumLines."
       ::= { ups04Output 4 }

   ups04OutputEntry OBJECT-TYPE
       SYNTAX     Ups04OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups04OutputLineIndex }
       ::= { ups04OutputTable 1 }

   Ups04OutputEntry ::= SEQUENCE {
       ups04OutputLineIndex   PositiveInteger,
       ups04OutputVoltage     NonNegativeInteger,
       ups04OutputCurrent     NonNegativeInteger,
       ups04OutputPower       NonNegativeInteger,
       ups04OutputPercentLoad INTEGER
   }

   ups04OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups04OutputEntry 1 }

   ups04OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups04OutputEntry 2 }

   ups04OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups04OutputEntry 3 }

   ups04OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups04OutputEntry 4 }

   ups04OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups04OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups04Bypass             OBJECT IDENTIFIER ::= { ups04Objects 5 }

   ups04BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups04Bypass 1 }

   ups04BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups04Bypass 2 }

   ups04BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups04BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups04BypassNumLines."
       ::= { ups04Bypass 3 }

   ups04BypassEntry OBJECT-TYPE
       SYNTAX     Ups04BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups04BypassLineIndex }
       ::= { ups04BypassTable 1 }

   Ups04BypassEntry ::= SEQUENCE {
       ups04BypassLineIndex  PositiveInteger,
       ups04BypassVoltage    NonNegativeInteger,
       ups04BypassCurrent    NonNegativeInteger,
       ups04BypassPower      NonNegativeInteger
   }

   ups04BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups04BypassEntry 1 }

   ups04BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups04BypassEntry 2 }

   ups04BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups04BypassEntry 3 }

   ups04BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups04BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups04Alarm              OBJECT IDENTIFIER ::= { ups04Objects 6 }

   ups04AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups04Alarm 1 }

   ups04AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups04AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups04AlarmId equal to 1, and increments the value of
               ups04AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups04AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups04AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups04AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups04AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups04AlarmsPresent."
       ::= { ups04Alarm 2 }

   ups04AlarmEntry OBJECT-TYPE
       SYNTAX     Ups04AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups04AlarmId }
       ::= { ups04AlarmTable 1 }

   Ups04AlarmEntry ::= SEQUENCE {
       ups04AlarmId          PositiveInteger,
       ups04AlarmDescr       AutonomousType,
       ups04AlarmTime        TimeStamp
   }

   ups04AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups04AlarmEntry 1 }

   ups04AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups04AlarmEntry 2 }

   ups04AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups04AlarmTime shall equal
               0."
       ::= { ups04AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups04WellKnownAlarms    OBJECT IDENTIFIER ::= { ups04Alarm 3 }
   ups04AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups04WellKnownAlarms  1 }

   ups04AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups04WellKnownAlarms  2 }

   ups04AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups04ConfigLowBattTime."
       ::= { ups04WellKnownAlarms  3 }


   ups04AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups04WellKnownAlarms  4 }

   ups04AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups04WellKnownAlarms  5 }

   ups04AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups04WellKnownAlarms  6 }

   ups04AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups04WellKnownAlarms  7 }

   ups04AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups04WellKnownAlarms  8 }

   ups04AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups04WellKnownAlarms  9 }

   ups04AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups04WellKnownAlarms 10 }

   ups04AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups04WellKnownAlarms 11 }

   ups04AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups04WellKnownAlarms 12 }

   ups04AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups04WellKnownAlarms 13 }

   ups04AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups04WellKnownAlarms 14 }

   ups04AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups04WellKnownAlarms 15 }

   ups04AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups04WellKnownAlarms 16 }

   ups04AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups04WellKnownAlarms 17 }

   ups04AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups04WellKnownAlarms 18 }

   ups04AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups04WellKnownAlarms 19 }

   ups04AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups04WellKnownAlarms 20 }

   ups04AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups04WellKnownAlarms 21 }

   ups04AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups04ShutdownAfterDelay countdown is underway."
       ::= { ups04WellKnownAlarms 22 }

   ups04AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups04WellKnownAlarms 23 }

   ups04AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups04WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups04Test               OBJECT IDENTIFIER ::= { ups04Objects 7 }

   ups04TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups04TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups04TestResultsSummary. Tests in progress may be
               aborted by setting the ups04TestId variable to
               ups04TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups04TestNoTestsInitiated is returned."
       ::= { ups04Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups04TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups04TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups04TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups04TestResultsSummary */
                     get (upsTestSpinLock, ups04TestResultsSummary,
               ups04TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups04TestResultsSummary,
               ups04TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups04TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups04TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups04Test 2 }

   ups04TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups04TestId to ups04TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups04Test 3 }

   ups04TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups04TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups04Test 4 }

   ups04TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups04TestResultsSummary is noTestsInitiated(6),
               ups04TestStartTime has the value 0."
       ::= { ups04Test 5 }

   ups04TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups04TestResultsSummary is noTestsInitiated(6),
               ups04TestElapsedTime has the value 0."
       ::= { ups04Test 6 }

   --
   -- Well known tests.
   --

   ups04WellKnownTests     OBJECT IDENTIFIER ::= { ups04Test 7 }


   ups04TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups04WellKnownTests  1 }

   ups04TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups04WellKnownTests  2 }

   ups04TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups04WellKnownTests  3 }

   ups04TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups04WellKnownTests  4 }

   ups04TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups04WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups04Control            OBJECT IDENTIFIER ::= { ups04Objects 8 }

   ups04ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups04ShutdownAfterDelay and ups04RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups04Control 1 }

   ups04ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups04ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups04ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups04ShutdownType =
               output and the output is already off.  When read,
               ups04ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups04ShutdownAfterDelay already in effect."
       ::= { ups04Control 2 }

   ups04StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups04StartupAfterDelay
               countdown or ups04RebootWithDuration countdown in
               progress.  When read, ups04StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups04Control 3 }

   ups04RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups04ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups04RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups04Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups04Traps              OBJECT IDENTIFIER ::= { upsModule4 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups04TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups04EstimatedMinutesRemaining, ups04SecondsOnBattery,
                 ups04ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups04Traps 1 }

   ups04TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups04TestId, ups04TestSpinLock,
                 ups04TestResultsSummary, ups04TestResultsDetail,
                 ups04TestStartTime, ups04TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups04Traps 2 }

   ups04TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups04AlarmId, ups04AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups04AlarmOnBattery and
               ups04AlarmTestInProgress."
     ::= { ups04Traps 3 }

   ups04TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups04AlarmId, ups04AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups04AlarmTestInProgress."
     ::= { ups04Traps 4 }


   --
   -- conformance information
   --
   ups04Conformance        OBJECT IDENTIFIER ::= { upsModule4 3 }

   ups04Compliances        OBJECT IDENTIFIER ::= { ups04Conformance 1 }


   --
   -- compliance statements
   --

   ups04SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups04SubsetIdentGroup,
                     ups04SubsetBatteryGroup, ups04SubsetInputGroup,
                     ups04SubsetOutputGroup, ups04SubsetAlarmGroup,
                     ups04SubsetControlGroup }

       OBJECT     ups04BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups04AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups04AlarmOnBattery, ups04AlarmLowBattery,
               ups04AlarmInputBad, ups04AlarmUpsOutputOff,
               ups04AlarmUpsSystemOff, and ups04AlarmTestInProgress."

       OBJECT     ups04OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups04ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups04Compliances 1 }

   ups04BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups04BasicIdentGroup,
                     ups04BasicBatteryGroup, ups04BasicInputGroup,
                     ups04BasicOutputGroup, ups04BasicAlarmGroup,
                     ups04BasicTestGroup, ups04BasicControlGroup }


       OBJECT     ups04AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups04AlarmOnBattery, ups04AlarmLowBattery,
               ups04AlarmDepletedBattery, ups04AlarmTempBad,
               ups04AlarmInputBad, ups04AlarmOutputOverload,
               ups04AlarmOnBypass, ups04AlarmBypassBad,
               ups04AlarmOutputOffAsRequested,
               ups04AlarmUpsOffAsRequested, ups04AlarmUpsOutputOff,
               ups04AlarmUpsSystemOff, ups04AlarmGeneralFault,
               ups04AlarmDiagnosticTestFailed,
               ups04AlarmCommunicationsLost, ups04AlarmShutdownPending,
               and ups04AlarmTestInProgress."

       OBJECT     ups04TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups04TestNoTestsInitiated."

       OBJECT     ups04OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups04BasicBypassGroup
           DESCRIPTION
               "The ups04BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups04ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups04Compliances 2 }

   ups04FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups04FullIdentGroup, ups04FullBatteryGroup,
                     ups04FullInputGroup, ups04FullOutputGroup,
                     ups04FullAlarmGroup, ups04FullTestGroup,
                     ups04FullControlGroup }

       OBJECT     ups04AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups04AlarmBatteryBad, ups04AlarmOnBattery,
               ups04AlarmLowBattery, ups04AlarmDepletedBattery,
               ups04AlarmTempBad, ups04AlarmInputBad, ups04AlarmOnBypass,
               ups04AlarmBypassBad, ups04AlarmOutputOffAsRequested,
               ups04AlarmUpsOffAsRequested, ups04AlarmUpsOutputOff,
               ups04AlarmUpsSystemOff, ups04AlarmGeneralFault,
               ups04AlarmDiagnosticTestFailed,
               ups04AlarmCommunicationsLost, ups04AlarmShutdownPending,
               and ups04AlarmTestInProgress."

       OBJECT     ups04TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups04TestNoTestsInitiated,
               ups04TestGeneralSystemsTest, and
               ups04TestQuickBatteryTest."

       OBJECT     ups04OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups04FullBypassGroup
           DESCRIPTION
               "The ups04FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups04ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups04Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups04Groups             OBJECT IDENTIFIER ::= { ups04Conformance 2 }

   ups04SubsetGroups       OBJECT IDENTIFIER ::= { ups04Groups 1 }

   ups04SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups04IdentManufacturer, ups04IdentModel,
                 ups04IdentAgentSoftwareVersion, ups04IdentName,
                 ups04IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups04SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups04SubsetGroups 1 }

   ups04SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups04BatteryStatus, ups04SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups04SubsetGroups 2 }

   ups04SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups04InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups04SubsetGroups 3 }

   ups04SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups04OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups04SubsetGroups 4 }


   -- { ups04SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups04SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups04AlarmsPresent, ups04AlarmDescr, ups04AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups04SubsetGroups 6 }

   -- { ups04SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups04SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups04ShutdownType, ups04ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups04SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups04SubsetGroups 8 }

   ups04BasicGroups        OBJECT IDENTIFIER ::= { ups04Groups 2 }

   ups04BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups04IdentManufacturer, ups04IdentModel,
                 ups04IdentUPSSoftwareVersion,
                 ups04IdentAgentSoftwareVersion, ups04IdentName }
       STATUS  current
       DESCRIPTION
               "The ups04BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 1 }

   ups04BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups04BatteryStatus, ups04SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups04BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 2 }

   ups04BasicInputGroup OBJECT-GROUP
       OBJECTS { ups04InputLineBads, ups04InputNumLines,
                 ups04InputFrequency, ups04InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups04BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 3 }

   ups04BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups04OutputSource, ups04OutputFrequency,
                 ups04OutputNumLines, ups04OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups04BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 4 }

   ups04BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups04BypassFrequency, ups04BypassNumLines,
                 ups04BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups04BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 5 }

   ups04BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups04AlarmsPresent, ups04AlarmDescr, ups04AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups04BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 6 }

   ups04BasicTestGroup OBJECT-GROUP
       OBJECTS { ups04TestId, ups04TestSpinLock,
                 ups04TestResultsSummary, ups04TestResultsDetail,
                 ups04TestStartTime, ups04TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups04BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 7 }

   ups04BasicControlGroup OBJECT-GROUP
       OBJECTS { ups04ShutdownType, ups04ShutdownAfterDelay,
                 ups04StartupAfterDelay, ups04RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups04BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups04BasicGroups 8 }

   ups04FullGroups         OBJECT IDENTIFIER ::= { ups04Groups 3 }

   ups04FullIdentGroup OBJECT-GROUP
       OBJECTS { ups04IdentManufacturer, ups04IdentModel,
                 ups04IdentUPSSoftwareVersion,
                 ups04IdentAgentSoftwareVersion, ups04IdentName,
                 ups04IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups04FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups04FullGroups 1 }

   ups04FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups04BatteryStatus, ups04SecondsOnBattery,
                 ups04EstimatedMinutesRemaining,
                 ups04EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups04FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups04FullGroups 2 }

   ups04FullInputGroup OBJECT-GROUP
       OBJECTS { ups04InputLineBads, ups04InputNumLines,
                 ups04InputFrequency, ups04InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups04FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups04FullGroups 3 }

   ups04FullOutputGroup OBJECT-GROUP
       OBJECTS { ups04OutputSource, ups04OutputFrequency,
                 ups04OutputNumLines, ups04OutputVoltage,
                 ups04OutputCurrent, ups04OutputPower,
                 ups04OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups04FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups04FullGroups 4 }

   ups04FullBypassGroup OBJECT-GROUP
       OBJECTS { ups04BypassFrequency, ups04BypassNumLines,
                 ups04BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups04FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups04FullGroups 5 }

   ups04FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups04AlarmsPresent, ups04AlarmDescr, ups04AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups04FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups04FullGroups 6 }

   ups04FullTestGroup OBJECT-GROUP
       OBJECTS { ups04TestId, ups04TestSpinLock,
                 ups04TestResultsSummary, ups04TestResultsDetail,
                 ups04TestStartTime, ups04TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups04FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups04FullGroups 7 }

   ups04FullControlGroup OBJECT-GROUP
       OBJECTS { ups04ShutdownType, ups04ShutdownAfterDelay,
                 ups04StartupAfterDelay, ups04RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups04FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups04FullGroups 8 }

   --*******************************************************************
   --
   -- Module 5 data
   --

   upsModule5           OBJECT IDENTIFIER ::= { upsModular 6 }
   ups05Objects           OBJECT IDENTIFIER ::= { upsModule5 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups05IdentName and
   --      ups05IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups05Ident              OBJECT IDENTIFIER ::= { ups05Objects 1 }

   ups05IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups05Ident 1 }

   ups05IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups05Ident 2 }

   ups05IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups05IdentAgentSoftwareVersion in some implementations."
       ::= { ups05Ident 3 }

   ups05IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups05IdentUPSSoftwareVersion in some implementations."
       ::= { ups05Ident 4 }

   ups05IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups05Ident 5 }

   ups05IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups05Ident 6 }


   --
   -- Battery Group
   --

   ups05Battery            OBJECT IDENTIFIER ::= { ups05Objects 2 }

   ups05BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups05ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups05ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups05Battery 1 }

   ups05SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups05Battery 2 }

   ups05EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups05Battery 3 }

   ups05EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups05Battery 4 }

   ups05BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups05Battery 5 }

   ups05BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups05Battery 6 }

   ups05BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups05Battery 7 }


   --
   -- Input Group
   --

   ups05Input              OBJECT IDENTIFIER ::= { ups05Objects 3 }

   ups05InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups05Input 1 }


   ups05InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups05Input 2 }

   ups05InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups05InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups05InputNumLines."
       ::= { ups05Input 3 }

   ups05InputEntry OBJECT-TYPE
       SYNTAX     Ups05InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups05InputLineIndex }
       ::= { ups05InputTable 1 }

   Ups05InputEntry ::= SEQUENCE {
       ups05InputLineIndex   PositiveInteger,
       ups05InputFrequency   NonNegativeInteger,
       ups05InputVoltage     NonNegativeInteger,
       ups05InputCurrent     NonNegativeInteger,
       ups05InputTruePower   NonNegativeInteger
   }

   ups05InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups05InputEntry 1 }

   ups05InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups05InputEntry 2 }

   ups05InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups05InputEntry 3 }

   ups05InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups05InputEntry 4 }

   ups05InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups05InputEntry 5 }


   --
   -- The Output group.
   --

   ups05Output             OBJECT IDENTIFIER ::= { ups05Objects 4 }

   ups05OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups05Output 1 }

   ups05OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups05Output 2 }

   ups05OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups05Output 3 }

   ups05OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups05OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups05OutputNumLines."
       ::= { ups05Output 4 }

   ups05OutputEntry OBJECT-TYPE
       SYNTAX     Ups05OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups05OutputLineIndex }
       ::= { ups05OutputTable 1 }

   Ups05OutputEntry ::= SEQUENCE {
       ups05OutputLineIndex   PositiveInteger,
       ups05OutputVoltage     NonNegativeInteger,
       ups05OutputCurrent     NonNegativeInteger,
       ups05OutputPower       NonNegativeInteger,
       ups05OutputPercentLoad INTEGER
   }

   ups05OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups05OutputEntry 1 }

   ups05OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups05OutputEntry 2 }

   ups05OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups05OutputEntry 3 }

   ups05OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups05OutputEntry 4 }

   ups05OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups05OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups05Bypass             OBJECT IDENTIFIER ::= { ups05Objects 5 }

   ups05BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups05Bypass 1 }

   ups05BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups05Bypass 2 }

   ups05BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups05BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups05BypassNumLines."
       ::= { ups05Bypass 3 }

   ups05BypassEntry OBJECT-TYPE
       SYNTAX     Ups05BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups05BypassLineIndex }
       ::= { ups05BypassTable 1 }

   Ups05BypassEntry ::= SEQUENCE {
       ups05BypassLineIndex  PositiveInteger,
       ups05BypassVoltage    NonNegativeInteger,
       ups05BypassCurrent    NonNegativeInteger,
       ups05BypassPower      NonNegativeInteger
   }

   ups05BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups05BypassEntry 1 }

   ups05BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups05BypassEntry 2 }

   ups05BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups05BypassEntry 3 }

   ups05BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups05BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups05Alarm              OBJECT IDENTIFIER ::= { ups05Objects 6 }

   ups05AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups05Alarm 1 }

   ups05AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups05AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups05AlarmId equal to 1, and increments the value of
               ups05AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups05AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups05AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups05AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups05AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups05AlarmsPresent."
       ::= { ups05Alarm 2 }

   ups05AlarmEntry OBJECT-TYPE
       SYNTAX     Ups05AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups05AlarmId }
       ::= { ups05AlarmTable 1 }

   Ups05AlarmEntry ::= SEQUENCE {
       ups05AlarmId          PositiveInteger,
       ups05AlarmDescr       AutonomousType,
       ups05AlarmTime        TimeStamp
   }

   ups05AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups05AlarmEntry 1 }

   ups05AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups05AlarmEntry 2 }

   ups05AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups05AlarmTime shall equal
               0."
       ::= { ups05AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups05WellKnownAlarms    OBJECT IDENTIFIER ::= { ups05Alarm 3 }
   ups05AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups05WellKnownAlarms  1 }

   ups05AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups05WellKnownAlarms  2 }

   ups05AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups05ConfigLowBattTime."
       ::= { ups05WellKnownAlarms  3 }


   ups05AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups05WellKnownAlarms  4 }

   ups05AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups05WellKnownAlarms  5 }

   ups05AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups05WellKnownAlarms  6 }

   ups05AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups05WellKnownAlarms  7 }

   ups05AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups05WellKnownAlarms  8 }

   ups05AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups05WellKnownAlarms  9 }

   ups05AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups05WellKnownAlarms 10 }

   ups05AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups05WellKnownAlarms 11 }

   ups05AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups05WellKnownAlarms 12 }

   ups05AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups05WellKnownAlarms 13 }

   ups05AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups05WellKnownAlarms 14 }

   ups05AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups05WellKnownAlarms 15 }

   ups05AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups05WellKnownAlarms 16 }

   ups05AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups05WellKnownAlarms 17 }

   ups05AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups05WellKnownAlarms 18 }

   ups05AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups05WellKnownAlarms 19 }

   ups05AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups05WellKnownAlarms 20 }

   ups05AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups05WellKnownAlarms 21 }

   ups05AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups05ShutdownAfterDelay countdown is underway."
       ::= { ups05WellKnownAlarms 22 }

   ups05AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups05WellKnownAlarms 23 }

   ups05AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups05WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups05Test               OBJECT IDENTIFIER ::= { ups05Objects 7 }

   ups05TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups05TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups05TestResultsSummary. Tests in progress may be
               aborted by setting the ups05TestId variable to
               ups05TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups05TestNoTestsInitiated is returned."
       ::= { ups05Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups05TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups05TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups05TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups05TestResultsSummary */
                     get (upsTestSpinLock, ups05TestResultsSummary,
               ups05TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups05TestResultsSummary,
               ups05TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups05TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups05TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups05Test 2 }

   ups05TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups05TestId to ups05TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups05Test 3 }

   ups05TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups05TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups05Test 4 }

   ups05TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups05TestResultsSummary is noTestsInitiated(6),
               ups05TestStartTime has the value 0."
       ::= { ups05Test 5 }

   ups05TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups05TestResultsSummary is noTestsInitiated(6),
               ups05TestElapsedTime has the value 0."
       ::= { ups05Test 6 }

   --
   -- Well known tests.
   --

   ups05WellKnownTests     OBJECT IDENTIFIER ::= { ups05Test 7 }


   ups05TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups05WellKnownTests  1 }

   ups05TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups05WellKnownTests  2 }

   ups05TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups05WellKnownTests  3 }

   ups05TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups05WellKnownTests  4 }

   ups05TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups05WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups05Control            OBJECT IDENTIFIER ::= { ups05Objects 8 }

   ups05ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups05ShutdownAfterDelay and ups05RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups05Control 1 }

   ups05ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups05ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups05ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups05ShutdownType =
               output and the output is already off.  When read,
               ups05ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups05ShutdownAfterDelay already in effect."
       ::= { ups05Control 2 }

   ups05StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups05StartupAfterDelay
               countdown or ups05RebootWithDuration countdown in
               progress.  When read, ups05StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups05Control 3 }

   ups05RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups05ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups05RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups05Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups05Traps              OBJECT IDENTIFIER ::= { upsModule5 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups05TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups05EstimatedMinutesRemaining, ups05SecondsOnBattery,
                 ups05ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups05Traps 1 }

   ups05TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups05TestId, ups05TestSpinLock,
                 ups05TestResultsSummary, ups05TestResultsDetail,
                 ups05TestStartTime, ups05TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups05Traps 2 }

   ups05TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups05AlarmId, ups05AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups05AlarmOnBattery and
               ups05AlarmTestInProgress."
     ::= { ups05Traps 3 }

   ups05TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups05AlarmId, ups05AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups05AlarmTestInProgress."
     ::= { ups05Traps 4 }


   --
   -- conformance information
   --
   ups05Conformance        OBJECT IDENTIFIER ::= { upsModule5 3 }

   ups05Compliances        OBJECT IDENTIFIER ::= { ups05Conformance 1 }


   --
   -- compliance statements
   --

   ups05SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups05SubsetIdentGroup,
                     ups05SubsetBatteryGroup, ups05SubsetInputGroup,
                     ups05SubsetOutputGroup, ups05SubsetAlarmGroup,
                     ups05SubsetControlGroup }

       OBJECT     ups05BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups05AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups05AlarmOnBattery, ups05AlarmLowBattery,
               ups05AlarmInputBad, ups05AlarmUpsOutputOff,
               ups05AlarmUpsSystemOff, and ups05AlarmTestInProgress."

       OBJECT     ups05OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups05ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups05Compliances 1 }

   ups05BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups05BasicIdentGroup,
                     ups05BasicBatteryGroup, ups05BasicInputGroup,
                     ups05BasicOutputGroup, ups05BasicAlarmGroup,
                     ups05BasicTestGroup, ups05BasicControlGroup }


       OBJECT     ups05AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups05AlarmOnBattery, ups05AlarmLowBattery,
               ups05AlarmDepletedBattery, ups05AlarmTempBad,
               ups05AlarmInputBad, ups05AlarmOutputOverload,
               ups05AlarmOnBypass, ups05AlarmBypassBad,
               ups05AlarmOutputOffAsRequested,
               ups05AlarmUpsOffAsRequested, ups05AlarmUpsOutputOff,
               ups05AlarmUpsSystemOff, ups05AlarmGeneralFault,
               ups05AlarmDiagnosticTestFailed,
               ups05AlarmCommunicationsLost, ups05AlarmShutdownPending,
               and ups05AlarmTestInProgress."

       OBJECT     ups05TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups05TestNoTestsInitiated."

       OBJECT     ups05OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups05BasicBypassGroup
           DESCRIPTION
               "The ups05BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups05ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups05Compliances 2 }

   ups05FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups05FullIdentGroup, ups05FullBatteryGroup,
                     ups05FullInputGroup, ups05FullOutputGroup,
                     ups05FullAlarmGroup, ups05FullTestGroup,
                     ups05FullControlGroup }

       OBJECT     ups05AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups05AlarmBatteryBad, ups05AlarmOnBattery,
               ups05AlarmLowBattery, ups05AlarmDepletedBattery,
               ups05AlarmTempBad, ups05AlarmInputBad, upsAlarmOnBypass,
               ups05AlarmBypassBad, ups05AlarmOutputOffAsRequested,
               ups05AlarmUpsOffAsRequested, ups05AlarmUpsOutputOff,
               ups05AlarmUpsSystemOff, ups05AlarmGeneralFault,
               ups05AlarmDiagnosticTestFailed,
               ups05AlarmCommunicationsLost, ups05AlarmShutdownPending,
               and ups05AlarmTestInProgress."

       OBJECT     ups05TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups05TestNoTestsInitiated,
               ups05TestGeneralSystemsTest, and
               ups05TestQuickBatteryTest."

       OBJECT     ups05OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups05FullBypassGroup
           DESCRIPTION
               "The ups05FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups05ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups05Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups05Groups             OBJECT IDENTIFIER ::= { ups05Conformance 2 }

   ups05SubsetGroups       OBJECT IDENTIFIER ::= { ups05Groups 1 }

   ups05SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups05IdentManufacturer, ups05IdentModel,
                 ups05IdentAgentSoftwareVersion, ups05IdentName,
                 ups05IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups05SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups05SubsetGroups 1 }

   ups05SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups05BatteryStatus, ups05SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups05SubsetGroups 2 }

   ups05SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups05InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups05SubsetGroups 3 }

   ups05SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups05OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups05SubsetGroups 4 }


   -- { ups05SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups05SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups05AlarmsPresent, ups05AlarmDescr, ups05AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups05SubsetGroups 6 }

   -- { ups05SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups05SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups05ShutdownType, ups05ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups05SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups05SubsetGroups 8 }

   ups05BasicGroups        OBJECT IDENTIFIER ::= { ups05Groups 2 }

   ups05BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups05IdentManufacturer, ups05IdentModel,
                 ups05IdentUPSSoftwareVersion,
                 ups05IdentAgentSoftwareVersion, ups05IdentName }
       STATUS  current
       DESCRIPTION
               "The ups05BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 1 }

   ups05BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups05BatteryStatus, ups05SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups05BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 2 }

   ups05BasicInputGroup OBJECT-GROUP
       OBJECTS { ups05InputLineBads, ups05InputNumLines,
                 ups05InputFrequency, ups05InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups05BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 3 }

   ups05BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups05OutputSource, ups05OutputFrequency,
                 ups05OutputNumLines, ups05OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups05BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 4 }

   ups05BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups05BypassFrequency, ups05BypassNumLines,
                 ups05BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups05BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 5 }

   ups05BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups05AlarmsPresent, ups05AlarmDescr, ups05AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups05BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 6 }

   ups05BasicTestGroup OBJECT-GROUP
       OBJECTS { ups05TestId, ups05TestSpinLock,
                 ups05TestResultsSummary, ups05TestResultsDetail,
                 ups05TestStartTime, ups05TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups05BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 7 }

   ups05BasicControlGroup OBJECT-GROUP
       OBJECTS { ups05ShutdownType, ups05ShutdownAfterDelay,
                 ups05StartupAfterDelay, ups05RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups05BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups05BasicGroups 8 }

   ups05FullGroups         OBJECT IDENTIFIER ::= { ups05Groups 3 }

   ups05FullIdentGroup OBJECT-GROUP
       OBJECTS { ups05IdentManufacturer, ups05IdentModel,
                 ups05IdentUPSSoftwareVersion,
                 ups05IdentAgentSoftwareVersion, ups05IdentName,
                 ups05IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups05FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups05FullGroups 1 }

   ups05FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups05BatteryStatus, ups05SecondsOnBattery,
                 ups05EstimatedMinutesRemaining,
                 ups05EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups05FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups05FullGroups 2 }

   ups05FullInputGroup OBJECT-GROUP
       OBJECTS { ups05InputLineBads, ups05InputNumLines,
                 ups05InputFrequency, ups05InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups05FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups05FullGroups 3 }

   ups05FullOutputGroup OBJECT-GROUP
       OBJECTS { ups05OutputSource, ups05OutputFrequency,
                 ups05OutputNumLines, ups05OutputVoltage,
                 ups05OutputCurrent, ups05OutputPower,
                 ups05OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups05FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups05FullGroups 4 }

   ups05FullBypassGroup OBJECT-GROUP
       OBJECTS { ups05BypassFrequency, ups05BypassNumLines,
                 ups05BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups05FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups05FullGroups 5 }

   ups05FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups05AlarmsPresent, ups05AlarmDescr, ups05AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups05FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups05FullGroups 6 }

   ups05FullTestGroup OBJECT-GROUP
       OBJECTS { ups05TestId, ups05TestSpinLock,
                 ups05TestResultsSummary, ups05TestResultsDetail,
                 ups05TestStartTime, ups05TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups05FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups05FullGroups 7 }

   ups05FullControlGroup OBJECT-GROUP
       OBJECTS { ups05ShutdownType, ups05ShutdownAfterDelay,
                 ups05StartupAfterDelay, ups05RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups05FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups05FullGroups 8 }

   --*******************************************************************
   --
   -- Module 6 data
   --

   upsModule6           OBJECT IDENTIFIER ::= { upsModular 7 }
   ups06Objects           OBJECT IDENTIFIER ::= { upsModule6 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups06IdentName and
   --      ups06IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups06Ident              OBJECT IDENTIFIER ::= { ups06Objects 1 }

   ups06IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups06Ident 1 }

   ups06IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups06Ident 2 }

   ups06IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups06IdentAgentSoftwareVersion in some implementations."
       ::= { ups06Ident 3 }

   ups06IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups06IdentUPSSoftwareVersion in some implementations."
       ::= { ups06Ident 4 }

   ups06IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups06Ident 5 }

   ups06IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups06Ident 6 }


   --
   -- Battery Group
   --

   ups06Battery            OBJECT IDENTIFIER ::= { ups06Objects 2 }

   ups06BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups06ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups06ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups06Battery 1 }

   ups06SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups06Battery 2 }

   ups06EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups06Battery 3 }

   ups06EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups06Battery 4 }

   ups06BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups06Battery 5 }

   ups06BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups06Battery 6 }

   ups06BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups06Battery 7 }


   --
   -- Input Group
   --

   ups06Input              OBJECT IDENTIFIER ::= { ups06Objects 3 }

   ups06InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups06Input 1 }


   ups06InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups06Input 2 }

   ups06InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups06InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups06InputNumLines."
       ::= { ups06Input 3 }

   ups06InputEntry OBJECT-TYPE
       SYNTAX     Ups06InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups06InputLineIndex }
       ::= { ups06InputTable 1 }

   Ups06InputEntry ::= SEQUENCE {
       ups06InputLineIndex   PositiveInteger,
       ups06InputFrequency   NonNegativeInteger,
       ups06InputVoltage     NonNegativeInteger,
       ups06InputCurrent     NonNegativeInteger,
       ups06InputTruePower   NonNegativeInteger
   }

   ups06InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups06InputEntry 1 }

   ups06InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups06InputEntry 2 }

   ups06InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups06InputEntry 3 }

   ups06InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups06InputEntry 4 }

   ups06InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups06InputEntry 5 }


   --
   -- The Output group.
   --

   ups06Output             OBJECT IDENTIFIER ::= { ups06Objects 4 }

   ups06OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups06Output 1 }

   ups06OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups06Output 2 }

   ups06OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups06Output 3 }

   ups06OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups06OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups06OutputNumLines."
       ::= { ups06Output 4 }

   ups06OutputEntry OBJECT-TYPE
       SYNTAX     Ups06OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups06OutputLineIndex }
       ::= { ups06OutputTable 1 }

   Ups06OutputEntry ::= SEQUENCE {
       ups06OutputLineIndex   PositiveInteger,
       ups06OutputVoltage     NonNegativeInteger,
       ups06OutputCurrent     NonNegativeInteger,
       ups06OutputPower       NonNegativeInteger,
       ups06OutputPercentLoad INTEGER
   }

   ups06OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups06OutputEntry 1 }

   ups06OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups06OutputEntry 2 }

   ups06OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups06OutputEntry 3 }

   ups06OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups06OutputEntry 4 }

   ups06OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups06OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups06Bypass             OBJECT IDENTIFIER ::= { ups06Objects 5 }

   ups06BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups06Bypass 1 }

   ups06BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups06Bypass 2 }

   ups06BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups06BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups06BypassNumLines."
       ::= { ups06Bypass 3 }

   ups06BypassEntry OBJECT-TYPE
       SYNTAX     Ups06BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups06BypassLineIndex }
       ::= { ups06BypassTable 1 }

   Ups06BypassEntry ::= SEQUENCE {
       ups06BypassLineIndex  PositiveInteger,
       ups06BypassVoltage    NonNegativeInteger,
       ups06BypassCurrent    NonNegativeInteger,
       ups06BypassPower      NonNegativeInteger
   }

   ups06BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups06BypassEntry 1 }

   ups06BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups06BypassEntry 2 }

   ups06BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups06BypassEntry 3 }

   ups06BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups06BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups06Alarm              OBJECT IDENTIFIER ::= { ups06Objects 6 }

   ups06AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups06Alarm 1 }

   ups06AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups06AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups06AlarmId equal to 1, and increments the value of
               ups06AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups06AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups06AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups06AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups06AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups06AlarmsPresent."
       ::= { ups06Alarm 2 }

   ups06AlarmEntry OBJECT-TYPE
       SYNTAX     Ups06AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups06AlarmId }
       ::= { ups06AlarmTable 1 }

   Ups06AlarmEntry ::= SEQUENCE {
       ups06AlarmId          PositiveInteger,
       ups06AlarmDescr       AutonomousType,
       ups06AlarmTime        TimeStamp
   }

   ups06AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups06AlarmEntry 1 }

   ups06AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups06AlarmEntry 2 }

   ups06AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups06AlarmTime shall equal
               0."
       ::= { ups06AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups06WellKnownAlarms    OBJECT IDENTIFIER ::= { ups06Alarm 3 }
   ups06AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups06WellKnownAlarms  1 }

   ups06AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups06WellKnownAlarms  2 }

   ups06AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups06ConfigLowBattTime."
       ::= { ups06WellKnownAlarms  3 }


   ups06AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups06WellKnownAlarms  4 }

   ups06AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups06WellKnownAlarms  5 }

   ups06AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups06WellKnownAlarms  6 }

   ups06AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups06WellKnownAlarms  7 }

   ups06AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups06WellKnownAlarms  8 }

   ups06AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups06WellKnownAlarms  9 }

   ups06AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups06WellKnownAlarms 10 }

   ups06AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups06WellKnownAlarms 11 }

   ups06AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups06WellKnownAlarms 12 }

   ups06AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups06WellKnownAlarms 13 }

   ups06AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups06WellKnownAlarms 14 }

   ups06AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups06WellKnownAlarms 15 }

   ups06AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups06WellKnownAlarms 16 }

   ups06AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups06WellKnownAlarms 17 }

   ups06AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups06WellKnownAlarms 18 }

   ups06AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups06WellKnownAlarms 19 }

   ups06AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups06WellKnownAlarms 20 }

   ups06AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups06WellKnownAlarms 21 }

   ups06AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups06ShutdownAfterDelay countdown is underway."
       ::= { ups06WellKnownAlarms 22 }

   ups06AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups06WellKnownAlarms 23 }

   ups06AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups06WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups06Test               OBJECT IDENTIFIER ::= { ups06Objects 7 }

   ups06TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups06TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups06TestResultsSummary. Tests in progress may be
               aborted by setting the ups06TestId variable to
               ups06TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups06TestNoTestsInitiated is returned."
       ::= { ups06Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups06TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups06TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups06TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups06TestResultsSummary */
                     get (upsTestSpinLock, ups06TestResultsSummary,
               ups06TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups06TestResultsSummary,
               ups06TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups06TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups06TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups06Test 2 }

   ups06TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups06TestId to ups06TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups06Test 3 }

   ups06TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups06TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups06Test 4 }

   ups06TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups06TestResultsSummary is noTestsInitiated(6),
               ups06TestStartTime has the value 0."
       ::= { ups06Test 5 }

   ups06TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups06TestResultsSummary is noTestsInitiated(6),
               ups06TestElapsedTime has the value 0."
       ::= { ups06Test 6 }

   --
   -- Well known tests.
   --

   ups06WellKnownTests     OBJECT IDENTIFIER ::= { ups06Test 7 }


   ups06TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups06WellKnownTests  1 }

   ups06TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups06WellKnownTests  2 }

   ups06TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups06WellKnownTests  3 }

   ups06TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups06WellKnownTests  4 }

   ups06TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups06WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups06Control            OBJECT IDENTIFIER ::= { ups06Objects 8 }

   ups06ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups06ShutdownAfterDelay and ups06RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups06Control 1 }

   ups06ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups06ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups06ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups06ShutdownType =
               output and the output is already off.  When read,
               ups06ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups06ShutdownAfterDelay already in effect."
       ::= { ups06Control 2 }

   ups06StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups06StartupAfterDelay
               countdown or ups06RebootWithDuration countdown in
               progress.  When read, ups06StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups06Control 3 }

   ups06RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups06ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups06RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups06Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups06Traps              OBJECT IDENTIFIER ::= { upsModule6 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups06TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups06EstimatedMinutesRemaining, ups06SecondsOnBattery,
                 ups06ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups06Traps 1 }

   ups06TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups06TestId, ups06TestSpinLock,
                 ups06TestResultsSummary, ups06TestResultsDetail,
                 ups06TestStartTime, ups06TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups06Traps 2 }

   ups06TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups06AlarmId, ups06AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups06AlarmOnBattery and
               ups06AlarmTestInProgress."
     ::= { ups06Traps 3 }

   ups06TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups06AlarmId, ups06AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups06AlarmTestInProgress."
     ::= { ups06Traps 4 }


   --
   -- conformance information
   --
   ups06Conformance        OBJECT IDENTIFIER ::= { upsModule6 3 }

   ups06Compliances        OBJECT IDENTIFIER ::= { ups06Conformance 1 }


   --
   -- compliance statements
   --

   ups06SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups06SubsetIdentGroup,
                     ups06SubsetBatteryGroup, ups06SubsetInputGroup,
                     ups06SubsetOutputGroup, ups06SubsetAlarmGroup,
                     ups06SubsetControlGroup }

       OBJECT     ups06BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups06AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups06AlarmOnBattery, ups06AlarmLowBattery,
               ups06AlarmInputBad, ups06AlarmUpsOutputOff,
               ups06AlarmUpsSystemOff, and ups06AlarmTestInProgress."

       OBJECT     ups06OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups06ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups06Compliances 1 }

   ups06BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups06BasicIdentGroup,
                     ups06BasicBatteryGroup, ups06BasicInputGroup,
                     ups06BasicOutputGroup, ups06BasicAlarmGroup,
                     ups06BasicTestGroup, ups06BasicControlGroup }


       OBJECT     ups06AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups06AlarmOnBattery, ups06AlarmLowBattery,
               ups06AlarmDepletedBattery, ups06AlarmTempBad,
               ups06AlarmInputBad, ups06AlarmOutputOverload,
               ups06AlarmOnBypass, ups06AlarmBypassBad,
               ups06AlarmOutputOffAsRequested,
               ups06AlarmUpsOffAsRequested, ups06AlarmUpsOutputOff,
               ups06AlarmUpsSystemOff, ups06AlarmGeneralFault,
               ups06AlarmDiagnosticTestFailed,
               ups06AlarmCommunicationsLost, ups06AlarmShutdownPending,
               and ups06AlarmTestInProgress."

       OBJECT     ups06TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups06TestNoTestsInitiated."

       OBJECT     ups06OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups06BasicBypassGroup
           DESCRIPTION
               "The ups06BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups06ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups06Compliances 2 }

   ups06FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups06FullIdentGroup, ups06FullBatteryGroup,
                     ups06FullInputGroup, ups06FullOutputGroup,
                     ups06FullAlarmGroup, ups06FullTestGroup,
                     ups06FullControlGroup }

       OBJECT     ups06AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups06AlarmBatteryBad, ups06AlarmOnBattery,
               ups06AlarmLowBattery, ups06AlarmDepletedBattery,
               ups06AlarmTempBad, ups06AlarmInputBad, ups06AlarmOnBypass,
               ups06AlarmBypassBad, ups06AlarmOutputOffAsRequested,
               ups06AlarmUpsOffAsRequested, ups06AlarmUpsOutputOff,
               ups06AlarmUpsSystemOff, ups06AlarmGeneralFault,
               ups06AlarmDiagnosticTestFailed,
               ups06AlarmCommunicationsLost, ups06AlarmShutdownPending,
               and ups06AlarmTestInProgress."

       OBJECT     ups06TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups06TestNoTestsInitiated,
               ups06TestGeneralSystemsTest, and
               ups06TestQuickBatteryTest."

       OBJECT     ups06OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups06FullBypassGroup
           DESCRIPTION
               "The ups06FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups06ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups06Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups06Groups             OBJECT IDENTIFIER ::= { ups06Conformance 2 }

   ups06SubsetGroups       OBJECT IDENTIFIER ::= { ups06Groups 1 }

   ups06SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups06IdentManufacturer, ups06IdentModel,
                 ups06IdentAgentSoftwareVersion, ups06IdentName,
                 ups06IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups06SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups06SubsetGroups 1 }

   ups06SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups06BatteryStatus, ups06SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups06SubsetGroups 2 }

   ups06SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups06InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups06SubsetGroups 3 }

   ups06SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups06OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups06SubsetGroups 4 }


   -- { ups06SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups06SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups06AlarmsPresent, ups06AlarmDescr, ups06AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups06SubsetGroups 6 }

   -- { ups06SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups06SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups06ShutdownType, ups06ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups06SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups06SubsetGroups 8 }

   ups06BasicGroups        OBJECT IDENTIFIER ::= { ups06Groups 2 }

   ups06BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups06IdentManufacturer, ups06IdentModel,
                 ups06IdentUPSSoftwareVersion,
                 ups06IdentAgentSoftwareVersion, ups06IdentName }
       STATUS  current
       DESCRIPTION
               "The ups06BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 1 }

   ups06BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups06BatteryStatus, ups06SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups06BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 2 }

   ups06BasicInputGroup OBJECT-GROUP
       OBJECTS { ups06InputLineBads, ups06InputNumLines,
                 ups06InputFrequency, ups06InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups06BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 3 }

   ups06BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups06OutputSource, ups06OutputFrequency,
                 ups06OutputNumLines, ups06OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups06BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 4 }

   ups06BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups06BypassFrequency, ups06BypassNumLines,
                 ups06BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups06BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 5 }

   ups06BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups06AlarmsPresent, ups06AlarmDescr, ups06AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups06BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 6 }

   ups06BasicTestGroup OBJECT-GROUP
       OBJECTS { ups06TestId, ups06TestSpinLock,
                 ups06TestResultsSummary, ups06TestResultsDetail,
                 ups06TestStartTime, ups06TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups06BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 7 }

   ups06BasicControlGroup OBJECT-GROUP
       OBJECTS { ups06ShutdownType, ups06ShutdownAfterDelay,
                 ups06StartupAfterDelay, ups06RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups06BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups06BasicGroups 8 }

   ups06FullGroups         OBJECT IDENTIFIER ::= { ups06Groups 3 }

   ups06FullIdentGroup OBJECT-GROUP
       OBJECTS { ups06IdentManufacturer, ups06IdentModel,
                 ups06IdentUPSSoftwareVersion,
                 ups06IdentAgentSoftwareVersion, ups06IdentName,
                 ups06IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups06FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups06FullGroups 1 }

   ups06FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups06BatteryStatus, ups06SecondsOnBattery,
                 ups06EstimatedMinutesRemaining,
                 ups06EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups06FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups06FullGroups 2 }

   ups06FullInputGroup OBJECT-GROUP
       OBJECTS { ups06InputLineBads, ups06InputNumLines,
                 ups06InputFrequency, ups06InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups06FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups06FullGroups 3 }

   ups06FullOutputGroup OBJECT-GROUP
       OBJECTS { ups06OutputSource, ups06OutputFrequency,
                 ups06OutputNumLines, ups06OutputVoltage,
                 ups06OutputCurrent, ups06OutputPower,
                 ups06OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups06FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups06FullGroups 4 }

   ups06FullBypassGroup OBJECT-GROUP
       OBJECTS { ups06BypassFrequency, ups06BypassNumLines,
                 ups06BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups06FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups06FullGroups 5 }

   ups06FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups06AlarmsPresent, ups06AlarmDescr, ups06AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups06FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups06FullGroups 6 }

   ups06FullTestGroup OBJECT-GROUP
       OBJECTS { ups06TestId, ups06TestSpinLock,
                 ups06TestResultsSummary, ups06TestResultsDetail,
                 ups06TestStartTime, ups06TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups06FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups06FullGroups 7 }

   ups06FullControlGroup OBJECT-GROUP
       OBJECTS { ups06ShutdownType, ups06ShutdownAfterDelay,
                 ups06StartupAfterDelay, ups06RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups06FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups06FullGroups 8 }

   --*******************************************************************
   --
   -- Module 7 data
   --

   upsModule7           OBJECT IDENTIFIER ::= { upsModular 8 }
   ups07Objects           OBJECT IDENTIFIER ::= { upsModule7 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups07IdentName and
   --      ups07IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups07Ident              OBJECT IDENTIFIER ::= { ups07Objects 1 }

   ups07IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups07Ident 1 }

   ups07IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups07Ident 2 }

   ups07IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups07IdentAgentSoftwareVersion in some implementations."
       ::= { ups07Ident 3 }

   ups07IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups07IdentUPSSoftwareVersion in some implementations."
       ::= { ups07Ident 4 }

   ups07IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups07Ident 5 }

   ups07IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups07Ident 6 }


   --
   -- Battery Group
   --

   ups07Battery            OBJECT IDENTIFIER ::= { ups07Objects 2 }

   ups07BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups07ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups07ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups07Battery 1 }

   ups07SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups07Battery 2 }

   ups07EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups07Battery 3 }

   ups07EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups07Battery 4 }

   ups07BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups07Battery 5 }

   ups07BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups07Battery 6 }

   ups07BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups07Battery 7 }


   --
   -- Input Group
   --

   ups07Input              OBJECT IDENTIFIER ::= { ups07Objects 3 }

   ups07InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups07Input 1 }


   ups07InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups07Input 2 }

   ups07InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups07InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups07InputNumLines."
       ::= { ups07Input 3 }

   ups07InputEntry OBJECT-TYPE
       SYNTAX     Ups07InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups07InputLineIndex }
       ::= { ups07InputTable 1 }

   Ups07InputEntry ::= SEQUENCE {
       ups07InputLineIndex   PositiveInteger,
       ups07InputFrequency   NonNegativeInteger,
       ups07InputVoltage     NonNegativeInteger,
       ups07InputCurrent     NonNegativeInteger,
       ups07InputTruePower   NonNegativeInteger
   }

   ups07InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups07InputEntry 1 }

   ups07InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups07InputEntry 2 }

   ups07InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups07InputEntry 3 }

   ups07InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups07InputEntry 4 }

   ups07InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups07InputEntry 5 }


   --
   -- The Output group.
   --

   ups07Output             OBJECT IDENTIFIER ::= { ups07Objects 4 }

   ups07OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups07Output 1 }

   ups07OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups07Output 2 }

   ups07OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups07Output 3 }

   ups07OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups07OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups07OutputNumLines."
       ::= { ups07Output 4 }

   ups07OutputEntry OBJECT-TYPE
       SYNTAX     Ups07OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups07OutputLineIndex }
       ::= { ups07OutputTable 1 }

   Ups07OutputEntry ::= SEQUENCE {
       ups07OutputLineIndex   PositiveInteger,
       ups07OutputVoltage     NonNegativeInteger,
       ups07OutputCurrent     NonNegativeInteger,
       ups07OutputPower       NonNegativeInteger,
       ups07OutputPercentLoad INTEGER
   }

   ups07OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups07OutputEntry 1 }

   ups07OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups07OutputEntry 2 }

   ups07OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups07OutputEntry 3 }

   ups07OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups07OutputEntry 4 }

   ups07OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups07OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups07Bypass             OBJECT IDENTIFIER ::= { ups07Objects 5 }

   ups07BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups07Bypass 1 }

   ups07BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups07Bypass 2 }

   ups07BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups07BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups07BypassNumLines."
       ::= { ups07Bypass 3 }

   ups07BypassEntry OBJECT-TYPE
       SYNTAX     Ups07BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups07BypassLineIndex }
       ::= { ups07BypassTable 1 }

   Ups07BypassEntry ::= SEQUENCE {
       ups07BypassLineIndex  PositiveInteger,
       ups07BypassVoltage    NonNegativeInteger,
       ups07BypassCurrent    NonNegativeInteger,
       ups07BypassPower      NonNegativeInteger
   }

   ups07BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups07BypassEntry 1 }

   ups07BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups07BypassEntry 2 }

   ups07BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups07BypassEntry 3 }

   ups07BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups07BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups07Alarm              OBJECT IDENTIFIER ::= { ups07Objects 6 }

   ups07AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups07Alarm 1 }

   ups07AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups07AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups07AlarmId equal to 1, and increments the value of
               ups07AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups07AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups07AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups07AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups07AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups07AlarmsPresent."
       ::= { ups07Alarm 2 }

   ups07AlarmEntry OBJECT-TYPE
       SYNTAX     Ups07AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups07AlarmId }
       ::= { ups07AlarmTable 1 }

   Ups07AlarmEntry ::= SEQUENCE {
       ups07AlarmId          PositiveInteger,
       ups07AlarmDescr       AutonomousType,
       ups07AlarmTime        TimeStamp
   }

   ups07AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups07AlarmEntry 1 }

   ups07AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups07AlarmEntry 2 }

   ups07AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups07AlarmTime shall equal
               0."
       ::= { ups07AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups07WellKnownAlarms    OBJECT IDENTIFIER ::= { ups07Alarm 3 }
   ups07AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups07WellKnownAlarms  1 }

   ups07AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups07WellKnownAlarms  2 }

   ups07AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups07ConfigLowBattTime."
       ::= { ups07WellKnownAlarms  3 }


   ups07AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups07WellKnownAlarms  4 }

   ups07AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups07WellKnownAlarms  5 }

   ups07AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups07WellKnownAlarms  6 }

   ups07AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups07WellKnownAlarms  7 }

   ups07AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups07WellKnownAlarms  8 }

   ups07AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups07WellKnownAlarms  9 }

   ups07AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups07WellKnownAlarms 10 }

   ups07AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups07WellKnownAlarms 11 }

   ups07AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups07WellKnownAlarms 12 }

   ups07AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups07WellKnownAlarms 13 }

   ups07AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups07WellKnownAlarms 14 }

   ups07AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups07WellKnownAlarms 15 }

   ups07AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups07WellKnownAlarms 16 }

   ups07AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups07WellKnownAlarms 17 }

   ups07AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups07WellKnownAlarms 18 }

   ups07AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups07WellKnownAlarms 19 }

   ups07AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups07WellKnownAlarms 20 }

   ups07AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups07WellKnownAlarms 21 }

   ups07AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups07ShutdownAfterDelay countdown is underway."
       ::= { ups07WellKnownAlarms 22 }

   ups07AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups07WellKnownAlarms 23 }

   ups07AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups07WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups07Test               OBJECT IDENTIFIER ::= { ups07Objects 7 }

   ups07TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups07TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups07TestResultsSummary. Tests in progress may be
               aborted by setting the ups07TestId variable to
               ups07TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups07TestNoTestsInitiated is returned."
       ::= { ups07Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups07TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups07TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups07TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups07TestResultsSummary */
                     get (upsTestSpinLock, ups07TestResultsSummary,
               ups07TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups07TestResultsSummary,
               ups07TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups07TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups07TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups07Test 2 }

   ups07TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups07TestId to ups07TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups07Test 3 }

   ups07TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups07TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups07Test 4 }

   ups07TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups07TestResultsSummary is noTestsInitiated(6),
               ups07TestStartTime has the value 0."
       ::= { ups07Test 5 }

   ups07TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups07TestResultsSummary is noTestsInitiated(6),
               ups07TestElapsedTime has the value 0."
       ::= { ups07Test 6 }

   --
   -- Well known tests.
   --

   ups07WellKnownTests     OBJECT IDENTIFIER ::= { ups07Test 7 }


   ups07TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups07WellKnownTests  1 }

   ups07TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups07WellKnownTests  2 }

   ups07TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups07WellKnownTests  3 }

   ups07TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups07WellKnownTests  4 }

   ups07TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups07WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups07Control            OBJECT IDENTIFIER ::= { ups07Objects 8 }

   ups07ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups07ShutdownAfterDelay and ups07RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups07Control 1 }

   ups07ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups07ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups07ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups07ShutdownType =
               output and the output is already off.  When read,
               ups07ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups07ShutdownAfterDelay already in effect."
       ::= { ups07Control 2 }

   ups07StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups07StartupAfterDelay
               countdown or ups07RebootWithDuration countdown in
               progress.  When read, ups07StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups07Control 3 }

   ups07RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups07ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups07RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups07Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups07Traps              OBJECT IDENTIFIER ::= { upsModule7 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups07TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups07EstimatedMinutesRemaining, ups07SecondsOnBattery,
                 ups07ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups07Traps 1 }

   ups07TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups07TestId, ups07TestSpinLock,
                 ups07TestResultsSummary, ups07TestResultsDetail,
                 ups07TestStartTime, ups07TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups07Traps 2 }

   ups07TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups07AlarmId, ups07AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups07AlarmOnBattery and
               ups07AlarmTestInProgress."
     ::= { ups07Traps 3 }

   ups07TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups07AlarmId, ups07AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups07AlarmTestInProgress."
     ::= { ups07Traps 4 }


   --
   -- conformance information
   --
   ups07Conformance        OBJECT IDENTIFIER ::= { upsModule7 3 }

   ups07Compliances        OBJECT IDENTIFIER ::= { ups07Conformance 1 }


   --
   -- compliance statements
   --

   ups07SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups07SubsetIdentGroup,
                     ups07SubsetBatteryGroup, ups07SubsetInputGroup,
                     ups07SubsetOutputGroup, ups07SubsetAlarmGroup,
                     ups07SubsetControlGroup }

       OBJECT     ups07BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups07AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups07AlarmOnBattery, ups07AlarmLowBattery,
               ups07AlarmInputBad, ups07AlarmUpsOutputOff,
               ups07AlarmUpsSystemOff, and ups07AlarmTestInProgress."

       OBJECT     ups07OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups07ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups07Compliances 1 }

   ups07BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups07BasicIdentGroup,
                     ups07BasicBatteryGroup, ups07BasicInputGroup,
                     ups07BasicOutputGroup, ups07BasicAlarmGroup,
                     ups07BasicTestGroup, ups07BasicControlGroup }


       OBJECT     ups07AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups07AlarmOnBattery, ups07AlarmLowBattery,
               ups07AlarmDepletedBattery, ups07AlarmTempBad,
               ups07AlarmInputBad, ups07AlarmOutputOverload,
               ups07AlarmOnBypass, ups07AlarmBypassBad,
               ups07AlarmOutputOffAsRequested,
               ups07AlarmUpsOffAsRequested, ups07AlarmUpsOutputOff,
               ups07AlarmUpsSystemOff, ups07AlarmGeneralFault,
               ups07AlarmDiagnosticTestFailed,
               ups07AlarmCommunicationsLost, ups07AlarmShutdownPending,
               and ups07AlarmTestInProgress."

       OBJECT     ups07TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups07TestNoTestsInitiated."

       OBJECT     ups07OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups07BasicBypassGroup
           DESCRIPTION
               "The ups07BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups07ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups07Compliances 2 }

   ups07FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups07FullIdentGroup, ups07FullBatteryGroup,
                     ups07FullInputGroup, ups07FullOutputGroup,
                     ups07FullAlarmGroup, ups07FullTestGroup,
                     ups07FullControlGroup }

       OBJECT     ups07AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups07AlarmBatteryBad, ups07AlarmOnBattery,
               ups07AlarmLowBattery, ups07AlarmDepletedBattery,
               ups07AlarmTempBad, ups07AlarmInputBad, ups07AlarmOnBypass,
               ups07AlarmBypassBad, ups07AlarmOutputOffAsRequested,
               ups07AlarmUpsOffAsRequested, ups07AlarmUpsOutputOff,
               ups07AlarmUpsSystemOff, ups07AlarmGeneralFault,
               ups07AlarmDiagnosticTestFailed,
               ups07AlarmCommunicationsLost, ups07AlarmShutdownPending,
               and ups07AlarmTestInProgress."

       OBJECT     ups07TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups07TestNoTestsInitiated,
               ups07TestGeneralSystemsTest, and
               ups07TestQuickBatteryTest."

       OBJECT     ups07OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups07FullBypassGroup
           DESCRIPTION
               "The ups07FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups07ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups07Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups07Groups             OBJECT IDENTIFIER ::= { ups07Conformance 2 }

   ups07SubsetGroups       OBJECT IDENTIFIER ::= { ups07Groups 1 }

   ups07SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups07IdentManufacturer, ups07IdentModel,
                 ups07IdentAgentSoftwareVersion, ups07IdentName,
                 ups07IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups07SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups07SubsetGroups 1 }

   ups07SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups07BatteryStatus, ups07SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups07SubsetGroups 2 }

   ups07SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups07InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups07SubsetGroups 3 }

   ups07SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups07OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups07SubsetGroups 4 }


   -- { ups07SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups07SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups07AlarmsPresent, ups07AlarmDescr, ups07AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups07SubsetGroups 6 }

   -- { ups07SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups07SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups07ShutdownType, ups07ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups07SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups07SubsetGroups 8 }

   ups07BasicGroups        OBJECT IDENTIFIER ::= { ups07Groups 2 }

   ups07BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups07IdentManufacturer, ups07IdentModel,
                 ups07IdentUPSSoftwareVersion,
                 ups07IdentAgentSoftwareVersion, ups07IdentName }
       STATUS  current
       DESCRIPTION
               "The ups07BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 1 }

   ups07BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups07BatteryStatus, ups07SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups07BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 2 }

   ups07BasicInputGroup OBJECT-GROUP
       OBJECTS { ups07InputLineBads, ups07InputNumLines,
                 ups07InputFrequency, ups07InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups07BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 3 }

   ups07BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups07OutputSource, ups07OutputFrequency,
                 ups07OutputNumLines, ups07OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups07BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 4 }

   ups07BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups07BypassFrequency, ups07BypassNumLines,
                 ups07BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups07BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 5 }

   ups07BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups07AlarmsPresent, ups07AlarmDescr, ups07AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups07BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 6 }

   ups07BasicTestGroup OBJECT-GROUP
       OBJECTS { ups07TestId, ups07TestSpinLock,
                 ups07TestResultsSummary, ups07TestResultsDetail,
                 ups07TestStartTime, ups07TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups07BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 7 }

   ups07BasicControlGroup OBJECT-GROUP
       OBJECTS { ups07ShutdownType, ups07ShutdownAfterDelay,
                 ups07StartupAfterDelay, ups07RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups07BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups07BasicGroups 8 }

   ups07FullGroups         OBJECT IDENTIFIER ::= { ups07Groups 3 }

   ups07FullIdentGroup OBJECT-GROUP
       OBJECTS { ups07IdentManufacturer, ups07IdentModel,
                 ups07IdentUPSSoftwareVersion,
                 ups07IdentAgentSoftwareVersion, ups07IdentName,
                 ups07IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups07FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups07FullGroups 1 }

   ups07FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups07BatteryStatus, ups07SecondsOnBattery,
                 ups07EstimatedMinutesRemaining,
                 ups07EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups07FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups07FullGroups 2 }

   ups07FullInputGroup OBJECT-GROUP
       OBJECTS { ups07InputLineBads, ups07InputNumLines,
                 ups07InputFrequency, ups07InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups07FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups07FullGroups 3 }

   ups07FullOutputGroup OBJECT-GROUP
       OBJECTS { ups07OutputSource, ups07OutputFrequency,
                 ups07OutputNumLines, ups07OutputVoltage,
                 ups07OutputCurrent, ups07OutputPower,
                 ups07OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups07FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups07FullGroups 4 }

   ups07FullBypassGroup OBJECT-GROUP
       OBJECTS { ups07BypassFrequency, ups07BypassNumLines,
                 ups07BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups07FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups07FullGroups 5 }

   ups07FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups07AlarmsPresent, ups07AlarmDescr, ups07AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups07FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups07FullGroups 6 }

   ups07FullTestGroup OBJECT-GROUP
       OBJECTS { ups07TestId, ups07TestSpinLock,
                 ups07TestResultsSummary, ups07TestResultsDetail,
                 ups07TestStartTime, ups07TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups07FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups07FullGroups 7 }

   ups07FullControlGroup OBJECT-GROUP
       OBJECTS { ups07ShutdownType, ups07ShutdownAfterDelay,
                 ups07StartupAfterDelay, ups07RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups07FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups07FullGroups 8 }

   --*******************************************************************
   --
   -- Module 8 data
   --

   upsModule8           OBJECT IDENTIFIER ::= { upsModular 9 }
   ups08Objects           OBJECT IDENTIFIER ::= { upsModule8 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups08IdentName and
   --      ups08IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups08Ident              OBJECT IDENTIFIER ::= { ups08Objects 1 }

   ups08IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups08Ident 1 }

   ups08IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups08Ident 2 }

   ups08IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups08IdentAgentSoftwareVersion in some implementations."
       ::= { ups08Ident 3 }

   ups08IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups08IdentUPSSoftwareVersion in some implementations."
       ::= { ups08Ident 4 }

   ups08IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups08Ident 5 }

   ups08IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups08Ident 6 }


   --
   -- Battery Group
   --

   ups08Battery            OBJECT IDENTIFIER ::= { ups08Objects 2 }

   ups08BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups08ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups08ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups08Battery 1 }

   ups08SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups08Battery 2 }

   ups08EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups08Battery 3 }

   ups08EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups08Battery 4 }

   ups08BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups08Battery 5 }

   ups08BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups08Battery 6 }

   ups08BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups08Battery 7 }


   --
   -- Input Group
   --

   ups08Input              OBJECT IDENTIFIER ::= { ups08Objects 3 }

   ups08InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups08Input 1 }


   ups08InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups08Input 2 }

   ups08InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups08InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups08InputNumLines."
       ::= { ups08Input 3 }

   ups08InputEntry OBJECT-TYPE
       SYNTAX     Ups08InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups08InputLineIndex }
       ::= { ups08InputTable 1 }

   Ups08InputEntry ::= SEQUENCE {
       ups08InputLineIndex   PositiveInteger,
       ups08InputFrequency   NonNegativeInteger,
       ups08InputVoltage     NonNegativeInteger,
       ups08InputCurrent     NonNegativeInteger,
       ups08InputTruePower   NonNegativeInteger
   }

   ups08InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups08InputEntry 1 }

   ups08InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups08InputEntry 2 }

   ups08InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups08InputEntry 3 }

   ups08InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups08InputEntry 4 }

   ups08InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups08InputEntry 5 }


   --
   -- The Output group.
   --

   ups08Output             OBJECT IDENTIFIER ::= { ups08Objects 4 }

   ups08OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups08Output 1 }

   ups08OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups08Output 2 }

   ups08OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups08Output 3 }

   ups08OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups08OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups08OutputNumLines."
       ::= { ups08Output 4 }

   ups08OutputEntry OBJECT-TYPE
       SYNTAX     Ups08OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups08OutputLineIndex }
       ::= { ups08OutputTable 1 }

   Ups08OutputEntry ::= SEQUENCE {
       ups08OutputLineIndex   PositiveInteger,
       ups08OutputVoltage     NonNegativeInteger,
       ups08OutputCurrent     NonNegativeInteger,
       ups08OutputPower       NonNegativeInteger,
       ups08OutputPercentLoad INTEGER
   }

   ups08OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups08OutputEntry 1 }

   ups08OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups08OutputEntry 2 }

   ups08OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups08OutputEntry 3 }

   ups08OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups08OutputEntry 4 }

   ups08OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups08OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups08Bypass             OBJECT IDENTIFIER ::= { ups08Objects 5 }

   ups08BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups08Bypass 1 }

   ups08BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups08Bypass 2 }

   ups08BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups08BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups08BypassNumLines."
       ::= { ups08Bypass 3 }

   ups08BypassEntry OBJECT-TYPE
       SYNTAX     Ups08BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups08BypassLineIndex }
       ::= { ups08BypassTable 1 }

   Ups08BypassEntry ::= SEQUENCE {
       ups08BypassLineIndex  PositiveInteger,
       ups08BypassVoltage    NonNegativeInteger,
       ups08BypassCurrent    NonNegativeInteger,
       ups08BypassPower      NonNegativeInteger
   }

   ups08BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups08BypassEntry 1 }

   ups08BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups08BypassEntry 2 }

   ups08BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups08BypassEntry 3 }

   ups08BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups08BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups08Alarm              OBJECT IDENTIFIER ::= { ups08Objects 6 }

   ups08AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups08Alarm 1 }

   ups08AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups08AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups08AlarmId equal to 1, and increments the value of
               ups08AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups08AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups08AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups08AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups08AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups08AlarmsPresent."
       ::= { ups08Alarm 2 }

   ups08AlarmEntry OBJECT-TYPE
       SYNTAX     Ups08AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups08AlarmId }
       ::= { ups08AlarmTable 1 }

   Ups08AlarmEntry ::= SEQUENCE {
       ups08AlarmId          PositiveInteger,
       ups08AlarmDescr       AutonomousType,
       ups08AlarmTime        TimeStamp
   }

   ups08AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups08AlarmEntry 1 }

   ups08AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups08AlarmEntry 2 }

   ups08AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups08AlarmTime shall equal
               0."
       ::= { ups08AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups08WellKnownAlarms    OBJECT IDENTIFIER ::= { ups08Alarm 3 }
   ups08AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups08WellKnownAlarms  1 }

   ups08AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups08WellKnownAlarms  2 }

   ups08AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups08ConfigLowBattTime."
       ::= { ups08WellKnownAlarms  3 }


   ups08AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups08WellKnownAlarms  4 }

   ups08AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups08WellKnownAlarms  5 }

   ups08AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups08WellKnownAlarms  6 }

   ups08AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups08WellKnownAlarms  7 }

   ups08AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups08WellKnownAlarms  8 }

   ups08AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups08WellKnownAlarms  9 }

   ups08AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups08WellKnownAlarms 10 }

   ups08AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups08WellKnownAlarms 11 }

   ups08AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups08WellKnownAlarms 12 }

   ups08AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups08WellKnownAlarms 13 }

   ups08AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups08WellKnownAlarms 14 }

   ups08AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups08WellKnownAlarms 15 }

   ups08AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups08WellKnownAlarms 16 }

   ups08AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups08WellKnownAlarms 17 }

   ups08AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups08WellKnownAlarms 18 }

   ups08AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups08WellKnownAlarms 19 }

   ups08AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups08WellKnownAlarms 20 }

   ups08AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups08WellKnownAlarms 21 }

   ups08AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups08ShutdownAfterDelay countdown is underway."
       ::= { ups08WellKnownAlarms 22 }

   ups08AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups08WellKnownAlarms 23 }

   ups08AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups08WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups08Test               OBJECT IDENTIFIER ::= { ups08Objects 7 }

   ups08TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups08TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups08TestResultsSummary. Tests in progress may be
               aborted by setting the ups08TestId variable to
               ups08TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups08TestNoTestsInitiated is returned."
       ::= { ups08Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups08TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups08TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups08TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups08TestResultsSummary */
                     get (upsTestSpinLock, ups08TestResultsSummary,
               ups08TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups08TestResultsSummary,
               ups08TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups08TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups08TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups08Test 2 }

   ups08TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups08TestId to ups08TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups08Test 3 }

   ups08TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups08TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups08Test 4 }

   ups08TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups08TestResultsSummary is noTestsInitiated(6),
               ups08TestStartTime has the value 0."
       ::= { ups08Test 5 }

   ups08TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups08TestResultsSummary is noTestsInitiated(6),
               ups08TestElapsedTime has the value 0."
       ::= { ups08Test 6 }

   --
   -- Well known tests.
   --

   ups08WellKnownTests     OBJECT IDENTIFIER ::= { ups08Test 7 }


   ups08TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups08WellKnownTests  1 }

   ups08TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups08WellKnownTests  2 }

   ups08TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups08WellKnownTests  3 }

   ups08TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups08WellKnownTests  4 }

   ups08TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups08WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups08Control            OBJECT IDENTIFIER ::= { ups08Objects 8 }

   ups08ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups08ShutdownAfterDelay and ups08RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups08Control 1 }

   ups08ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups08ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups08ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups08ShutdownType =
               output and the output is already off.  When read,
               ups08ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups08ShutdownAfterDelay already in effect."
       ::= { ups08Control 2 }

   ups08StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups08StartupAfterDelay
               countdown or ups08RebootWithDuration countdown in
               progress.  When read, ups08StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups08Control 3 }

   ups08RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups08ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups08RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups08Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups08Traps              OBJECT IDENTIFIER ::= { upsModule8 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups08TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups08EstimatedMinutesRemaining, ups08SecondsOnBattery,
                 ups08ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups08Traps 1 }

   ups08TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups08TestId, ups08TestSpinLock,
                 ups08TestResultsSummary, ups08TestResultsDetail,
                 ups08TestStartTime, ups08TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups08Traps 2 }

   ups08TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups08AlarmId, ups08AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups08AlarmOnBattery and
               ups08AlarmTestInProgress."
     ::= { ups08Traps 3 }

   ups08TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups08AlarmId, ups08AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups08AlarmTestInProgress."
     ::= { ups08Traps 4 }


   --
   -- conformance information
   --
   ups08Conformance        OBJECT IDENTIFIER ::= { upsModule8 3 }

   ups08Compliances        OBJECT IDENTIFIER ::= { ups08Conformance 1 }


   --
   -- compliance statements
   --

   ups08SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups08SubsetIdentGroup,
                     ups08SubsetBatteryGroup, ups08SubsetInputGroup,
                     ups08SubsetOutputGroup, ups08SubsetAlarmGroup,
                     ups08SubsetControlGroup }

       OBJECT     ups08BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups08AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups08AlarmOnBattery, ups08AlarmLowBattery,
               ups08AlarmInputBad, ups08AlarmUpsOutputOff,
               ups08AlarmUpsSystemOff, and ups08AlarmTestInProgress."

       OBJECT     ups08OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups08ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups08Compliances 1 }

   ups08BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups08BasicIdentGroup,
                     ups08BasicBatteryGroup, ups08BasicInputGroup,
                     ups08BasicOutputGroup, ups08BasicAlarmGroup,
                     ups08BasicTestGroup, ups08BasicControlGroup }


       OBJECT     ups08AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups08AlarmOnBattery, ups08AlarmLowBattery,
               ups08AlarmDepletedBattery, ups08AlarmTempBad,
               ups08AlarmInputBad, ups08AlarmOutputOverload,
               ups08AlarmOnBypass, ups08AlarmBypassBad,
               ups08AlarmOutputOffAsRequested,
               ups08AlarmUpsOffAsRequested, ups08AlarmUpsOutputOff,
               ups08AlarmUpsSystemOff, ups08AlarmGeneralFault,
               ups08AlarmDiagnosticTestFailed,
               ups08AlarmCommunicationsLost, ups08AlarmShutdownPending,
               and ups08AlarmTestInProgress."

       OBJECT     ups08TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups08TestNoTestsInitiated."

       OBJECT     ups08OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups08BasicBypassGroup
           DESCRIPTION
               "The ups08BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups08ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups08Compliances 2 }

   ups08FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups08FullIdentGroup, ups08FullBatteryGroup,
                     ups08FullInputGroup, ups08FullOutputGroup,
                     ups08FullAlarmGroup, ups08FullTestGroup,
                     ups08FullControlGroup }

       OBJECT     ups08AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups08AlarmBatteryBad, ups08AlarmOnBattery,
               ups08AlarmLowBattery, ups08AlarmDepletedBattery,
               ups08AlarmTempBad, ups08AlarmInputBad, ups08AlarmOnBypass,
               ups08AlarmBypassBad, ups08AlarmOutputOffAsRequested,
               ups08AlarmUpsOffAsRequested, ups08AlarmUpsOutputOff,
               ups08AlarmUpsSystemOff, ups08AlarmGeneralFault,
               ups08AlarmDiagnosticTestFailed,
               ups08AlarmCommunicationsLost, ups08AlarmShutdownPending,
               and ups08AlarmTestInProgress."

       OBJECT     ups08TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups08TestNoTestsInitiated,
               ups08TestGeneralSystemsTest, and
               ups08TestQuickBatteryTest."

       OBJECT     ups08OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups08FullBypassGroup
           DESCRIPTION
               "The ups08FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups08ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups08Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups08Groups             OBJECT IDENTIFIER ::= { ups08Conformance 2 }

   ups08SubsetGroups       OBJECT IDENTIFIER ::= { ups08Groups 1 }

   ups08SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups08IdentManufacturer, ups08IdentModel,
                 ups08IdentAgentSoftwareVersion, ups08IdentName,
                 ups08IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups08SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups08SubsetGroups 1 }

   ups08SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups08BatteryStatus, ups08SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups08SubsetGroups 2 }

   ups08SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups08InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups08SubsetGroups 3 }

   ups08SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups08OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups08SubsetGroups 4 }


   -- { ups08SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups08SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups08AlarmsPresent, ups08AlarmDescr, ups08AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups08SubsetGroups 6 }

   -- { ups08SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups08SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups08ShutdownType, ups08ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups08SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups08SubsetGroups 8 }

   ups08BasicGroups        OBJECT IDENTIFIER ::= { ups08Groups 2 }

   ups08BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups08IdentManufacturer, ups08IdentModel,
                 ups08IdentUPSSoftwareVersion,
                 ups08IdentAgentSoftwareVersion, ups08IdentName }
       STATUS  current
       DESCRIPTION
               "The ups08BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 1 }

   ups08BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups08BatteryStatus, ups08SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups08BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 2 }

   ups08BasicInputGroup OBJECT-GROUP
       OBJECTS { ups08InputLineBads, ups08InputNumLines,
                 ups08InputFrequency, ups08InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups08BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 3 }

   ups08BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups08OutputSource, ups08OutputFrequency,
                 ups08OutputNumLines, ups08OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups08BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 4 }

   ups08BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups08BypassFrequency, ups08BypassNumLines,
                 ups08BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups08BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 5 }

   ups08BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups08AlarmsPresent, ups08AlarmDescr, ups08AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups08BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 6 }

   ups08BasicTestGroup OBJECT-GROUP
       OBJECTS { ups08TestId, ups08TestSpinLock,
                 ups08TestResultsSummary, ups08TestResultsDetail,
                 ups08TestStartTime, ups08TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups08BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 7 }

   ups08BasicControlGroup OBJECT-GROUP
       OBJECTS { ups08ShutdownType, ups08ShutdownAfterDelay,
                 ups08StartupAfterDelay, ups08RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups08BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups08BasicGroups 8 }

   ups08FullGroups         OBJECT IDENTIFIER ::= { ups08Groups 3 }

   ups08FullIdentGroup OBJECT-GROUP
       OBJECTS { ups08IdentManufacturer, ups08IdentModel,
                 ups08IdentUPSSoftwareVersion,
                 ups08IdentAgentSoftwareVersion, ups08IdentName,
                 ups08IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups08FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups08FullGroups 1 }

   ups08FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups08BatteryStatus, ups08SecondsOnBattery,
                 ups08EstimatedMinutesRemaining,
                 ups08EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups08FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups08FullGroups 2 }

   ups08FullInputGroup OBJECT-GROUP
       OBJECTS { ups08InputLineBads, ups08InputNumLines,
                 ups08InputFrequency, ups08InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups08FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups08FullGroups 3 }

   ups08FullOutputGroup OBJECT-GROUP
       OBJECTS { ups08OutputSource, ups08OutputFrequency,
                 ups08OutputNumLines, ups08OutputVoltage,
                 ups08OutputCurrent, ups08OutputPower,
                 ups08OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups08FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups08FullGroups 4 }

   ups08FullBypassGroup OBJECT-GROUP
       OBJECTS { ups08BypassFrequency, ups08BypassNumLines,
                 ups08BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups08FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups08FullGroups 5 }

   ups08FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups08AlarmsPresent, ups08AlarmDescr, ups08AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups08FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups08FullGroups 6 }

   ups08FullTestGroup OBJECT-GROUP
       OBJECTS { ups08TestId, ups08TestSpinLock,
                 ups08TestResultsSummary, ups08TestResultsDetail,
                 ups08TestStartTime, ups08TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups08FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups08FullGroups 7 }

   ups08FullControlGroup OBJECT-GROUP
       OBJECTS { ups08ShutdownType, ups08ShutdownAfterDelay,
                 ups08StartupAfterDelay, ups08RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups08FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups08FullGroups 8 }

   --*******************************************************************
   --
   -- Module 9 data
   --

   upsModule9           OBJECT IDENTIFIER ::= { upsModular 10 }
   ups09Objects           OBJECT IDENTIFIER ::= { upsModule9 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups09IdentName and
   --      ups09IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups09Ident              OBJECT IDENTIFIER ::= { ups09Objects 1 }

   ups09IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups09Ident 1 }

   ups09IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups09Ident 2 }

   ups09IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups09IdentAgentSoftwareVersion in some implementations."
       ::= { ups09Ident 3 }

   ups09IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups09IdentUPSSoftwareVersion in some implementations."
       ::= { ups09Ident 4 }

   ups09IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups09Ident 5 }

   ups09IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups09Ident 6 }


   --
   -- Battery Group
   --

   ups09Battery            OBJECT IDENTIFIER ::= { ups09Objects 2 }

   ups09BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups09ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups09ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups09Battery 1 }

   ups09SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups09Battery 2 }

   ups09EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups09Battery 3 }

   ups09EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups09Battery 4 }

   ups09BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups09Battery 5 }

   ups09BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups09Battery 6 }

   ups09BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups09Battery 7 }


   --
   -- Input Group
   --

   ups09Input              OBJECT IDENTIFIER ::= { ups09Objects 3 }

   ups09InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups09Input 1 }


   ups09InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups09Input 2 }

   ups09InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups09InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups09InputNumLines."
       ::= { ups09Input 3 }

   ups09InputEntry OBJECT-TYPE
       SYNTAX     Ups09InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups09InputLineIndex }
       ::= { ups09InputTable 1 }

   Ups09InputEntry ::= SEQUENCE {
       ups09InputLineIndex   PositiveInteger,
       ups09InputFrequency   NonNegativeInteger,
       ups09InputVoltage     NonNegativeInteger,
       ups09InputCurrent     NonNegativeInteger,
       ups09InputTruePower   NonNegativeInteger
   }

   ups09InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups09InputEntry 1 }

   ups09InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups09InputEntry 2 }

   ups09InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups09InputEntry 3 }

   ups09InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups09InputEntry 4 }

   ups09InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups09InputEntry 5 }


   --
   -- The Output group.
   --

   ups09Output             OBJECT IDENTIFIER ::= { ups09Objects 4 }

   ups09OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups09Output 1 }

   ups09OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups09Output 2 }

   ups09OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups09Output 3 }

   ups09OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups09OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups09OutputNumLines."
       ::= { ups09Output 4 }

   ups09OutputEntry OBJECT-TYPE
       SYNTAX     Ups09OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups09OutputLineIndex }
       ::= { ups09OutputTable 1 }

   Ups09OutputEntry ::= SEQUENCE {
       ups09OutputLineIndex   PositiveInteger,
       ups09OutputVoltage     NonNegativeInteger,
       ups09OutputCurrent     NonNegativeInteger,
       ups09OutputPower       NonNegativeInteger,
       ups09OutputPercentLoad INTEGER
   }

   ups09OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups09OutputEntry 1 }

   ups09OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups09OutputEntry 2 }

   ups09OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups09OutputEntry 3 }

   ups09OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups09OutputEntry 4 }

   ups09OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups09OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups09Bypass             OBJECT IDENTIFIER ::= { ups09Objects 5 }

   ups09BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups09Bypass 1 }

   ups09BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups09Bypass 2 }

   ups09BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups09BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups09BypassNumLines."
       ::= { ups09Bypass 3 }

   ups09BypassEntry OBJECT-TYPE
       SYNTAX     Ups09BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups09BypassLineIndex }
       ::= { ups09BypassTable 1 }

   Ups09BypassEntry ::= SEQUENCE {
       ups09BypassLineIndex  PositiveInteger,
       ups09BypassVoltage    NonNegativeInteger,
       ups09BypassCurrent    NonNegativeInteger,
       ups09BypassPower      NonNegativeInteger
   }

   ups09BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups09BypassEntry 1 }

   ups09BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups09BypassEntry 2 }

   ups09BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups09BypassEntry 3 }

   ups09BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups09BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups09Alarm              OBJECT IDENTIFIER ::= { ups09Objects 6 }

   ups09AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups09Alarm 1 }

   ups09AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups09AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups09AlarmId equal to 1, and increments the value of
               ups09AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups09AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups09AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups09AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups09AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups09AlarmsPresent."
       ::= { ups09Alarm 2 }

   ups09AlarmEntry OBJECT-TYPE
       SYNTAX     Ups09AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups09AlarmId }
       ::= { ups09AlarmTable 1 }

   Ups09AlarmEntry ::= SEQUENCE {
       ups09AlarmId          PositiveInteger,
       ups09AlarmDescr       AutonomousType,
       ups09AlarmTime        TimeStamp
   }

   ups09AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups09AlarmEntry 1 }

   ups09AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups09AlarmEntry 2 }

   ups09AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups09AlarmTime shall equal
               0."
       ::= { ups09AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups09WellKnownAlarms    OBJECT IDENTIFIER ::= { ups09Alarm 3 }
   ups09AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups09WellKnownAlarms  1 }

   ups09AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups09WellKnownAlarms  2 }

   ups09AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups09ConfigLowBattTime."
       ::= { ups09WellKnownAlarms  3 }


   ups09AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups09WellKnownAlarms  4 }

   ups09AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups09WellKnownAlarms  5 }

   ups09AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups09WellKnownAlarms  6 }

   ups09AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups09WellKnownAlarms  7 }

   ups09AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups09WellKnownAlarms  8 }

   ups09AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups09WellKnownAlarms  9 }

   ups09AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups09WellKnownAlarms 10 }

   ups09AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups09WellKnownAlarms 11 }

   ups09AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups09WellKnownAlarms 12 }

   ups09AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups09WellKnownAlarms 13 }

   ups09AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups09WellKnownAlarms 14 }

   ups09AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups09WellKnownAlarms 15 }

   ups09AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups09WellKnownAlarms 16 }

   ups09AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups09WellKnownAlarms 17 }

   ups09AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups09WellKnownAlarms 18 }

   ups09AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups09WellKnownAlarms 19 }

   ups09AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups09WellKnownAlarms 20 }

   ups09AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups09WellKnownAlarms 21 }

   ups09AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups09ShutdownAfterDelay countdown is underway."
       ::= { ups09WellKnownAlarms 22 }

   ups09AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups09WellKnownAlarms 23 }

   ups09AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups09WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups09Test               OBJECT IDENTIFIER ::= { ups09Objects 7 }

   ups09TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups09TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups09TestResultsSummary. Tests in progress may be
               aborted by setting the ups09TestId variable to
               ups09TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups09TestNoTestsInitiated is returned."
       ::= { ups09Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups09TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups09TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups09TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups09TestResultsSummary */
                     get (upsTestSpinLock, ups09TestResultsSummary,
               ups09TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups09TestResultsSummary,
               ups09TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups09TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups09TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups09Test 2 }

   ups09TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups09TestId to ups09TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups09Test 3 }

   ups09TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups09TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups09Test 4 }

   ups09TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups09TestResultsSummary is noTestsInitiated(6),
               ups09TestStartTime has the value 0."
       ::= { ups09Test 5 }

   ups09TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups09TestResultsSummary is noTestsInitiated(6),
               ups09TestElapsedTime has the value 0."
       ::= { ups09Test 6 }

   --
   -- Well known tests.
   --

   ups09WellKnownTests     OBJECT IDENTIFIER ::= { ups09Test 7 }


   ups09TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups09WellKnownTests  1 }

   ups09TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups09WellKnownTests  2 }

   ups09TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups09WellKnownTests  3 }

   ups09TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups09WellKnownTests  4 }

   ups09TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups09WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups09Control            OBJECT IDENTIFIER ::= { ups09Objects 8 }

   ups09ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups09ShutdownAfterDelay and ups09RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups09Control 1 }

   ups09ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups09ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups09ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups09ShutdownType =
               output and the output is already off.  When read,
               ups09ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups09ShutdownAfterDelay already in effect."
       ::= { ups09Control 2 }

   ups09StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups09StartupAfterDelay
               countdown or ups09RebootWithDuration countdown in
               progress.  When read, ups09StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups09Control 3 }

   ups09RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups09ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups09RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups09Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups09Traps              OBJECT IDENTIFIER ::= { upsModule9 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups09TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups09EstimatedMinutesRemaining, ups09SecondsOnBattery,
                 ups09ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups09Traps 1 }

   ups09TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups09TestId, ups09TestSpinLock,
                 ups09TestResultsSummary, ups09TestResultsDetail,
                 ups09TestStartTime, ups09TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups09Traps 2 }

   ups09TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups09AlarmId, ups09AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups09AlarmOnBattery and
               ups09AlarmTestInProgress."
     ::= { ups09Traps 3 }

   ups09TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups09AlarmId, ups09AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups09AlarmTestInProgress."
     ::= { ups09Traps 4 }


   --
   -- conformance information
   --
   ups09Conformance        OBJECT IDENTIFIER ::= { upsModule9 3 }

   ups09Compliances        OBJECT IDENTIFIER ::= { ups09Conformance 1 }


   --
   -- compliance statements
   --

   ups09SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups09SubsetIdentGroup,
                     ups09SubsetBatteryGroup, ups09SubsetInputGroup,
                     ups09SubsetOutputGroup, ups09SubsetAlarmGroup,
                     ups09SubsetControlGroup }

       OBJECT     ups09BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups09AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups09AlarmOnBattery, ups09AlarmLowBattery,
               ups09AlarmInputBad, ups09AlarmUpsOutputOff,
               ups09AlarmUpsSystemOff, and ups09AlarmTestInProgress."

       OBJECT     ups09OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups09ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups09Compliances 1 }

   ups09BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups09BasicIdentGroup,
                     ups09BasicBatteryGroup, ups09BasicInputGroup,
                     ups09BasicOutputGroup, ups09BasicAlarmGroup,
                     ups09BasicTestGroup, ups09BasicControlGroup }


       OBJECT     ups09AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups09AlarmOnBattery, ups09AlarmLowBattery,
               ups09AlarmDepletedBattery, ups09AlarmTempBad,
               ups09AlarmInputBad, ups09AlarmOutputOverload,
               ups09AlarmOnBypass, ups09AlarmBypassBad,
               ups09AlarmOutputOffAsRequested,
               ups09AlarmUpsOffAsRequested, ups09AlarmUpsOutputOff,
               ups09AlarmUpsSystemOff, ups09AlarmGeneralFault,
               ups09AlarmDiagnosticTestFailed,
               ups09AlarmCommunicationsLost, ups09AlarmShutdownPending,
               and ups09AlarmTestInProgress."

       OBJECT     ups09TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups09TestNoTestsInitiated."

       OBJECT     ups09OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups09BasicBypassGroup
           DESCRIPTION
               "The ups09BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups09ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups09Compliances 2 }

   ups09FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups09FullIdentGroup, ups09FullBatteryGroup,
                     ups09FullInputGroup, ups09FullOutputGroup,
                     ups09FullAlarmGroup, ups09FullTestGroup,
                     ups09FullControlGroup }

       OBJECT     ups09AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups09AlarmBatteryBad, ups09AlarmOnBattery,
               ups09AlarmLowBattery, ups09AlarmDepletedBattery,
               ups09AlarmTempBad, ups09AlarmInputBad, ups09AlarmOnBypass,
               ups09AlarmBypassBad, ups09AlarmOutputOffAsRequested,
               ups09AlarmUpsOffAsRequested, ups09AlarmUpsOutputOff,
               ups09AlarmUpsSystemOff, ups09AlarmGeneralFault,
               ups09AlarmDiagnosticTestFailed,
               ups09AlarmCommunicationsLost, ups09AlarmShutdownPending,
               and ups09AlarmTestInProgress."

       OBJECT     ups09TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups09TestNoTestsInitiated,
               ups09TestGeneralSystemsTest, and
               ups09TestQuickBatteryTest."

       OBJECT     ups09OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups09FullBypassGroup
           DESCRIPTION
               "The ups09FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups09ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups09Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups09Groups             OBJECT IDENTIFIER ::= { ups09Conformance 2 }

   ups09SubsetGroups       OBJECT IDENTIFIER ::= { ups09Groups 1 }

   ups09SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups09IdentManufacturer, ups09IdentModel,
                 ups09IdentAgentSoftwareVersion, ups09IdentName,
                 ups09IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups09SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups09SubsetGroups 1 }

   ups09SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups09BatteryStatus, ups09SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups09SubsetGroups 2 }

   ups09SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups09InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups09SubsetGroups 3 }

   ups09SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups09OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups09SubsetGroups 4 }


   -- { ups09SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups09SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups09AlarmsPresent, ups09AlarmDescr, ups09AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups09SubsetGroups 6 }

   -- { ups09SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups09SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups09ShutdownType, ups09ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups09SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups09SubsetGroups 8 }

   ups09BasicGroups        OBJECT IDENTIFIER ::= { ups09Groups 2 }

   ups09BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups09IdentManufacturer, ups09IdentModel,
                 ups09IdentUPSSoftwareVersion,
                 ups09IdentAgentSoftwareVersion, ups09IdentName }
       STATUS  current
       DESCRIPTION
               "The ups09BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 1 }

   ups09BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups09BatteryStatus, ups09SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups09BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 2 }

   ups09BasicInputGroup OBJECT-GROUP
       OBJECTS { ups09InputLineBads, ups09InputNumLines,
                 ups09InputFrequency, ups09InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups09BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 3 }

   ups09BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups09OutputSource, ups09OutputFrequency,
                 ups09OutputNumLines, ups09OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups09BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 4 }

   ups09BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups09BypassFrequency, ups09BypassNumLines,
                 ups09BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups09BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 5 }

   ups09BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups09AlarmsPresent, ups09AlarmDescr, ups09AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups09BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 6 }

   ups09BasicTestGroup OBJECT-GROUP
       OBJECTS { ups09TestId, ups09TestSpinLock,
                 ups09TestResultsSummary, ups09TestResultsDetail,
                 ups09TestStartTime, ups09TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups09BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 7 }

   ups09BasicControlGroup OBJECT-GROUP
       OBJECTS { ups09ShutdownType, ups09ShutdownAfterDelay,
                 ups09StartupAfterDelay, ups09RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups09BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups09BasicGroups 8 }

   ups09FullGroups         OBJECT IDENTIFIER ::= { ups09Groups 3 }

   ups09FullIdentGroup OBJECT-GROUP
       OBJECTS { ups09IdentManufacturer, ups09IdentModel,
                 ups09IdentUPSSoftwareVersion,
                 ups09IdentAgentSoftwareVersion, ups09IdentName,
                 ups09IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups09FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups09FullGroups 1 }

   ups09FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups09BatteryStatus, ups09SecondsOnBattery,
                 ups09EstimatedMinutesRemaining,
                 ups09EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups09FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups09FullGroups 2 }

   ups09FullInputGroup OBJECT-GROUP
       OBJECTS { ups09InputLineBads, ups09InputNumLines,
                 ups09InputFrequency, ups09InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups09FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups09FullGroups 3 }

   ups09FullOutputGroup OBJECT-GROUP
       OBJECTS { ups09OutputSource, ups09OutputFrequency,
                 ups09OutputNumLines, ups09OutputVoltage,
                 ups09OutputCurrent, ups09OutputPower,
                 ups09OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups09FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups09FullGroups 4 }

   ups09FullBypassGroup OBJECT-GROUP
       OBJECTS { ups09BypassFrequency, ups09BypassNumLines,
                 ups09BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups09FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups09FullGroups 5 }

   ups09FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups09AlarmsPresent, ups09AlarmDescr, ups09AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups09FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups09FullGroups 6 }

   ups09FullTestGroup OBJECT-GROUP
       OBJECTS { ups09TestId, ups09TestSpinLock,
                 ups09TestResultsSummary, ups09TestResultsDetail,
                 ups09TestStartTime, ups09TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups09FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups09FullGroups 7 }

   ups09FullControlGroup OBJECT-GROUP
       OBJECTS { ups09ShutdownType, ups09ShutdownAfterDelay,
                 ups09StartupAfterDelay, ups09RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups09FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups09FullGroups 8 }


   --*******************************************************************
   --
   -- Module 10 data
   --

   upsModule10           OBJECT IDENTIFIER ::= { upsModular 11 }
   ups10Objects           OBJECT IDENTIFIER ::= { upsModule10 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups10IdentName and
   --      ups10IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups10Ident              OBJECT IDENTIFIER ::= { ups10Objects 1 }

   ups10IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups10Ident 1 }

   ups10IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups10Ident 2 }

   ups10IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups10IdentAgentSoftwareVersion in some implementations."
       ::= { ups10Ident 3 }

   ups10IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups10IdentUPSSoftwareVersion in some implementations."
       ::= { ups10Ident 4 }

   ups10IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups10Ident 5 }

   ups10IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups10Ident 6 }


   --
   -- Battery Group
   --

   ups10Battery            OBJECT IDENTIFIER ::= { ups10Objects 2 }

   ups10BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups10ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups10ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups10Battery 1 }

   ups10SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups10Battery 2 }

   ups10EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups10Battery 3 }

   ups10EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups10Battery 4 }

   ups10BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups10Battery 5 }

   ups10BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups10Battery 6 }

   ups10BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups10Battery 7 }


   --
   -- Input Group
   --

   ups10Input              OBJECT IDENTIFIER ::= { ups10Objects 3 }

   ups10InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups10Input 1 }


   ups10InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups10Input 2 }

   ups10InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups10InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups10InputNumLines."
       ::= { ups10Input 3 }

   ups10InputEntry OBJECT-TYPE
       SYNTAX     Ups10InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups10InputLineIndex }
       ::= { ups10InputTable 1 }

   Ups10InputEntry ::= SEQUENCE {
       ups10InputLineIndex   PositiveInteger,
       ups10InputFrequency   NonNegativeInteger,
       ups10InputVoltage     NonNegativeInteger,
       ups10InputCurrent     NonNegativeInteger,
       ups10InputTruePower   NonNegativeInteger
   }

   ups10InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups10InputEntry 1 }

   ups10InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups10InputEntry 2 }

   ups10InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups10InputEntry 3 }

   ups10InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups10InputEntry 4 }

   ups10InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups10InputEntry 5 }


   --
   -- The Output group.
   --

   ups10Output             OBJECT IDENTIFIER ::= { ups10Objects 4 }

   ups10OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups10Output 1 }

   ups10OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups10Output 2 }

   ups10OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups10Output 3 }

   ups10OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups10OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups10OutputNumLines."
       ::= { ups10Output 4 }

   ups10OutputEntry OBJECT-TYPE
       SYNTAX     Ups10OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups10OutputLineIndex }
       ::= { ups10OutputTable 1 }

   Ups10OutputEntry ::= SEQUENCE {
       ups10OutputLineIndex   PositiveInteger,
       ups10OutputVoltage     NonNegativeInteger,
       ups10OutputCurrent     NonNegativeInteger,
       ups10OutputPower       NonNegativeInteger,
       ups10OutputPercentLoad INTEGER
   }

   ups10OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups10OutputEntry 1 }

   ups10OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups10OutputEntry 2 }

   ups10OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups10OutputEntry 3 }

   ups10OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups10OutputEntry 4 }

   ups10OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups10OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups10Bypass             OBJECT IDENTIFIER ::= { ups10Objects 5 }

   ups10BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups10Bypass 1 }

   ups10BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups10Bypass 2 }

   ups10BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups10BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups10BypassNumLines."
       ::= { ups10Bypass 3 }

   ups10BypassEntry OBJECT-TYPE
       SYNTAX     Ups10BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups10BypassLineIndex }
       ::= { ups10BypassTable 1 }

   Ups10BypassEntry ::= SEQUENCE {
       ups10BypassLineIndex  PositiveInteger,
       ups10BypassVoltage    NonNegativeInteger,
       ups10BypassCurrent    NonNegativeInteger,
       ups10BypassPower      NonNegativeInteger
   }

   ups10BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups10BypassEntry 1 }

   ups10BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups10BypassEntry 2 }

   ups10BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups10BypassEntry 3 }

   ups10BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups10BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups10Alarm              OBJECT IDENTIFIER ::= { ups10Objects 6 }

   ups10AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups10Alarm 1 }

   ups10AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups10AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups10AlarmId equal to 1, and increments the value of
               ups10AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups10AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups10AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups10AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups10AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups10AlarmsPresent."
       ::= { ups10Alarm 2 }

   ups10AlarmEntry OBJECT-TYPE
       SYNTAX     Ups10AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups10AlarmId }
       ::= { ups10AlarmTable 1 }

   Ups10AlarmEntry ::= SEQUENCE {
       ups10AlarmId          PositiveInteger,
       ups10AlarmDescr       AutonomousType,
       ups10AlarmTime        TimeStamp
   }

   ups10AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups10AlarmEntry 1 }

   ups10AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups10AlarmEntry 2 }

   ups10AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups10AlarmTime shall equal
               0."
       ::= { ups10AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups10WellKnownAlarms    OBJECT IDENTIFIER ::= { ups10Alarm 3 }
   ups10AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups10WellKnownAlarms  1 }

   ups10AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups10WellKnownAlarms  2 }

   ups10AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups10ConfigLowBattTime."
       ::= { ups10WellKnownAlarms  3 }


   ups10AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups10WellKnownAlarms  4 }

   ups10AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups10WellKnownAlarms  5 }

   ups10AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups10WellKnownAlarms  6 }

   ups10AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups10WellKnownAlarms  7 }

   ups10AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups10WellKnownAlarms  8 }

   ups10AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups10WellKnownAlarms  9 }

   ups10AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups10WellKnownAlarms 10 }

   ups10AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups10WellKnownAlarms 11 }

   ups10AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups10WellKnownAlarms 12 }

   ups10AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups10WellKnownAlarms 13 }

   ups10AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups10WellKnownAlarms 14 }

   ups10AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups10WellKnownAlarms 15 }

   ups10AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups10WellKnownAlarms 16 }

   ups10AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups10WellKnownAlarms 17 }

   ups10AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups10WellKnownAlarms 18 }

   ups10AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups10WellKnownAlarms 19 }

   ups10AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups10WellKnownAlarms 20 }

   ups10AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups10WellKnownAlarms 21 }

   ups10AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups10ShutdownAfterDelay countdown is underway."
       ::= { ups10WellKnownAlarms 22 }

   ups10AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups10WellKnownAlarms 23 }

   ups10AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups10WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups10Test               OBJECT IDENTIFIER ::= { ups10Objects 7 }

   ups10TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups10TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups10TestResultsSummary. Tests in progress may be
               aborted by setting the ups10TestId variable to
               ups10TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups10TestNoTestsInitiated is returned."
       ::= { ups10Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups10TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups10TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups10TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups10TestResultsSummary */
                     get (upsTestSpinLock, ups10TestResultsSummary,
               ups10TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups10TestResultsSummary,
               ups10TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups10TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups10TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups10Test 2 }

   ups10TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups10TestId to ups10TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups10Test 3 }

   ups10TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups10TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups10Test 4 }

   ups10TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups10TestResultsSummary is noTestsInitiated(6),
               ups10TestStartTime has the value 0."
       ::= { ups10Test 5 }

   ups10TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups10TestResultsSummary is noTestsInitiated(6),
               ups10TestElapsedTime has the value 0."
       ::= { ups10Test 6 }

   --
   -- Well known tests.
   --

   ups10WellKnownTests     OBJECT IDENTIFIER ::= { ups10Test 7 }


   ups10TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups10WellKnownTests  1 }

   ups10TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups10WellKnownTests  2 }

   ups10TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups10WellKnownTests  3 }

   ups10TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups10WellKnownTests  4 }

   ups10TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups10WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups10Control            OBJECT IDENTIFIER ::= { ups10Objects 8 }

   ups10ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups10ShutdownAfterDelay and ups10RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups10Control 1 }

   ups10ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups10ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups10ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups10ShutdownType =
               output and the output is already off.  When read,
               ups10ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups10ShutdownAfterDelay already in effect."
       ::= { ups10Control 2 }

   ups10StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups10StartupAfterDelay
               countdown or ups10RebootWithDuration countdown in
               progress.  When read, ups10StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups10Control 3 }

   ups10RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups10ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups10RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups10Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups10Traps              OBJECT IDENTIFIER ::= { upsModule10 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups10TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups10EstimatedMinutesRemaining, ups10SecondsOnBattery,
                 ups10ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups10Traps 1 }

   ups10TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups10TestId, ups10TestSpinLock,
                 ups10TestResultsSummary, ups10TestResultsDetail,
                 ups10TestStartTime, ups10TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups10Traps 2 }

   ups10TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups10AlarmId, ups10AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups10AlarmOnBattery and
               ups10AlarmTestInProgress."
     ::= { ups10Traps 3 }

   ups10TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups10AlarmId, ups10AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups10AlarmTestInProgress."
     ::= { ups10Traps 4 }


   --
   -- conformance information
   --
   ups10Conformance        OBJECT IDENTIFIER ::= { upsModule10 3 }

   ups10Compliances        OBJECT IDENTIFIER ::= { ups10Conformance 1 }


   --
   -- compliance statements
   --

   ups10SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups10SubsetIdentGroup,
                     ups10SubsetBatteryGroup, ups10SubsetInputGroup,
                     ups10SubsetOutputGroup, ups10SubsetAlarmGroup,
                     ups10SubsetControlGroup }

       OBJECT     ups10BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups10AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups10AlarmOnBattery, ups10AlarmLowBattery,
               ups10AlarmInputBad, ups10AlarmUpsOutputOff,
               ups10AlarmUpsSystemOff, and ups10AlarmTestInProgress."

       OBJECT     ups10OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups10ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups10Compliances 1 }

   ups10BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups10BasicIdentGroup,
                     ups10BasicBatteryGroup, ups10BasicInputGroup,
                     ups10BasicOutputGroup, ups10BasicAlarmGroup,
                     ups10BasicTestGroup, ups10BasicControlGroup }


       OBJECT     ups10AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups10AlarmOnBattery, ups10AlarmLowBattery,
               ups10AlarmDepletedBattery, ups10AlarmTempBad,
               ups10AlarmInputBad, ups10AlarmOutputOverload,
               ups10AlarmOnBypass, ups10AlarmBypassBad,
               ups10AlarmOutputOffAsRequested,
               ups10AlarmUpsOffAsRequested, ups10AlarmUpsOutputOff,
               ups10AlarmUpsSystemOff, ups10AlarmGeneralFault,
               ups10AlarmDiagnosticTestFailed,
               ups10AlarmCommunicationsLost, ups10AlarmShutdownPending,
               and ups10AlarmTestInProgress."

       OBJECT     ups10TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups10TestNoTestsInitiated."

       OBJECT     ups10OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups10BasicBypassGroup
           DESCRIPTION
               "The ups10BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups10ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups10Compliances 2 }

   ups10FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups10FullIdentGroup, ups10FullBatteryGroup,
                     ups10FullInputGroup, ups10FullOutputGroup,
                     ups10FullAlarmGroup, ups10FullTestGroup,
                     ups10FullControlGroup }

       OBJECT     ups10AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups10AlarmBatteryBad, ups10AlarmOnBattery,
               ups10AlarmLowBattery, ups10AlarmDepletedBattery,
               ups10AlarmTempBad, ups10AlarmInputBad, ups10AlarmOnBypass,
               ups10AlarmBypassBad, ups10AlarmOutputOffAsRequested,
               ups10AlarmUpsOffAsRequested, ups10AlarmUpsOutputOff,
               ups10AlarmUpsSystemOff, ups10AlarmGeneralFault,
               ups10AlarmDiagnosticTestFailed,
               ups10AlarmCommunicationsLost, ups10AlarmShutdownPending,
               and ups10AlarmTestInProgress."

       OBJECT     ups10TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups10TestNoTestsInitiated,
               ups10TestGeneralSystemsTest, and
               ups10TestQuickBatteryTest."

       OBJECT     ups10OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups10FullBypassGroup
           DESCRIPTION
               "The ups10FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups10ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups10Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups10Groups             OBJECT IDENTIFIER ::= { ups10Conformance 2 }

   ups10SubsetGroups       OBJECT IDENTIFIER ::= { ups10Groups 1 }

   ups10SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups10IdentManufacturer, ups10IdentModel,
                 ups10IdentAgentSoftwareVersion, ups10IdentName,
                 ups10IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups10SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups10SubsetGroups 1 }

   ups10SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups10BatteryStatus, ups10SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups10SubsetGroups 2 }

   ups10SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups10InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups10SubsetGroups 3 }

   ups10SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups10OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups10SubsetGroups 4 }


   -- { ups10SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups10SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups10AlarmsPresent, ups10AlarmDescr, ups10AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups10SubsetGroups 6 }

   -- { ups10SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups10SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups10ShutdownType, ups10ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups10SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups10SubsetGroups 8 }

   ups10BasicGroups        OBJECT IDENTIFIER ::= { ups10Groups 2 }

   ups10BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups10IdentManufacturer, ups10IdentModel,
                 ups10IdentUPSSoftwareVersion,
                 ups10IdentAgentSoftwareVersion, ups10IdentName }
       STATUS  current
       DESCRIPTION
               "The ups10BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 1 }

   ups10BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups10BatteryStatus, ups10SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups10BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 2 }

   ups10BasicInputGroup OBJECT-GROUP
       OBJECTS { ups10InputLineBads, ups10InputNumLines,
                 ups10InputFrequency, ups10InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups10BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 3 }

   ups10BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups10OutputSource, ups10OutputFrequency,
                 ups10OutputNumLines, ups10OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups10BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 4 }

   ups10BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups10BypassFrequency, ups10BypassNumLines,
                 ups10BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups10BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 5 }

   ups10BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups10AlarmsPresent, ups10AlarmDescr, ups10AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups10BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 6 }

   ups10BasicTestGroup OBJECT-GROUP
       OBJECTS { ups10TestId, ups10TestSpinLock,
                 ups10TestResultsSummary, ups10TestResultsDetail,
                 ups10TestStartTime, ups10TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups10BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 7 }

   ups10BasicControlGroup OBJECT-GROUP
       OBJECTS { ups10ShutdownType, ups10ShutdownAfterDelay,
                 ups10StartupAfterDelay, ups10RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups10BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups10BasicGroups 8 }

   ups10FullGroups         OBJECT IDENTIFIER ::= { ups10Groups 3 }

   ups10FullIdentGroup OBJECT-GROUP
       OBJECTS { ups10IdentManufacturer, ups10IdentModel,
                 ups10IdentUPSSoftwareVersion,
                 ups10IdentAgentSoftwareVersion, ups10IdentName,
                 ups10IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups10FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups10FullGroups 1 }

   ups10FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups10BatteryStatus, ups10SecondsOnBattery,
                 ups10EstimatedMinutesRemaining,
                 ups10EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups10FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups10FullGroups 2 }

   ups10FullInputGroup OBJECT-GROUP
       OBJECTS { ups10InputLineBads, ups10InputNumLines,
                 ups10InputFrequency, ups10InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups10FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups10FullGroups 3 }

   ups10FullOutputGroup OBJECT-GROUP
       OBJECTS { ups10OutputSource, ups10OutputFrequency,
                 ups10OutputNumLines, ups10OutputVoltage,
                 ups10OutputCurrent, ups10OutputPower,
                 ups10OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups10FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups10FullGroups 4 }

   ups10FullBypassGroup OBJECT-GROUP
       OBJECTS { ups10BypassFrequency, ups10BypassNumLines,
                 ups10BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups10FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups10FullGroups 5 }

   ups10FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups10AlarmsPresent, ups10AlarmDescr, ups10AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups10FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups10FullGroups 6 }

   ups10FullTestGroup OBJECT-GROUP
       OBJECTS { ups10TestId, ups10TestSpinLock,
                 ups10TestResultsSummary, ups10TestResultsDetail,
                 ups10TestStartTime, ups10TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups10FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups10FullGroups 7 }

   ups10FullControlGroup OBJECT-GROUP
       OBJECTS { ups10ShutdownType, ups10ShutdownAfterDelay,
                 ups10StartupAfterDelay, ups10RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups10FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups10FullGroups 8 }


   --*******************************************************************
   --
   -- Module 11 data
   --

   upsModule11           OBJECT IDENTIFIER ::= { upsModular 12 }
   ups11Objects           OBJECT IDENTIFIER ::= { upsModule11 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups11IdentName and
   --      ups11IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups11Ident              OBJECT IDENTIFIER ::= { ups11Objects 1 }

   ups11IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups11Ident 1 }

   ups11IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups11Ident 2 }

   ups11IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups11IdentAgentSoftwareVersion in some implementations."
       ::= { ups11Ident 3 }

   ups11IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups11IdentUPSSoftwareVersion in some implementations."
       ::= { ups11Ident 4 }

   ups11IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups11Ident 5 }

   ups11IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups11Ident 6 }


   --
   -- Battery Group
   --

   ups11Battery            OBJECT IDENTIFIER ::= { ups11Objects 2 }

   ups11BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups11ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups11ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups11Battery 1 }

   ups11SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups11Battery 2 }

   ups11EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups11Battery 3 }

   ups11EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups11Battery 4 }

   ups11BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups11Battery 5 }

   ups11BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups11Battery 6 }

   ups11BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups11Battery 7 }


   --
   -- Input Group
   --

   ups11Input              OBJECT IDENTIFIER ::= { ups11Objects 3 }

   ups11InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups11Input 1 }


   ups11InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups11Input 2 }

   ups11InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups11InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups11InputNumLines."
       ::= { ups11Input 3 }

   ups11InputEntry OBJECT-TYPE
       SYNTAX     Ups11InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups11InputLineIndex }
       ::= { ups11InputTable 1 }

   Ups11InputEntry ::= SEQUENCE {
       ups11InputLineIndex   PositiveInteger,
       ups11InputFrequency   NonNegativeInteger,
       ups11InputVoltage     NonNegativeInteger,
       ups11InputCurrent     NonNegativeInteger,
       ups11InputTruePower   NonNegativeInteger
   }

   ups11InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups11InputEntry 1 }

   ups11InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups11InputEntry 2 }

   ups11InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups11InputEntry 3 }

   ups11InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups11InputEntry 4 }

   ups11InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups11InputEntry 5 }


   --
   -- The Output group.
   --

   ups11Output             OBJECT IDENTIFIER ::= { ups11Objects 4 }

   ups11OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups11Output 1 }

   ups11OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups11Output 2 }

   ups11OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups11Output 3 }

   ups11OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups11OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups11OutputNumLines."
       ::= { ups11Output 4 }

   ups11OutputEntry OBJECT-TYPE
       SYNTAX     Ups11OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups11OutputLineIndex }
       ::= { ups11OutputTable 1 }

   Ups11OutputEntry ::= SEQUENCE {
       ups11OutputLineIndex   PositiveInteger,
       ups11OutputVoltage     NonNegativeInteger,
       ups11OutputCurrent     NonNegativeInteger,
       ups11OutputPower       NonNegativeInteger,
       ups11OutputPercentLoad INTEGER
   }

   ups11OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups11OutputEntry 1 }

   ups11OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups11OutputEntry 2 }

   ups11OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups11OutputEntry 3 }

   ups11OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups11OutputEntry 4 }

   ups11OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups11OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups11Bypass             OBJECT IDENTIFIER ::= { ups11Objects 5 }

   ups11BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups11Bypass 1 }

   ups11BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups11Bypass 2 }

   ups11BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups11BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups11BypassNumLines."
       ::= { ups11Bypass 3 }

   ups11BypassEntry OBJECT-TYPE
       SYNTAX     Ups11BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups11BypassLineIndex }
       ::= { ups11BypassTable 1 }

   Ups11BypassEntry ::= SEQUENCE {
       ups11BypassLineIndex  PositiveInteger,
       ups11BypassVoltage    NonNegativeInteger,
       ups11BypassCurrent    NonNegativeInteger,
       ups11BypassPower      NonNegativeInteger
   }

   ups11BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups11BypassEntry 1 }

   ups11BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups11BypassEntry 2 }

   ups11BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups11BypassEntry 3 }

   ups11BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups11BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups11Alarm              OBJECT IDENTIFIER ::= { ups11Objects 6 }

   ups11AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups11Alarm 1 }

   ups11AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups11AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups11AlarmId equal to 1, and increments the value of
               ups11AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups11AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups11AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups11AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups11AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups11AlarmsPresent."
       ::= { ups11Alarm 2 }

   ups11AlarmEntry OBJECT-TYPE
       SYNTAX     Ups11AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups11AlarmId }
       ::= { ups11AlarmTable 1 }

   Ups11AlarmEntry ::= SEQUENCE {
       ups11AlarmId          PositiveInteger,
       ups11AlarmDescr       AutonomousType,
       ups11AlarmTime        TimeStamp
   }

   ups11AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups11AlarmEntry 1 }

   ups11AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups11AlarmEntry 2 }

   ups11AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups11AlarmTime shall equal
               0."
       ::= { ups11AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups11WellKnownAlarms    OBJECT IDENTIFIER ::= { ups11Alarm 3 }
   ups11AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups11WellKnownAlarms  1 }

   ups11AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups11WellKnownAlarms  2 }

   ups11AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups11ConfigLowBattTime."
       ::= { ups11WellKnownAlarms  3 }


   ups11AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups11WellKnownAlarms  4 }

   ups11AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups11WellKnownAlarms  5 }

   ups11AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups11WellKnownAlarms  6 }

   ups11AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups11WellKnownAlarms  7 }

   ups11AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups11WellKnownAlarms  8 }

   ups11AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups11WellKnownAlarms  9 }

   ups11AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups11WellKnownAlarms 10 }

   ups11AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups11WellKnownAlarms 11 }

   ups11AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups11WellKnownAlarms 12 }

   ups11AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups11WellKnownAlarms 13 }

   ups11AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups11WellKnownAlarms 14 }

   ups11AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups11WellKnownAlarms 15 }

   ups11AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups11WellKnownAlarms 16 }

   ups11AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups11WellKnownAlarms 17 }

   ups11AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups11WellKnownAlarms 18 }

   ups11AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups11WellKnownAlarms 19 }

   ups11AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups11WellKnownAlarms 20 }

   ups11AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups11WellKnownAlarms 21 }

   ups11AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups11ShutdownAfterDelay countdown is underway."
       ::= { ups11WellKnownAlarms 22 }

   ups11AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups11WellKnownAlarms 23 }

   ups11AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups11WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups11Test               OBJECT IDENTIFIER ::= { ups11Objects 7 }

   ups11TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups11TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups11TestResultsSummary. Tests in progress may be
               aborted by setting the ups11TestId variable to
               ups11TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups11TestNoTestsInitiated is returned."
       ::= { ups11Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups11TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups11TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups11TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups11TestResultsSummary */
                     get (upsTestSpinLock, ups11TestResultsSummary,
               ups11TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups11TestResultsSummary,
               ups11TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups11TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups11TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups11Test 2 }

   ups11TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups11TestId to ups11TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups11Test 3 }

   ups11TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups11TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups11Test 4 }

   ups11TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups11TestResultsSummary is noTestsInitiated(6),
               ups11TestStartTime has the value 0."
       ::= { ups11Test 5 }

   ups11TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups11TestResultsSummary is noTestsInitiated(6),
               ups11TestElapsedTime has the value 0."
       ::= { ups11Test 6 }

   --
   -- Well known tests.
   --

   ups11WellKnownTests     OBJECT IDENTIFIER ::= { ups11Test 7 }


   ups11TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups11WellKnownTests  1 }

   ups11TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups11WellKnownTests  2 }

   ups11TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups11WellKnownTests  3 }

   ups11TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups11WellKnownTests  4 }

   ups11TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups11WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups11Control            OBJECT IDENTIFIER ::= { ups11Objects 8 }

   ups11ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups11ShutdownAfterDelay and ups11RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups11Control 1 }

   ups11ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups11ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups11ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups11ShutdownType =
               output and the output is already off.  When read,
               ups11ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups11ShutdownAfterDelay already in effect."
       ::= { ups11Control 2 }

   ups11StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups11StartupAfterDelay
               countdown or ups11RebootWithDuration countdown in
               progress.  When read, ups11StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups11Control 3 }

   ups11RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups11ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups11RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups11Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups11Traps              OBJECT IDENTIFIER ::= { upsModule11 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups11TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups11EstimatedMinutesRemaining, ups11SecondsOnBattery,
                 ups11ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups11Traps 1 }

   ups11TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups11TestId, ups11TestSpinLock,
                 ups11TestResultsSummary, ups11TestResultsDetail,
                 ups11TestStartTime, ups11TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups11Traps 2 }

   ups11TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups11AlarmId, ups11AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups11AlarmOnBattery and
               ups11AlarmTestInProgress."
     ::= { ups11Traps 3 }

   ups11TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups11AlarmId, ups11AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups11AlarmTestInProgress."
     ::= { ups11Traps 4 }


   --
   -- conformance information
   --
   ups11Conformance        OBJECT IDENTIFIER ::= { upsModule11 3 }

   ups11Compliances        OBJECT IDENTIFIER ::= { ups11Conformance 1 }


   --
   -- compliance statements
   --

   ups11SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups11SubsetIdentGroup,
                     ups11SubsetBatteryGroup, ups11SubsetInputGroup,
                     ups11SubsetOutputGroup, ups11SubsetAlarmGroup,
                     ups11SubsetControlGroup }

       OBJECT     ups11BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups11AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups11AlarmOnBattery, ups11AlarmLowBattery,
               ups11AlarmInputBad, ups11AlarmUpsOutputOff,
               ups11AlarmUpsSystemOff, and ups11AlarmTestInProgress."

       OBJECT     ups11OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups11ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups11Compliances 1 }

   ups11BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups11BasicIdentGroup,
                     ups11BasicBatteryGroup, ups11BasicInputGroup,
                     ups11BasicOutputGroup, ups11BasicAlarmGroup,
                     ups11BasicTestGroup, ups11BasicControlGroup }


       OBJECT     ups11AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups11AlarmOnBattery, ups11AlarmLowBattery,
               ups11AlarmDepletedBattery, ups11AlarmTempBad,
               ups11AlarmInputBad, ups11AlarmOutputOverload,
               ups11AlarmOnBypass, ups11AlarmBypassBad,
               ups11AlarmOutputOffAsRequested,
               ups11AlarmUpsOffAsRequested, ups11AlarmUpsOutputOff,
               ups11AlarmUpsSystemOff, ups11AlarmGeneralFault,
               ups11AlarmDiagnosticTestFailed,
               ups11AlarmCommunicationsLost, ups11AlarmShutdownPending,
               and ups11AlarmTestInProgress."

       OBJECT     ups11TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups11TestNoTestsInitiated."

       OBJECT     ups11OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups11BasicBypassGroup
           DESCRIPTION
               "The ups11BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups11ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups11Compliances 2 }

   ups11FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups11FullIdentGroup, ups11FullBatteryGroup,
                     ups11FullInputGroup, ups11FullOutputGroup,
                     ups11FullAlarmGroup, ups11FullTestGroup,
                     ups11FullControlGroup }

       OBJECT     ups11AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups11AlarmBatteryBad, ups11AlarmOnBattery,
               ups11AlarmLowBattery, ups11AlarmDepletedBattery,
               ups11AlarmTempBad, ups11AlarmInputBad, ups11AlarmOnBypass,
               ups11AlarmBypassBad, ups11AlarmOutputOffAsRequested,
               ups11AlarmUpsOffAsRequested, ups11AlarmUpsOutputOff,
               ups11AlarmUpsSystemOff, ups11AlarmGeneralFault,
               ups11AlarmDiagnosticTestFailed,
               ups11AlarmCommunicationsLost, ups11AlarmShutdownPending,
               and ups11AlarmTestInProgress."

       OBJECT     ups11TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups11TestNoTestsInitiated,
               ups11TestGeneralSystemsTest, and
               ups11TestQuickBatteryTest."

       OBJECT     ups11OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups11FullBypassGroup
           DESCRIPTION
               "The ups11FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups11ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups11Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups11Groups             OBJECT IDENTIFIER ::= { ups11Conformance 2 }

   ups11SubsetGroups       OBJECT IDENTIFIER ::= { ups11Groups 1 }

   ups11SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups11IdentManufacturer, ups11IdentModel,
                 ups11IdentAgentSoftwareVersion, ups11IdentName,
                 ups11IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups11SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups11SubsetGroups 1 }

   ups11SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups11BatteryStatus, ups11SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups11SubsetGroups 2 }

   ups11SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups11InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups11SubsetGroups 3 }

   ups11SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups11OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups11SubsetGroups 4 }


   -- { ups11SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups11SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups11AlarmsPresent, ups11AlarmDescr, ups11AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups11SubsetGroups 6 }

   -- { ups11SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups11SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups11ShutdownType, ups11ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups11SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups11SubsetGroups 8 }

   ups11BasicGroups        OBJECT IDENTIFIER ::= { ups11Groups 2 }

   ups11BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups11IdentManufacturer, ups11IdentModel,
                 ups11IdentUPSSoftwareVersion,
                 ups11IdentAgentSoftwareVersion, ups11IdentName }
       STATUS  current
       DESCRIPTION
               "The ups11BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 1 }

   ups11BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups11BatteryStatus, ups11SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups11BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 2 }

   ups11BasicInputGroup OBJECT-GROUP
       OBJECTS { ups11InputLineBads, ups11InputNumLines,
                 ups11InputFrequency, ups11InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups11BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 3 }

   ups11BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups11OutputSource, ups11OutputFrequency,
                 ups11OutputNumLines, ups11OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups11BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 4 }

   ups11BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups11BypassFrequency, ups11BypassNumLines,
                 ups11BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups11BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 5 }

   ups11BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups11AlarmsPresent, ups11AlarmDescr, ups11AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups11BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 6 }

   ups11BasicTestGroup OBJECT-GROUP
       OBJECTS { ups11TestId, ups11TestSpinLock,
                 ups11TestResultsSummary, ups11TestResultsDetail,
                 ups11TestStartTime, ups11TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups11BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 7 }

   ups11BasicControlGroup OBJECT-GROUP
       OBJECTS { ups11ShutdownType, ups11ShutdownAfterDelay,
                 ups11StartupAfterDelay, ups11RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups11BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups11BasicGroups 8 }

   ups11FullGroups         OBJECT IDENTIFIER ::= { ups11Groups 3 }

   ups11FullIdentGroup OBJECT-GROUP
       OBJECTS { ups11IdentManufacturer, ups11IdentModel,
                 ups11IdentUPSSoftwareVersion,
                 ups11IdentAgentSoftwareVersion, ups11IdentName,
                 ups11IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups11FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups11FullGroups 1 }

   ups11FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups11BatteryStatus, ups11SecondsOnBattery,
                 ups11EstimatedMinutesRemaining,
                 ups11EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups11FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups11FullGroups 2 }

   ups11FullInputGroup OBJECT-GROUP
       OBJECTS { ups11InputLineBads, ups11InputNumLines,
                 ups11InputFrequency, ups11InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups11FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups11FullGroups 3 }

   ups11FullOutputGroup OBJECT-GROUP
       OBJECTS { ups11OutputSource, ups11OutputFrequency,
                 ups11OutputNumLines, ups11OutputVoltage,
                 ups11OutputCurrent, ups11OutputPower,
                 ups11OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups11FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups11FullGroups 4 }

   ups11FullBypassGroup OBJECT-GROUP
       OBJECTS { ups11BypassFrequency, ups11BypassNumLines,
                 ups11BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups11FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups11FullGroups 5 }

   ups11FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups11AlarmsPresent, ups11AlarmDescr, ups11AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups11FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups11FullGroups 6 }

   ups11FullTestGroup OBJECT-GROUP
       OBJECTS { ups11TestId, ups11TestSpinLock,
                 ups11TestResultsSummary, ups11TestResultsDetail,
                 ups11TestStartTime, ups11TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups11FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups11FullGroups 7 }

   ups11FullControlGroup OBJECT-GROUP
       OBJECTS { ups11ShutdownType, ups11ShutdownAfterDelay,
                 ups11StartupAfterDelay, ups11RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups11FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups11FullGroups 8 }


   --*******************************************************************   
   --
   -- Module 12 data
   --

   upsModule12           OBJECT IDENTIFIER ::= { upsModular 13 }
   ups12Objects           OBJECT IDENTIFIER ::= { upsModule12 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups12IdentName and
   --      ups12IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups12Ident              OBJECT IDENTIFIER ::= { ups12Objects 1 }

   ups12IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups12Ident 1 }

   ups12IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups12Ident 2 }

   ups12IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups12IdentAgentSoftwareVersion in some implementations."
       ::= { ups12Ident 3 }

   ups12IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups12IdentUPSSoftwareVersion in some implementations."
       ::= { ups12Ident 4 }

   ups12IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups12Ident 5 }

   ups12IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups12Ident 6 }


   --
   -- Battery Group
   --

   ups12Battery            OBJECT IDENTIFIER ::= { ups12Objects 2 }

   ups12BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups12ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups12ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups12Battery 1 }

   ups12SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups12Battery 2 }

   ups12EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups12Battery 3 }

   ups12EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups12Battery 4 }

   ups12BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups12Battery 5 }

   ups12BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups12Battery 6 }

   ups12BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups12Battery 7 }


   --
   -- Input Group
   --

   ups12Input              OBJECT IDENTIFIER ::= { ups12Objects 3 }

   ups12InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups12Input 1 }


   ups12InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups12Input 2 }

   ups12InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups12InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups12InputNumLines."
       ::= { ups12Input 3 }

   ups12InputEntry OBJECT-TYPE
       SYNTAX     Ups12InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups12InputLineIndex }
       ::= { ups12InputTable 1 }

   Ups12InputEntry ::= SEQUENCE {
       ups12InputLineIndex   PositiveInteger,
       ups12InputFrequency   NonNegativeInteger,
       ups12InputVoltage     NonNegativeInteger,
       ups12InputCurrent     NonNegativeInteger,
       ups12InputTruePower   NonNegativeInteger
   }

   ups12InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups12InputEntry 1 }

   ups12InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups12InputEntry 2 }

   ups12InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups12InputEntry 3 }

   ups12InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups12InputEntry 4 }

   ups12InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups12InputEntry 5 }


   --
   -- The Output group.
   --

   ups12Output             OBJECT IDENTIFIER ::= { ups12Objects 4 }

   ups12OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups12Output 1 }

   ups12OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups12Output 2 }

   ups12OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups12Output 3 }

   ups12OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups12OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups12OutputNumLines."
       ::= { ups12Output 4 }

   ups12OutputEntry OBJECT-TYPE
       SYNTAX     Ups12OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups12OutputLineIndex }
       ::= { ups12OutputTable 1 }

   Ups12OutputEntry ::= SEQUENCE {
       ups12OutputLineIndex   PositiveInteger,
       ups12OutputVoltage     NonNegativeInteger,
       ups12OutputCurrent     NonNegativeInteger,
       ups12OutputPower       NonNegativeInteger,
       ups12OutputPercentLoad INTEGER
   }

   ups12OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups12OutputEntry 1 }

   ups12OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups12OutputEntry 2 }

   ups12OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups12OutputEntry 3 }

   ups12OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups12OutputEntry 4 }

   ups12OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups12OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups12Bypass             OBJECT IDENTIFIER ::= { ups12Objects 5 }

   ups12BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups12Bypass 1 }

   ups12BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups12Bypass 2 }

   ups12BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups12BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups12BypassNumLines."
       ::= { ups12Bypass 3 }

   ups12BypassEntry OBJECT-TYPE
       SYNTAX     Ups12BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups12BypassLineIndex }
       ::= { ups12BypassTable 1 }

   Ups12BypassEntry ::= SEQUENCE {
       ups12BypassLineIndex  PositiveInteger,
       ups12BypassVoltage    NonNegativeInteger,
       ups12BypassCurrent    NonNegativeInteger,
       ups12BypassPower      NonNegativeInteger
   }

   ups12BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups12BypassEntry 1 }

   ups12BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups12BypassEntry 2 }

   ups12BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups12BypassEntry 3 }

   ups12BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups12BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups12Alarm              OBJECT IDENTIFIER ::= { ups12Objects 6 }

   ups12AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups12Alarm 1 }

   ups12AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups12AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups12AlarmId equal to 1, and increments the value of
               ups12AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups12AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups12AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups12AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups12AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups12AlarmsPresent."
       ::= { ups12Alarm 2 }

   ups12AlarmEntry OBJECT-TYPE
       SYNTAX     Ups12AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups12AlarmId }
       ::= { ups12AlarmTable 1 }

   Ups12AlarmEntry ::= SEQUENCE {
       ups12AlarmId          PositiveInteger,
       ups12AlarmDescr       AutonomousType,
       ups12AlarmTime        TimeStamp
   }

   ups12AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups12AlarmEntry 1 }

   ups12AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups12AlarmEntry 2 }

   ups12AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups12AlarmTime shall equal
               0."
       ::= { ups12AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups12WellKnownAlarms    OBJECT IDENTIFIER ::= { ups12Alarm 3 }
   ups12AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups12WellKnownAlarms  1 }

   ups12AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups12WellKnownAlarms  2 }

   ups12AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups12ConfigLowBattTime."
       ::= { ups12WellKnownAlarms  3 }


   ups12AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups12WellKnownAlarms  4 }

   ups12AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups12WellKnownAlarms  5 }

   ups12AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups12WellKnownAlarms  6 }

   ups12AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups12WellKnownAlarms  7 }

   ups12AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups12WellKnownAlarms  8 }

   ups12AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups12WellKnownAlarms  9 }

   ups12AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups12WellKnownAlarms 10 }

   ups12AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups12WellKnownAlarms 11 }

   ups12AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups12WellKnownAlarms 12 }

   ups12AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups12WellKnownAlarms 13 }

   ups12AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups12WellKnownAlarms 14 }

   ups12AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups12WellKnownAlarms 15 }

   ups12AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups12WellKnownAlarms 16 }

   ups12AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups12WellKnownAlarms 17 }

   ups12AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups12WellKnownAlarms 18 }

   ups12AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups12WellKnownAlarms 19 }

   ups12AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups12WellKnownAlarms 20 }

   ups12AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups12WellKnownAlarms 21 }

   ups12AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups12ShutdownAfterDelay countdown is underway."
       ::= { ups12WellKnownAlarms 22 }

   ups12AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups12WellKnownAlarms 23 }

   ups12AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups12WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups12Test               OBJECT IDENTIFIER ::= { ups12Objects 7 }

   ups12TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups12TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups12TestResultsSummary. Tests in progress may be
               aborted by setting the ups12TestId variable to
               ups12TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups12TestNoTestsInitiated is returned."
       ::= { ups12Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups12TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups12TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups12TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups12TestResultsSummary */
                     get (upsTestSpinLock, ups12TestResultsSummary,
               ups12TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups12TestResultsSummary,
               ups12TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups12TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups12TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups12Test 2 }

   ups12TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups12TestId to ups12TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups12Test 3 }

   ups12TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups12TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups12Test 4 }

   ups12TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups12TestResultsSummary is noTestsInitiated(6),
               ups12TestStartTime has the value 0."
       ::= { ups12Test 5 }

   ups12TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups12TestResultsSummary is noTestsInitiated(6),
               ups12TestElapsedTime has the value 0."
       ::= { ups12Test 6 }

   --
   -- Well known tests.
   --

   ups12WellKnownTests     OBJECT IDENTIFIER ::= { ups12Test 7 }


   ups12TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups12WellKnownTests  1 }

   ups12TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups12WellKnownTests  2 }

   ups12TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups12WellKnownTests  3 }

   ups12TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups12WellKnownTests  4 }

   ups12TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups12WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups12Control            OBJECT IDENTIFIER ::= { ups12Objects 8 }

   ups12ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups12ShutdownAfterDelay and ups12RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups12Control 1 }

   ups12ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups12ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups12ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups12ShutdownType =
               output and the output is already off.  When read,
               ups12ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups12ShutdownAfterDelay already in effect."
       ::= { ups12Control 2 }

   ups12StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups12StartupAfterDelay
               countdown or ups12RebootWithDuration countdown in
               progress.  When read, ups12StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups12Control 3 }

   ups12RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups12ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups12RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups12Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups12Traps              OBJECT IDENTIFIER ::= { upsModule12 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups12TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups12EstimatedMinutesRemaining, ups12SecondsOnBattery,
                 ups12ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups12Traps 1 }

   ups12TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups12TestId, ups12TestSpinLock,
                 ups12TestResultsSummary, ups12TestResultsDetail,
                 ups12TestStartTime, ups12TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups12Traps 2 }

   ups12TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups12AlarmId, ups12AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups12AlarmOnBattery and
               ups12AlarmTestInProgress."
     ::= { ups12Traps 3 }

   ups12TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups12AlarmId, ups12AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups12AlarmTestInProgress."
     ::= { ups12Traps 4 }


   --
   -- conformance information
   --
   ups12Conformance        OBJECT IDENTIFIER ::= { upsModule12 3 }

   ups12Compliances        OBJECT IDENTIFIER ::= { ups12Conformance 1 }


   --
   -- compliance statements
   --

   ups12SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups12SubsetIdentGroup,
                     ups12SubsetBatteryGroup, ups12SubsetInputGroup,
                     ups12SubsetOutputGroup, ups12SubsetAlarmGroup,
                     ups12SubsetControlGroup }

       OBJECT     ups12BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups12AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups12AlarmOnBattery, ups12AlarmLowBattery,
               ups12AlarmInputBad, ups12AlarmUpsOutputOff,
               ups12AlarmUpsSystemOff, and ups12AlarmTestInProgress."

       OBJECT     ups12OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups12ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups12Compliances 1 }

   ups12BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups12BasicIdentGroup,
                     ups12BasicBatteryGroup, ups12BasicInputGroup,
                     ups12BasicOutputGroup, ups12BasicAlarmGroup,
                     ups12BasicTestGroup, ups12BasicControlGroup }


       OBJECT     ups12AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups12AlarmOnBattery, ups12AlarmLowBattery,
               ups12AlarmDepletedBattery, ups12AlarmTempBad,
               ups12AlarmInputBad, ups12AlarmOutputOverload,
               ups12AlarmOnBypass, ups12AlarmBypassBad,
               ups12AlarmOutputOffAsRequested,
               ups12AlarmUpsOffAsRequested, ups12AlarmUpsOutputOff,
               ups12AlarmUpsSystemOff, ups12AlarmGeneralFault,
               ups12AlarmDiagnosticTestFailed,
               ups12AlarmCommunicationsLost, ups12AlarmShutdownPending,
               and ups12AlarmTestInProgress."

       OBJECT     ups12TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups12TestNoTestsInitiated."

       OBJECT     ups12OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups12BasicBypassGroup
           DESCRIPTION
               "The ups12BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups12ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups12Compliances 2 }

   ups12FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups12FullIdentGroup, ups12FullBatteryGroup,
                     ups12FullInputGroup, ups12FullOutputGroup,
                     ups12FullAlarmGroup, ups12FullTestGroup,
                     ups12FullControlGroup }

       OBJECT     ups12AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups12AlarmBatteryBad, ups12AlarmOnBattery,
               ups12AlarmLowBattery, ups12AlarmDepletedBattery,
               ups12AlarmTempBad, ups12AlarmInputBad, ups12AlarmOnBypass,
               ups12AlarmBypassBad, ups12AlarmOutputOffAsRequested,
               ups12AlarmUpsOffAsRequested, ups12AlarmUpsOutputOff,
               ups12AlarmUpsSystemOff, ups12AlarmGeneralFault,
               ups12AlarmDiagnosticTestFailed,
               ups12AlarmCommunicationsLost, ups12AlarmShutdownPending,
               and ups12AlarmTestInProgress."

       OBJECT     ups12TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups12TestNoTestsInitiated,
               ups12TestGeneralSystemsTest, and
               ups12TestQuickBatteryTest."

       OBJECT     ups12OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups12FullBypassGroup
           DESCRIPTION
               "The ups12FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups12ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups12Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups12Groups             OBJECT IDENTIFIER ::= { ups12Conformance 2 }

   ups12SubsetGroups       OBJECT IDENTIFIER ::= { ups12Groups 1 }

   ups12SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups12IdentManufacturer, ups12IdentModel,
                 ups12IdentAgentSoftwareVersion, ups12IdentName,
                 ups12IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups12SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups12SubsetGroups 1 }

   ups12SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups12BatteryStatus, ups12SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups12SubsetGroups 2 }

   ups12SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups12InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups12SubsetGroups 3 }

   ups12SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups12OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups12SubsetGroups 4 }


   -- { ups12SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups12SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups12AlarmsPresent, ups12AlarmDescr, ups12AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups12SubsetGroups 6 }

   -- { ups12SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups12SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups12ShutdownType, ups12ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups12SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups12SubsetGroups 8 }

   ups12BasicGroups        OBJECT IDENTIFIER ::= { ups12Groups 2 }

   ups12BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups12IdentManufacturer, ups12IdentModel,
                 ups12IdentUPSSoftwareVersion,
                 ups12IdentAgentSoftwareVersion, ups12IdentName }
       STATUS  current
       DESCRIPTION
               "The ups12BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 1 }

   ups12BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups12BatteryStatus, ups12SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups12BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 2 }

   ups12BasicInputGroup OBJECT-GROUP
       OBJECTS { ups12InputLineBads, ups12InputNumLines,
                 ups12InputFrequency, ups12InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups12BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 3 }

   ups12BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups12OutputSource, ups12OutputFrequency,
                 ups12OutputNumLines, ups12OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups12BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 4 }

   ups12BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups12BypassFrequency, ups12BypassNumLines,
                 ups12BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups12BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 5 }

   ups12BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups12AlarmsPresent, ups12AlarmDescr, ups12AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups12BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 6 }

   ups12BasicTestGroup OBJECT-GROUP
       OBJECTS { ups12TestId, ups12TestSpinLock,
                 ups12TestResultsSummary, ups12TestResultsDetail,
                 ups12TestStartTime, ups12TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups12BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 7 }

   ups12BasicControlGroup OBJECT-GROUP
       OBJECTS { ups12ShutdownType, ups12ShutdownAfterDelay,
                 ups12StartupAfterDelay, ups12RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups12BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups12BasicGroups 8 }

   ups12FullGroups         OBJECT IDENTIFIER ::= { ups12Groups 3 }

   ups12FullIdentGroup OBJECT-GROUP
       OBJECTS { ups12IdentManufacturer, ups12IdentModel,
                 ups12IdentUPSSoftwareVersion,
                 ups12IdentAgentSoftwareVersion, ups12IdentName,
                 ups12IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups12FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups12FullGroups 1 }

   ups12FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups12BatteryStatus, ups12SecondsOnBattery,
                 ups12EstimatedMinutesRemaining,
                 ups12EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups12FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups12FullGroups 2 }

   ups12FullInputGroup OBJECT-GROUP
       OBJECTS { ups12InputLineBads, ups12InputNumLines,
                 ups12InputFrequency, ups12InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups12FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups12FullGroups 3 }

   ups12FullOutputGroup OBJECT-GROUP
       OBJECTS { ups12OutputSource, ups12OutputFrequency,
                 ups12OutputNumLines, ups12OutputVoltage,
                 ups12OutputCurrent, ups12OutputPower,
                 ups12OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups12FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups12FullGroups 4 }

   ups12FullBypassGroup OBJECT-GROUP
       OBJECTS { ups12BypassFrequency, ups12BypassNumLines,
                 ups12BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups12FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups12FullGroups 5 }

   ups12FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups12AlarmsPresent, ups12AlarmDescr, ups12AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups12FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups12FullGroups 6 }

   ups12FullTestGroup OBJECT-GROUP
       OBJECTS { ups12TestId, ups12TestSpinLock,
                 ups12TestResultsSummary, ups12TestResultsDetail,
                 ups12TestStartTime, ups12TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups12FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups12FullGroups 7 }

   ups12FullControlGroup OBJECT-GROUP
       OBJECTS { ups12ShutdownType, ups12ShutdownAfterDelay,
                 ups12StartupAfterDelay, ups12RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups12FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups12FullGroups 8 }


   --*******************************************************************
   --
   -- Module 13 data
   --

   upsModule13           OBJECT IDENTIFIER ::= { upsModular 14 }
   ups13Objects           OBJECT IDENTIFIER ::= { upsModule13 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups13IdentName and
   --      ups13IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups13Ident              OBJECT IDENTIFIER ::= { ups13Objects 1 }

   ups13IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups13Ident 1 }

   ups13IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups13Ident 2 }

   ups13IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups13IdentAgentSoftwareVersion in some implementations."
       ::= { ups13Ident 3 }

   ups13IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups13IdentUPSSoftwareVersion in some implementations."
       ::= { ups13Ident 4 }

   ups13IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups13Ident 5 }

   ups13IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups13Ident 6 }


   --
   -- Battery Group
   --

   ups13Battery            OBJECT IDENTIFIER ::= { ups13Objects 2 }

   ups13BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups13ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups13ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups13Battery 1 }

   ups13SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups13Battery 2 }

   ups13EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups13Battery 3 }

   ups13EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups13Battery 4 }

   ups13BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups13Battery 5 }

   ups13BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups13Battery 6 }

   ups13BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups13Battery 7 }


   --
   -- Input Group
   --

   ups13Input              OBJECT IDENTIFIER ::= { ups13Objects 3 }

   ups13InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups13Input 1 }


   ups13InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups13Input 2 }

   ups13InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups13InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups13InputNumLines."
       ::= { ups13Input 3 }

   ups13InputEntry OBJECT-TYPE
       SYNTAX     Ups13InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups13InputLineIndex }
       ::= { ups13InputTable 1 }

   Ups13InputEntry ::= SEQUENCE {
       ups13InputLineIndex   PositiveInteger,
       ups13InputFrequency   NonNegativeInteger,
       ups13InputVoltage     NonNegativeInteger,
       ups13InputCurrent     NonNegativeInteger,
       ups13InputTruePower   NonNegativeInteger
   }

   ups13InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups13InputEntry 1 }

   ups13InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups13InputEntry 2 }

   ups13InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups13InputEntry 3 }

   ups13InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups13InputEntry 4 }

   ups13InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups13InputEntry 5 }


   --
   -- The Output group.
   --

   ups13Output             OBJECT IDENTIFIER ::= { ups13Objects 4 }

   ups13OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups13Output 1 }

   ups13OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups13Output 2 }

   ups13OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups13Output 3 }

   ups13OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups13OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups13OutputNumLines."
       ::= { ups13Output 4 }

   ups13OutputEntry OBJECT-TYPE
       SYNTAX     Ups13OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups13OutputLineIndex }
       ::= { ups13OutputTable 1 }

   Ups13OutputEntry ::= SEQUENCE {
       ups13OutputLineIndex   PositiveInteger,
       ups13OutputVoltage     NonNegativeInteger,
       ups13OutputCurrent     NonNegativeInteger,
       ups13OutputPower       NonNegativeInteger,
       ups13OutputPercentLoad INTEGER
   }

   ups13OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups13OutputEntry 1 }

   ups13OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups13OutputEntry 2 }

   ups13OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups13OutputEntry 3 }

   ups13OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups13OutputEntry 4 }

   ups13OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups13OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups13Bypass             OBJECT IDENTIFIER ::= { ups13Objects 5 }

   ups13BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups13Bypass 1 }

   ups13BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups13Bypass 2 }

   ups13BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups13BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups13BypassNumLines."
       ::= { ups13Bypass 3 }

   ups13BypassEntry OBJECT-TYPE
       SYNTAX     Ups13BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups13BypassLineIndex }
       ::= { ups13BypassTable 1 }

   Ups13BypassEntry ::= SEQUENCE {
       ups13BypassLineIndex  PositiveInteger,
       ups13BypassVoltage    NonNegativeInteger,
       ups13BypassCurrent    NonNegativeInteger,
       ups13BypassPower      NonNegativeInteger
   }

   ups13BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups13BypassEntry 1 }

   ups13BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups13BypassEntry 2 }

   ups13BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups13BypassEntry 3 }

   ups13BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups13BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups13Alarm              OBJECT IDENTIFIER ::= { ups13Objects 6 }

   ups13AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups13Alarm 1 }

   ups13AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups13AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups13AlarmId equal to 1, and increments the value of
               ups13AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups13AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups13AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups13AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups13AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups13AlarmsPresent."
       ::= { ups13Alarm 2 }

   ups13AlarmEntry OBJECT-TYPE
       SYNTAX     Ups13AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups13AlarmId }
       ::= { ups13AlarmTable 1 }

   Ups13AlarmEntry ::= SEQUENCE {
       ups13AlarmId          PositiveInteger,
       ups13AlarmDescr       AutonomousType,
       ups13AlarmTime        TimeStamp
   }

   ups13AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups13AlarmEntry 1 }

   ups13AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups13AlarmEntry 2 }

   ups13AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups13AlarmTime shall equal
               0."
       ::= { ups13AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups13WellKnownAlarms    OBJECT IDENTIFIER ::= { ups13Alarm 3 }
   ups13AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups13WellKnownAlarms  1 }

   ups13AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups13WellKnownAlarms  2 }

   ups13AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups13ConfigLowBattTime."
       ::= { ups13WellKnownAlarms  3 }


   ups13AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups13WellKnownAlarms  4 }

   ups13AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups13WellKnownAlarms  5 }

   ups13AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups13WellKnownAlarms  6 }

   ups13AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups13WellKnownAlarms  7 }

   ups13AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups13WellKnownAlarms  8 }

   ups13AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups13WellKnownAlarms  9 }

   ups13AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups13WellKnownAlarms 10 }

   ups13AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups13WellKnownAlarms 11 }

   ups13AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups13WellKnownAlarms 12 }

   ups13AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups13WellKnownAlarms 13 }

   ups13AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups13WellKnownAlarms 14 }

   ups13AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups13WellKnownAlarms 15 }

   ups13AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups13WellKnownAlarms 16 }

   ups13AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups13WellKnownAlarms 17 }

   ups13AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups13WellKnownAlarms 18 }

   ups13AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups13WellKnownAlarms 19 }

   ups13AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups13WellKnownAlarms 20 }

   ups13AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups13WellKnownAlarms 21 }

   ups13AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups13ShutdownAfterDelay countdown is underway."
       ::= { ups13WellKnownAlarms 22 }

   ups13AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups13WellKnownAlarms 23 }

   ups13AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups13WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups13Test               OBJECT IDENTIFIER ::= { ups13Objects 7 }

   ups13TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups13TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups13TestResultsSummary. Tests in progress may be
               aborted by setting the ups13TestId variable to
               ups13TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups13TestNoTestsInitiated is returned."
       ::= { ups13Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups13TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups13TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups13TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups13TestResultsSummary */
                     get (upsTestSpinLock, ups13TestResultsSummary,
               ups13TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups13TestResultsSummary,
               ups13TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups13TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups13TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups13Test 2 }

   ups13TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups13TestId to ups13TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups13Test 3 }

   ups13TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups13TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups13Test 4 }

   ups13TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups13TestResultsSummary is noTestsInitiated(6),
               ups13TestStartTime has the value 0."
       ::= { ups13Test 5 }

   ups13TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups13TestResultsSummary is noTestsInitiated(6),
               ups13TestElapsedTime has the value 0."
       ::= { ups13Test 6 }

   --
   -- Well known tests.
   --

   ups13WellKnownTests     OBJECT IDENTIFIER ::= { ups13Test 7 }


   ups13TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups13WellKnownTests  1 }

   ups13TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups13WellKnownTests  2 }

   ups13TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups13WellKnownTests  3 }

   ups13TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups13WellKnownTests  4 }

   ups13TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups13WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups13Control            OBJECT IDENTIFIER ::= { ups13Objects 8 }

   ups13ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups13ShutdownAfterDelay and ups13RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups13Control 1 }

   ups13ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups13ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups13ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups13ShutdownType =
               output and the output is already off.  When read,
               ups13ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups13ShutdownAfterDelay already in effect."
       ::= { ups13Control 2 }

   ups13StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups13StartupAfterDelay
               countdown or ups13RebootWithDuration countdown in
               progress.  When read, ups13StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups13Control 3 }

   ups13RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups13ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups13RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups13Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups13Traps              OBJECT IDENTIFIER ::= { upsModule13 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups13TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups13EstimatedMinutesRemaining, ups13SecondsOnBattery,
                 ups13ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups13Traps 1 }

   ups13TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups13TestId, ups13TestSpinLock,
                 ups13TestResultsSummary, ups13TestResultsDetail,
                 ups13TestStartTime, ups13TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups13Traps 2 }

   ups13TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups13AlarmId, ups13AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups13AlarmOnBattery and
               ups13AlarmTestInProgress."
     ::= { ups13Traps 3 }

   ups13TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups13AlarmId, ups13AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups13AlarmTestInProgress."
     ::= { ups13Traps 4 }


   --
   -- conformance information
   --
   ups13Conformance        OBJECT IDENTIFIER ::= { upsModule13 3 }

   ups13Compliances        OBJECT IDENTIFIER ::= { ups13Conformance 1 }


   --
   -- compliance statements
   --

   ups13SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups13SubsetIdentGroup,
                     ups13SubsetBatteryGroup, ups13SubsetInputGroup,
                     ups13SubsetOutputGroup, ups13SubsetAlarmGroup,
                     ups13SubsetControlGroup }

       OBJECT     ups13BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups13AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups13AlarmOnBattery, ups13AlarmLowBattery,
               ups13AlarmInputBad, ups13AlarmUpsOutputOff,
               ups13AlarmUpsSystemOff, and ups13AlarmTestInProgress."

       OBJECT     ups13OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups13ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups13Compliances 1 }

   ups13BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups13BasicIdentGroup,
                     ups13BasicBatteryGroup, ups13BasicInputGroup,
                     ups13BasicOutputGroup, ups13BasicAlarmGroup,
                     ups13BasicTestGroup, ups13BasicControlGroup }


       OBJECT     ups13AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups13AlarmOnBattery, ups13AlarmLowBattery,
               ups13AlarmDepletedBattery, ups13AlarmTempBad,
               ups13AlarmInputBad, ups13AlarmOutputOverload,
               ups13AlarmOnBypass, ups13AlarmBypassBad,
               ups13AlarmOutputOffAsRequested,
               ups13AlarmUpsOffAsRequested, ups13AlarmUpsOutputOff,
               ups13AlarmUpsSystemOff, ups13AlarmGeneralFault,
               ups13AlarmDiagnosticTestFailed,
               ups13AlarmCommunicationsLost, ups13AlarmShutdownPending,
               and ups13AlarmTestInProgress."

       OBJECT     ups13TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups13TestNoTestsInitiated."

       OBJECT     ups13OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups13BasicBypassGroup
           DESCRIPTION
               "The ups13BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups13ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups13Compliances 2 }

   ups13FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups13FullIdentGroup, ups13FullBatteryGroup,
                     ups13FullInputGroup, ups13FullOutputGroup,
                     ups13FullAlarmGroup, ups13FullTestGroup,
                     ups13FullControlGroup }

       OBJECT     ups13AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups13AlarmBatteryBad, ups13AlarmOnBattery,
               ups13AlarmLowBattery, ups13AlarmDepletedBattery,
               ups13AlarmTempBad, ups13AlarmInputBad, ups13AlarmOnBypass,
               ups13AlarmBypassBad, ups13AlarmOutputOffAsRequested,
               ups13AlarmUpsOffAsRequested, ups13AlarmUpsOutputOff,
               ups13AlarmUpsSystemOff, ups13AlarmGeneralFault,
               ups13AlarmDiagnosticTestFailed,
               ups13AlarmCommunicationsLost, ups13AlarmShutdownPending,
               and ups13AlarmTestInProgress."

       OBJECT     ups13TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups13TestNoTestsInitiated,
               ups13TestGeneralSystemsTest, and
               ups13TestQuickBatteryTest."

       OBJECT     ups13OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups13FullBypassGroup
           DESCRIPTION
               "The ups13FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups13ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups13Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups13Groups             OBJECT IDENTIFIER ::= { ups13Conformance 2 }

   ups13SubsetGroups       OBJECT IDENTIFIER ::= { ups13Groups 1 }

   ups13SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups13IdentManufacturer, ups13IdentModel,
                 ups13IdentAgentSoftwareVersion, ups13IdentName,
                 ups13IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups13SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups13SubsetGroups 1 }

   ups13SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups13BatteryStatus, ups13SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups13SubsetGroups 2 }

   ups13SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups13InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups13SubsetGroups 3 }

   ups13SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups13OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups13SubsetGroups 4 }


   -- { ups13SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups13SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups13AlarmsPresent, ups13AlarmDescr, ups13AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups13SubsetGroups 6 }

   -- { ups13SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups13SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups13ShutdownType, ups13ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups13SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups13SubsetGroups 8 }

   ups13BasicGroups        OBJECT IDENTIFIER ::= { ups13Groups 2 }

   ups13BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups13IdentManufacturer, ups13IdentModel,
                 ups13IdentUPSSoftwareVersion,
                 ups13IdentAgentSoftwareVersion, ups13IdentName }
       STATUS  current
       DESCRIPTION
               "The ups13BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 1 }

   ups13BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups13BatteryStatus, ups13SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups13BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 2 }

   ups13BasicInputGroup OBJECT-GROUP
       OBJECTS { ups13InputLineBads, ups13InputNumLines,
                 ups13InputFrequency, ups13InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups13BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 3 }

   ups13BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups13OutputSource, ups13OutputFrequency,
                 ups13OutputNumLines, ups13OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups13BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 4 }

   ups13BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups13BypassFrequency, ups13BypassNumLines,
                 ups13BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups13BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 5 }

   ups13BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups13AlarmsPresent, ups13AlarmDescr, ups13AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups13BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 6 }

   ups13BasicTestGroup OBJECT-GROUP
       OBJECTS { ups13TestId, ups13TestSpinLock,
                 ups13TestResultsSummary, ups13TestResultsDetail,
                 ups13TestStartTime, ups13TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups13BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 7 }

   ups13BasicControlGroup OBJECT-GROUP
       OBJECTS { ups13ShutdownType, ups13ShutdownAfterDelay,
                 ups13StartupAfterDelay, ups13RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups13BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups13BasicGroups 8 }

   ups13FullGroups         OBJECT IDENTIFIER ::= { ups13Groups 3 }

   ups13FullIdentGroup OBJECT-GROUP
       OBJECTS { ups13IdentManufacturer, ups13IdentModel,
                 ups13IdentUPSSoftwareVersion,
                 ups13IdentAgentSoftwareVersion, ups13IdentName,
                 ups13IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups13FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups13FullGroups 1 }

   ups13FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups13BatteryStatus, ups13SecondsOnBattery,
                 ups13EstimatedMinutesRemaining,
                 ups13EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups13FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups13FullGroups 2 }

   ups13FullInputGroup OBJECT-GROUP
       OBJECTS { ups13InputLineBads, ups13InputNumLines,
                 ups13InputFrequency, ups13InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups13FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups13FullGroups 3 }

   ups13FullOutputGroup OBJECT-GROUP
       OBJECTS { ups13OutputSource, ups13OutputFrequency,
                 ups13OutputNumLines, ups13OutputVoltage,
                 ups13OutputCurrent, ups13OutputPower,
                 ups13OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups13FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups13FullGroups 4 }

   ups13FullBypassGroup OBJECT-GROUP
       OBJECTS { ups13BypassFrequency, ups13BypassNumLines,
                 ups13BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups13FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups13FullGroups 5 }

   ups13FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups13AlarmsPresent, ups13AlarmDescr, ups13AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups13FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups13FullGroups 6 }

   ups13FullTestGroup OBJECT-GROUP
       OBJECTS { ups13TestId, ups13TestSpinLock,
                 ups13TestResultsSummary, ups13TestResultsDetail,
                 ups13TestStartTime, ups13TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups13FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups13FullGroups 7 }

   ups13FullControlGroup OBJECT-GROUP
       OBJECTS { ups13ShutdownType, ups13ShutdownAfterDelay,
                 ups13StartupAfterDelay, ups13RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups13FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups13FullGroups 8 }


   --*******************************************************************
   --
   -- Module 14 data
   --

   upsModule14           OBJECT IDENTIFIER ::= { upsModular 15 }
   ups14Objects           OBJECT IDENTIFIER ::= { upsModule14 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups14IdentName and
   --      ups14IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups14Ident              OBJECT IDENTIFIER ::= { ups14Objects 1 }

   ups14IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups14Ident 1 }

   ups14IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups14Ident 2 }

   ups14IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups14IdentAgentSoftwareVersion in some implementations."
       ::= { ups14Ident 3 }

   ups14IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups14IdentUPSSoftwareVersion in some implementations."
       ::= { ups14Ident 4 }

   ups14IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups14Ident 5 }

   ups14IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups14Ident 6 }


   --
   -- Battery Group
   --

   ups14Battery            OBJECT IDENTIFIER ::= { ups14Objects 2 }

   ups14BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups14ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups14ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups14Battery 1 }

   ups14SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups14Battery 2 }

   ups14EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups14Battery 3 }

   ups14EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups14Battery 4 }

   ups14BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups14Battery 5 }

   ups14BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups14Battery 6 }

   ups14BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups14Battery 7 }


   --
   -- Input Group
   --

   ups14Input              OBJECT IDENTIFIER ::= { ups14Objects 3 }

   ups14InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups14Input 1 }


   ups14InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups14Input 2 }

   ups14InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups14InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups14InputNumLines."
       ::= { ups14Input 3 }

   ups14InputEntry OBJECT-TYPE
       SYNTAX     Ups14InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups14InputLineIndex }
       ::= { ups14InputTable 1 }

   Ups14InputEntry ::= SEQUENCE {
       ups14InputLineIndex   PositiveInteger,
       ups14InputFrequency   NonNegativeInteger,
       ups14InputVoltage     NonNegativeInteger,
       ups14InputCurrent     NonNegativeInteger,
       ups14InputTruePower   NonNegativeInteger
   }

   ups14InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups14InputEntry 1 }

   ups14InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups14InputEntry 2 }

   ups14InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups14InputEntry 3 }

   ups14InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups14InputEntry 4 }

   ups14InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups14InputEntry 5 }


   --
   -- The Output group.
   --

   ups14Output             OBJECT IDENTIFIER ::= { ups14Objects 4 }

   ups14OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups14Output 1 }

   ups14OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups14Output 2 }

   ups14OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups14Output 3 }

   ups14OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups14OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups14OutputNumLines."
       ::= { ups14Output 4 }

   ups14OutputEntry OBJECT-TYPE
       SYNTAX     Ups14OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups14OutputLineIndex }
       ::= { ups14OutputTable 1 }

   Ups14OutputEntry ::= SEQUENCE {
       ups14OutputLineIndex   PositiveInteger,
       ups14OutputVoltage     NonNegativeInteger,
       ups14OutputCurrent     NonNegativeInteger,
       ups14OutputPower       NonNegativeInteger,
       ups14OutputPercentLoad INTEGER
   }

   ups14OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups14OutputEntry 1 }

   ups14OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups14OutputEntry 2 }

   ups14OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups14OutputEntry 3 }

   ups14OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups14OutputEntry 4 }

   ups14OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups14OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups14Bypass             OBJECT IDENTIFIER ::= { ups14Objects 5 }

   ups14BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups14Bypass 1 }

   ups14BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups14Bypass 2 }

   ups14BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups14BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups14BypassNumLines."
       ::= { ups14Bypass 3 }

   ups14BypassEntry OBJECT-TYPE
       SYNTAX     Ups14BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups14BypassLineIndex }
       ::= { ups14BypassTable 1 }

   Ups14BypassEntry ::= SEQUENCE {
       ups14BypassLineIndex  PositiveInteger,
       ups14BypassVoltage    NonNegativeInteger,
       ups14BypassCurrent    NonNegativeInteger,
       ups14BypassPower      NonNegativeInteger
   }

   ups14BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups14BypassEntry 1 }

   ups14BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups14BypassEntry 2 }

   ups14BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups14BypassEntry 3 }

   ups14BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups14BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups14Alarm              OBJECT IDENTIFIER ::= { ups14Objects 6 }

   ups14AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups14Alarm 1 }

   ups14AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups14AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups14AlarmId equal to 1, and increments the value of
               ups14AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups14AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups14AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups14AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups14AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups14AlarmsPresent."
       ::= { ups14Alarm 2 }

   ups14AlarmEntry OBJECT-TYPE
       SYNTAX     Ups14AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups14AlarmId }
       ::= { ups14AlarmTable 1 }

   Ups14AlarmEntry ::= SEQUENCE {
       ups14AlarmId          PositiveInteger,
       ups14AlarmDescr       AutonomousType,
       ups14AlarmTime        TimeStamp
   }

   ups14AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups14AlarmEntry 1 }

   ups14AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups14AlarmEntry 2 }

   ups14AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups14AlarmTime shall equal
               0."
       ::= { ups14AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups14WellKnownAlarms    OBJECT IDENTIFIER ::= { ups14Alarm 3 }
   ups14AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups14WellKnownAlarms  1 }

   ups14AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups14WellKnownAlarms  2 }

   ups14AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups14ConfigLowBattTime."
       ::= { ups14WellKnownAlarms  3 }


   ups14AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups14WellKnownAlarms  4 }

   ups14AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups14WellKnownAlarms  5 }

   ups14AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups14WellKnownAlarms  6 }

   ups14AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups14WellKnownAlarms  7 }

   ups14AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups14WellKnownAlarms  8 }

   ups14AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups14WellKnownAlarms  9 }

   ups14AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups14WellKnownAlarms 10 }

   ups14AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups14WellKnownAlarms 11 }

   ups14AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups14WellKnownAlarms 12 }

   ups14AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups14WellKnownAlarms 13 }

   ups14AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups14WellKnownAlarms 14 }

   ups14AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups14WellKnownAlarms 15 }

   ups14AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups14WellKnownAlarms 16 }

   ups14AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups14WellKnownAlarms 17 }

   ups14AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups14WellKnownAlarms 18 }

   ups14AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups14WellKnownAlarms 19 }

   ups14AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups14WellKnownAlarms 20 }

   ups14AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups14WellKnownAlarms 21 }

   ups14AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups14ShutdownAfterDelay countdown is underway."
       ::= { ups14WellKnownAlarms 22 }

   ups14AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups14WellKnownAlarms 23 }

   ups14AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups14WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups14Test               OBJECT IDENTIFIER ::= { ups14Objects 7 }

   ups14TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups14TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups14TestResultsSummary. Tests in progress may be
               aborted by setting the ups14TestId variable to
               ups14TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups14TestNoTestsInitiated is returned."
       ::= { ups14Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups14TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups14TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups14TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups14TestResultsSummary */
                     get (upsTestSpinLock, ups14TestResultsSummary,
               ups14TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups14TestResultsSummary,
               ups14TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups14TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups14TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups14Test 2 }

   ups14TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups14TestId to ups14TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups14Test 3 }

   ups14TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups14TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups14Test 4 }

   ups14TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups14TestResultsSummary is noTestsInitiated(6),
               ups14TestStartTime has the value 0."
       ::= { ups14Test 5 }

   ups14TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups14TestResultsSummary is noTestsInitiated(6),
               ups14TestElapsedTime has the value 0."
       ::= { ups14Test 6 }

   --
   -- Well known tests.
   --

   ups14WellKnownTests     OBJECT IDENTIFIER ::= { ups14Test 7 }


   ups14TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups14WellKnownTests  1 }

   ups14TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups14WellKnownTests  2 }

   ups14TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups14WellKnownTests  3 }

   ups14TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups14WellKnownTests  4 }

   ups14TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups14WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups14Control            OBJECT IDENTIFIER ::= { ups14Objects 8 }

   ups14ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups14ShutdownAfterDelay and ups14RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups14Control 1 }

   ups14ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups14ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups14ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups14ShutdownType =
               output and the output is already off.  When read,
               ups14ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups14ShutdownAfterDelay already in effect."
       ::= { ups14Control 2 }

   ups14StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups14StartupAfterDelay
               countdown or ups14RebootWithDuration countdown in
               progress.  When read, ups14StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups14Control 3 }

   ups14RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups14ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups14RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups14Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups14Traps              OBJECT IDENTIFIER ::= { upsModule14 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups14TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups14EstimatedMinutesRemaining, ups14SecondsOnBattery,
                 ups14ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups14Traps 1 }

   ups14TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups14TestId, ups14TestSpinLock,
                 ups14TestResultsSummary, ups14TestResultsDetail,
                 ups14TestStartTime, ups14TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups14Traps 2 }

   ups14TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups14AlarmId, ups14AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups14AlarmOnBattery and
               ups14AlarmTestInProgress."
     ::= { ups14Traps 3 }

   ups14TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups14AlarmId, ups14AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups14AlarmTestInProgress."
     ::= { ups14Traps 4 }


   --
   -- conformance information
   --
   ups14Conformance        OBJECT IDENTIFIER ::= { upsModule14 3 }

   ups14Compliances        OBJECT IDENTIFIER ::= { ups14Conformance 1 }


   --
   -- compliance statements
   --

   ups14SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups14SubsetIdentGroup,
                     ups14SubsetBatteryGroup, ups14SubsetInputGroup,
                     ups14SubsetOutputGroup, ups14SubsetAlarmGroup,
                     ups14SubsetControlGroup }

       OBJECT     ups14BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups14AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups14AlarmOnBattery, ups14AlarmLowBattery,
               ups14AlarmInputBad, ups14AlarmUpsOutputOff,
               ups14AlarmUpsSystemOff, and ups14AlarmTestInProgress."

       OBJECT     ups14OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups14ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups14Compliances 1 }

   ups14BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups14BasicIdentGroup,
                     ups14BasicBatteryGroup, ups14BasicInputGroup,
                     ups14BasicOutputGroup, ups14BasicAlarmGroup,
                     ups14BasicTestGroup, ups14BasicControlGroup }


       OBJECT     ups14AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups14AlarmOnBattery, ups14AlarmLowBattery,
               ups14AlarmDepletedBattery, ups14AlarmTempBad,
               ups14AlarmInputBad, ups14AlarmOutputOverload,
               ups14AlarmOnBypass, ups14AlarmBypassBad,
               ups14AlarmOutputOffAsRequested,
               ups14AlarmUpsOffAsRequested, ups14AlarmUpsOutputOff,
               ups14AlarmUpsSystemOff, ups14AlarmGeneralFault,
               ups14AlarmDiagnosticTestFailed,
               ups14AlarmCommunicationsLost, ups14AlarmShutdownPending,
               and ups14AlarmTestInProgress."

       OBJECT     ups14TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups14TestNoTestsInitiated."

       OBJECT     ups14OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups14BasicBypassGroup
           DESCRIPTION
               "The ups14BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups14ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups14Compliances 2 }

   ups14FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups14FullIdentGroup, ups14FullBatteryGroup,
                     ups14FullInputGroup, ups14FullOutputGroup,
                     ups14FullAlarmGroup, ups14FullTestGroup,
                     ups14FullControlGroup }

       OBJECT     ups14AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups14AlarmBatteryBad, ups14AlarmOnBattery,
               ups14AlarmLowBattery, ups14AlarmDepletedBattery,
               ups14AlarmTempBad, ups14AlarmInputBad, ups14AlarmOnBypass,
               ups14AlarmBypassBad, ups14AlarmOutputOffAsRequested,
               ups14AlarmUpsOffAsRequested, ups14AlarmUpsOutputOff,
               ups14AlarmUpsSystemOff, ups14AlarmGeneralFault,
               ups14AlarmDiagnosticTestFailed,
               ups14AlarmCommunicationsLost, ups14AlarmShutdownPending,
               and ups14AlarmTestInProgress."

       OBJECT     ups14TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups14TestNoTestsInitiated,
               ups14TestGeneralSystemsTest, and
               ups14TestQuickBatteryTest."

       OBJECT     ups14OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups14FullBypassGroup
           DESCRIPTION
               "The ups14FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups14ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups14Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups14Groups             OBJECT IDENTIFIER ::= { ups14Conformance 2 }

   ups14SubsetGroups       OBJECT IDENTIFIER ::= { ups14Groups 1 }

   ups14SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups14IdentManufacturer, ups14IdentModel,
                 ups14IdentAgentSoftwareVersion, ups14IdentName,
                 ups14IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups14SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups14SubsetGroups 1 }

   ups14SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups14BatteryStatus, ups14SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups14SubsetGroups 2 }

   ups14SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups14InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups14SubsetGroups 3 }

   ups14SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups14OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups14SubsetGroups 4 }


   -- { ups14SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups14SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups14AlarmsPresent, ups14AlarmDescr, ups14AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups14SubsetGroups 6 }

   -- { ups14SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups14SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups14ShutdownType, ups14ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups14SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups14SubsetGroups 8 }

   ups14BasicGroups        OBJECT IDENTIFIER ::= { ups14Groups 2 }

   ups14BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups14IdentManufacturer, ups14IdentModel,
                 ups14IdentUPSSoftwareVersion,
                 ups14IdentAgentSoftwareVersion, ups14IdentName }
       STATUS  current
       DESCRIPTION
               "The ups14BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 1 }

   ups14BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups14BatteryStatus, ups14SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups14BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 2 }

   ups14BasicInputGroup OBJECT-GROUP
       OBJECTS { ups14InputLineBads, ups14InputNumLines,
                 ups14InputFrequency, ups14InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups14BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 3 }

   ups14BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups14OutputSource, ups14OutputFrequency,
                 ups14OutputNumLines, ups14OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups14BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 4 }

   ups14BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups14BypassFrequency, ups14BypassNumLines,
                 ups14BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups14BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 5 }

   ups14BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups14AlarmsPresent, ups14AlarmDescr, ups14AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups14BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 6 }

   ups14BasicTestGroup OBJECT-GROUP
       OBJECTS { ups14TestId, ups14TestSpinLock,
                 ups14TestResultsSummary, ups14TestResultsDetail,
                 ups14TestStartTime, ups14TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups14BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 7 }

   ups14BasicControlGroup OBJECT-GROUP
       OBJECTS { ups14ShutdownType, ups14ShutdownAfterDelay,
                 ups14StartupAfterDelay, ups14RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups14BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups14BasicGroups 8 }

   ups14FullGroups         OBJECT IDENTIFIER ::= { ups14Groups 3 }

   ups14FullIdentGroup OBJECT-GROUP
       OBJECTS { ups14IdentManufacturer, ups14IdentModel,
                 ups14IdentUPSSoftwareVersion,
                 ups14IdentAgentSoftwareVersion, ups14IdentName,
                 ups14IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups14FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups14FullGroups 1 }

   ups14FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups14BatteryStatus, ups14SecondsOnBattery,
                 ups14EstimatedMinutesRemaining,
                 ups14EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups14FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups14FullGroups 2 }

   ups14FullInputGroup OBJECT-GROUP
       OBJECTS { ups14InputLineBads, ups14InputNumLines,
                 ups14InputFrequency, ups14InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups14FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups14FullGroups 3 }

   ups14FullOutputGroup OBJECT-GROUP
       OBJECTS { ups14OutputSource, ups14OutputFrequency,
                 ups14OutputNumLines, ups14OutputVoltage,
                 ups14OutputCurrent, ups14OutputPower,
                 ups14OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups14FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups14FullGroups 4 }

   ups14FullBypassGroup OBJECT-GROUP
       OBJECTS { ups14BypassFrequency, ups14BypassNumLines,
                 ups14BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups14FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups14FullGroups 5 }

   ups14FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups14AlarmsPresent, ups14AlarmDescr, ups14AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups14FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups14FullGroups 6 }

   ups14FullTestGroup OBJECT-GROUP
       OBJECTS { ups14TestId, ups14TestSpinLock,
                 ups14TestResultsSummary, ups14TestResultsDetail,
                 ups14TestStartTime, ups14TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups14FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups14FullGroups 7 }

   ups14FullControlGroup OBJECT-GROUP
       OBJECTS { ups14ShutdownType, ups14ShutdownAfterDelay,
                 ups14StartupAfterDelay, ups14RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups14FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups14FullGroups 8 }


   --*******************************************************************
   --
   -- Module 15 data
   --

   upsModule15           OBJECT IDENTIFIER ::= { upsModular 16 }
   ups15Objects           OBJECT IDENTIFIER ::= { upsModule15 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups15IdentName and
   --      ups15IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups15Ident              OBJECT IDENTIFIER ::= { ups15Objects 1 }

   ups15IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups15Ident 1 }

   ups15IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups15Ident 2 }

   ups15IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups15IdentAgentSoftwareVersion in some implementations."
       ::= { ups15Ident 3 }

   ups15IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups15IdentUPSSoftwareVersion in some implementations."
       ::= { ups15Ident 4 }

   ups15IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups15Ident 5 }

   ups15IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups15Ident 6 }


   --
   -- Battery Group
   --

   ups15Battery            OBJECT IDENTIFIER ::= { ups15Objects 2 }

   ups15BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups15ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups15ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups15Battery 1 }

   ups15SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups15Battery 2 }

   ups15EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups15Battery 3 }

   ups15EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups15Battery 4 }

   ups15BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups15Battery 5 }

   ups15BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups15Battery 6 }

   ups15BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups15Battery 7 }


   --
   -- Input Group
   --

   ups15Input              OBJECT IDENTIFIER ::= { ups15Objects 3 }

   ups15InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups15Input 1 }


   ups15InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups15Input 2 }

   ups15InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups15InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups15InputNumLines."
       ::= { ups15Input 3 }

   ups15InputEntry OBJECT-TYPE
       SYNTAX     Ups15InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups15InputLineIndex }
       ::= { ups15InputTable 1 }

   Ups15InputEntry ::= SEQUENCE {
       ups15InputLineIndex   PositiveInteger,
       ups15InputFrequency   NonNegativeInteger,
       ups15InputVoltage     NonNegativeInteger,
       ups15InputCurrent     NonNegativeInteger,
       ups15InputTruePower   NonNegativeInteger
   }

   ups15InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups15InputEntry 1 }

   ups15InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups15InputEntry 2 }

   ups15InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups15InputEntry 3 }

   ups15InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups15InputEntry 4 }

   ups15InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups15InputEntry 5 }


   --
   -- The Output group.
   --

   ups15Output             OBJECT IDENTIFIER ::= { ups15Objects 4 }

   ups15OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups15Output 1 }

   ups15OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups15Output 2 }

   ups15OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups15Output 3 }

   ups15OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups15OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups15OutputNumLines."
       ::= { ups15Output 4 }

   ups15OutputEntry OBJECT-TYPE
       SYNTAX     Ups15OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups15OutputLineIndex }
       ::= { ups15OutputTable 1 }

   Ups15OutputEntry ::= SEQUENCE {
       ups15OutputLineIndex   PositiveInteger,
       ups15OutputVoltage     NonNegativeInteger,
       ups15OutputCurrent     NonNegativeInteger,
       ups15OutputPower       NonNegativeInteger,
       ups15OutputPercentLoad INTEGER
   }

   ups15OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups15OutputEntry 1 }

   ups15OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups15OutputEntry 2 }

   ups15OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups15OutputEntry 3 }

   ups15OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups15OutputEntry 4 }

   ups15OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups15OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups15Bypass             OBJECT IDENTIFIER ::= { ups15Objects 5 }

   ups15BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups15Bypass 1 }

   ups15BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups15Bypass 2 }

   ups15BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups15BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups15BypassNumLines."
       ::= { ups15Bypass 3 }

   ups15BypassEntry OBJECT-TYPE
       SYNTAX     Ups15BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups15BypassLineIndex }
       ::= { ups15BypassTable 1 }

   Ups15BypassEntry ::= SEQUENCE {
       ups15BypassLineIndex  PositiveInteger,
       ups15BypassVoltage    NonNegativeInteger,
       ups15BypassCurrent    NonNegativeInteger,
       ups15BypassPower      NonNegativeInteger
   }

   ups15BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups15BypassEntry 1 }

   ups15BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups15BypassEntry 2 }

   ups15BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups15BypassEntry 3 }

   ups15BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups15BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups15Alarm              OBJECT IDENTIFIER ::= { ups15Objects 6 }

   ups15AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups15Alarm 1 }

   ups15AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups15AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups15AlarmId equal to 1, and increments the value of
               ups15AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups15AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups15AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups15AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups15AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups15AlarmsPresent."
       ::= { ups15Alarm 2 }

   ups15AlarmEntry OBJECT-TYPE
       SYNTAX     Ups15AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups15AlarmId }
       ::= { ups15AlarmTable 1 }

   Ups15AlarmEntry ::= SEQUENCE {
       ups15AlarmId          PositiveInteger,
       ups15AlarmDescr       AutonomousType,
       ups15AlarmTime        TimeStamp
   }

   ups15AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups15AlarmEntry 1 }

   ups15AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups15AlarmEntry 2 }

   ups15AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups15AlarmTime shall equal
               0."
       ::= { ups15AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups15WellKnownAlarms    OBJECT IDENTIFIER ::= { ups15Alarm 3 }
   ups15AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups15WellKnownAlarms  1 }

   ups15AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups15WellKnownAlarms  2 }

   ups15AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups15ConfigLowBattTime."
       ::= { ups15WellKnownAlarms  3 }


   ups15AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups15WellKnownAlarms  4 }

   ups15AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups15WellKnownAlarms  5 }

   ups15AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups15WellKnownAlarms  6 }

   ups15AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups15WellKnownAlarms  7 }

   ups15AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups15WellKnownAlarms  8 }

   ups15AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups15WellKnownAlarms  9 }

   ups15AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups15WellKnownAlarms 10 }

   ups15AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups15WellKnownAlarms 11 }

   ups15AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups15WellKnownAlarms 12 }

   ups15AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups15WellKnownAlarms 13 }

   ups15AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups15WellKnownAlarms 14 }

   ups15AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups15WellKnownAlarms 15 }

   ups15AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups15WellKnownAlarms 16 }

   ups15AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups15WellKnownAlarms 17 }

   ups15AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups15WellKnownAlarms 18 }

   ups15AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups15WellKnownAlarms 19 }

   ups15AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups15WellKnownAlarms 20 }

   ups15AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups15WellKnownAlarms 21 }

   ups15AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups15ShutdownAfterDelay countdown is underway."
       ::= { ups15WellKnownAlarms 22 }

   ups15AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups15WellKnownAlarms 23 }

   ups15AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups15WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups15Test               OBJECT IDENTIFIER ::= { ups15Objects 7 }

   ups15TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups15TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups15TestResultsSummary. Tests in progress may be
               aborted by setting the ups15TestId variable to
               ups15TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups15TestNoTestsInitiated is returned."
       ::= { ups15Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups15TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups15TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups15TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups15TestResultsSummary */
                     get (upsTestSpinLock, ups15TestResultsSummary,
               ups15TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups15TestResultsSummary,
               ups15TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups15TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups15TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups15Test 2 }

   ups15TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups15TestId to ups15TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups15Test 3 }

   ups15TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups15TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups15Test 4 }

   ups15TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups15TestResultsSummary is noTestsInitiated(6),
               ups15TestStartTime has the value 0."
       ::= { ups15Test 5 }

   ups15TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups15TestResultsSummary is noTestsInitiated(6),
               ups15TestElapsedTime has the value 0."
       ::= { ups15Test 6 }

   --
   -- Well known tests.
   --

   ups15WellKnownTests     OBJECT IDENTIFIER ::= { ups15Test 7 }


   ups15TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups15WellKnownTests  1 }

   ups15TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups15WellKnownTests  2 }

   ups15TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups15WellKnownTests  3 }

   ups15TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups15WellKnownTests  4 }

   ups15TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups15WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups15Control            OBJECT IDENTIFIER ::= { ups15Objects 8 }

   ups15ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups15ShutdownAfterDelay and ups15RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups15Control 1 }

   ups15ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups15ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups15ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups15ShutdownType =
               output and the output is already off.  When read,
               ups15ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups15ShutdownAfterDelay already in effect."
       ::= { ups15Control 2 }

   ups15StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups15StartupAfterDelay
               countdown or ups15RebootWithDuration countdown in
               progress.  When read, ups15StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups15Control 3 }

   ups15RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups15ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups15RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups15Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups15Traps              OBJECT IDENTIFIER ::= { upsModule15 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups15TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups15EstimatedMinutesRemaining, ups15SecondsOnBattery,
                 ups15ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups15Traps 1 }

   ups15TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups15TestId, ups15TestSpinLock,
                 ups15TestResultsSummary, ups15TestResultsDetail,
                 ups15TestStartTime, ups15TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups15Traps 2 }

   ups15TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups15AlarmId, ups15AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups15AlarmOnBattery and
               ups15AlarmTestInProgress."
     ::= { ups15Traps 3 }

   ups15TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups15AlarmId, ups15AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups15AlarmTestInProgress."
     ::= { ups15Traps 4 }


   --
   -- conformance information
   --
   ups15Conformance        OBJECT IDENTIFIER ::= { upsModule15 3 }

   ups15Compliances        OBJECT IDENTIFIER ::= { ups15Conformance 1 }


   --
   -- compliance statements
   --

   ups15SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups15SubsetIdentGroup,
                     ups15SubsetBatteryGroup, ups15SubsetInputGroup,
                     ups15SubsetOutputGroup, ups15SubsetAlarmGroup,
                     ups15SubsetControlGroup }

       OBJECT     ups15BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups15AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups15AlarmOnBattery, ups15AlarmLowBattery,
               ups15AlarmInputBad, ups15AlarmUpsOutputOff,
               ups15AlarmUpsSystemOff, and ups15AlarmTestInProgress."

       OBJECT     ups15OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups15ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups15Compliances 1 }

   ups15BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups15BasicIdentGroup,
                     ups15BasicBatteryGroup, ups15BasicInputGroup,
                     ups15BasicOutputGroup, ups15BasicAlarmGroup,
                     ups15BasicTestGroup, ups15BasicControlGroup }

       OBJECT     ups15AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups15AlarmOnBattery, ups15AlarmLowBattery,
               ups15AlarmDepletedBattery, ups15AlarmTempBad,
               ups15AlarmInputBad, ups15AlarmOutputOverload,
               ups15AlarmOnBypass, ups15AlarmBypassBad,
               ups15AlarmOutputOffAsRequested,
               ups15AlarmUpsOffAsRequested, ups15AlarmUpsOutputOff,
               ups15AlarmUpsSystemOff, ups15AlarmGeneralFault,
               ups15AlarmDiagnosticTestFailed,
               ups15AlarmCommunicationsLost, ups15AlarmShutdownPending,
               and ups15AlarmTestInProgress."

       OBJECT     ups15TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups15TestNoTestsInitiated."

       OBJECT     ups15OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups15BasicBypassGroup
           DESCRIPTION
               "The ups15BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups15ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups15Compliances 2 }

   ups15FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups15FullIdentGroup, ups15FullBatteryGroup,
                     ups15FullInputGroup, ups15FullOutputGroup,
                     ups15FullAlarmGroup, ups15FullTestGroup,
                     ups15FullControlGroup }

       OBJECT     ups15AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups15AlarmBatteryBad, ups15AlarmOnBattery,
               ups15AlarmLowBattery, ups15AlarmDepletedBattery,
               ups15AlarmTempBad, ups15AlarmInputBad, ups15AlarmOnBypass,
               ups15AlarmBypassBad, ups15AlarmOutputOffAsRequested,
               ups15AlarmUpsOffAsRequested, ups15AlarmUpsOutputOff,
               ups15AlarmUpsSystemOff, ups15AlarmGeneralFault,
               ups15AlarmDiagnosticTestFailed,
               ups15AlarmCommunicationsLost, ups15AlarmShutdownPending,
               and ups15AlarmTestInProgress."

       OBJECT     ups15TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups15TestNoTestsInitiated,
               ups15TestGeneralSystemsTest, and
               ups15TestQuickBatteryTest."

       OBJECT     ups15OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups15FullBypassGroup
           DESCRIPTION
               "The ups15FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups15ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups15Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups15Groups             OBJECT IDENTIFIER ::= { ups15Conformance 2 }

   ups15SubsetGroups       OBJECT IDENTIFIER ::= { ups15Groups 1 }

   ups15SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups15IdentManufacturer, ups15IdentModel,
                 ups15IdentAgentSoftwareVersion, ups15IdentName,
                 ups15IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups15SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups15SubsetGroups 1 }

   ups15SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups15BatteryStatus, ups15SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups15SubsetGroups 2 }

   ups15SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups15InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups15SubsetGroups 3 }

   ups15SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups15OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups15SubsetGroups 4 }


   -- { ups15SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups15SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups15AlarmsPresent, ups15AlarmDescr, ups15AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups15SubsetGroups 6 }

   -- { ups15SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups15SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups15ShutdownType, ups15ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups15SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups15SubsetGroups 8 }

   ups15BasicGroups        OBJECT IDENTIFIER ::= { ups15Groups 2 }

   ups15BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups15IdentManufacturer, ups15IdentModel,
                 ups15IdentUPSSoftwareVersion,
                 ups15IdentAgentSoftwareVersion, ups15IdentName }
       STATUS  current
       DESCRIPTION
               "The ups15BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 1 }

   ups15BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups15BatteryStatus, ups15SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups15BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 2 }

   ups15BasicInputGroup OBJECT-GROUP
       OBJECTS { ups15InputLineBads, ups15InputNumLines,
                 ups15InputFrequency, ups15InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups15BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 3 }

   ups15BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups15OutputSource, ups15OutputFrequency,
                 ups15OutputNumLines, ups15OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups15BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 4 }

   ups15BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups15BypassFrequency, ups15BypassNumLines,
                 ups15BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups15BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 5 }

   ups15BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups15AlarmsPresent, ups15AlarmDescr, ups15AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups15BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 6 }

   ups15BasicTestGroup OBJECT-GROUP
       OBJECTS { ups15TestId, ups15TestSpinLock,
                 ups15TestResultsSummary, ups15TestResultsDetail,
                 ups15TestStartTime, ups15TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups15BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 7 }

   ups15BasicControlGroup OBJECT-GROUP
       OBJECTS { ups15ShutdownType, ups15ShutdownAfterDelay,
                 ups15StartupAfterDelay, ups15RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups15BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups15BasicGroups 8 }

   ups15FullGroups         OBJECT IDENTIFIER ::= { ups15Groups 3 }

   ups15FullIdentGroup OBJECT-GROUP
       OBJECTS { ups15IdentManufacturer, ups15IdentModel,
                 ups15IdentUPSSoftwareVersion,
                 ups15IdentAgentSoftwareVersion, ups15IdentName,
                 ups15IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups15FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups15FullGroups 1 }

   ups15FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups15BatteryStatus, ups15SecondsOnBattery,
                 ups15EstimatedMinutesRemaining,
                 ups15EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups15FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups15FullGroups 2 }

   ups15FullInputGroup OBJECT-GROUP
       OBJECTS { ups15InputLineBads, ups15InputNumLines,
                 ups15InputFrequency, ups15InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups15FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups15FullGroups 3 }

   ups15FullOutputGroup OBJECT-GROUP
       OBJECTS { ups15OutputSource, ups15OutputFrequency,
                 ups15OutputNumLines, ups15OutputVoltage,
                 ups15OutputCurrent, ups15OutputPower,
                 ups15OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups15FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups15FullGroups 4 }

   ups15FullBypassGroup OBJECT-GROUP
       OBJECTS { ups15BypassFrequency, ups15BypassNumLines,
                 ups15BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups15FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups15FullGroups 5 }

   ups15FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups15AlarmsPresent, ups15AlarmDescr, ups15AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups15FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups15FullGroups 6 }

   ups15FullTestGroup OBJECT-GROUP
       OBJECTS { ups15TestId, ups15TestSpinLock,
                 ups15TestResultsSummary, ups15TestResultsDetail,
                 ups15TestStartTime, ups15TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups15FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups15FullGroups 7 }

   ups15FullControlGroup OBJECT-GROUP
       OBJECTS { ups15ShutdownType, ups15ShutdownAfterDelay,
                 ups15StartupAfterDelay, ups15RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups15FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups15FullGroups 8 }


   --*******************************************************************
   --
   -- Module 16 data
   --

   upsModule16           OBJECT IDENTIFIER ::= { upsModular 17 }
   ups16Objects           OBJECT IDENTIFIER ::= { upsModule16 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups16IdentName and
   --      ups16IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups16Ident              OBJECT IDENTIFIER ::= { ups16Objects 1 }

   ups16IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups16Ident 1 }

   ups16IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups16Ident 2 }

   ups16IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups16IdentAgentSoftwareVersion in some implementations."
       ::= { ups16Ident 3 }

   ups16IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups16IdentUPSSoftwareVersion in some implementations."
       ::= { ups16Ident 4 }

   ups16IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups16Ident 5 }

   ups16IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups16Ident 6 }


   --
   -- Battery Group
   --

   ups16Battery            OBJECT IDENTIFIER ::= { ups16Objects 2 }

   ups16BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups16ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups16ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups16Battery 1 }

   ups16SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups16Battery 2 }

   ups16EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups16Battery 3 }

   ups16EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups16Battery 4 }

   ups16BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups16Battery 5 }

   ups16BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups16Battery 6 }

   ups16BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups16Battery 7 }


   --
   -- Input Group
   --

   ups16Input              OBJECT IDENTIFIER ::= { ups16Objects 3 }

   ups16InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups16Input 1 }


   ups16InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups16Input 2 }

   ups16InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups16InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups16InputNumLines."
       ::= { ups16Input 3 }

   ups16InputEntry OBJECT-TYPE
       SYNTAX     Ups16InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups16InputLineIndex }
       ::= { ups16InputTable 1 }

   Ups16InputEntry ::= SEQUENCE {
       ups16InputLineIndex   PositiveInteger,
       ups16InputFrequency   NonNegativeInteger,
       ups16InputVoltage     NonNegativeInteger,
       ups16InputCurrent     NonNegativeInteger,
       ups16InputTruePower   NonNegativeInteger
   }

   ups16InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups16InputEntry 1 }

   ups16InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups16InputEntry 2 }

   ups16InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups16InputEntry 3 }

   ups16InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups16InputEntry 4 }

   ups16InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups16InputEntry 5 }


   --
   -- The Output group.
   --

   ups16Output             OBJECT IDENTIFIER ::= { ups16Objects 4 }

   ups16OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups16Output 1 }

   ups16OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups16Output 2 }

   ups16OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups16Output 3 }

   ups16OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups16OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups16OutputNumLines."
       ::= { ups16Output 4 }

   ups16OutputEntry OBJECT-TYPE
       SYNTAX     Ups16OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups16OutputLineIndex }
       ::= { ups16OutputTable 1 }

   Ups16OutputEntry ::= SEQUENCE {
       ups16OutputLineIndex   PositiveInteger,
       ups16OutputVoltage     NonNegativeInteger,
       ups16OutputCurrent     NonNegativeInteger,
       ups16OutputPower       NonNegativeInteger,
       ups16OutputPercentLoad INTEGER
   }

   ups16OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups16OutputEntry 1 }

   ups16OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups16OutputEntry 2 }

   ups16OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups16OutputEntry 3 }

   ups16OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups16OutputEntry 4 }

   ups16OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups16OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups16Bypass             OBJECT IDENTIFIER ::= { ups16Objects 5 }

   ups16BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups16Bypass 1 }

   ups16BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups16Bypass 2 }

   ups16BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups16BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups16BypassNumLines."
       ::= { ups16Bypass 3 }

   ups16BypassEntry OBJECT-TYPE
       SYNTAX     Ups16BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups16BypassLineIndex }
       ::= { ups16BypassTable 1 }

   Ups16BypassEntry ::= SEQUENCE {
       ups16BypassLineIndex  PositiveInteger,
       ups16BypassVoltage    NonNegativeInteger,
       ups16BypassCurrent    NonNegativeInteger,
       ups16BypassPower      NonNegativeInteger
   }

   ups16BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups16BypassEntry 1 }

   ups16BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups16BypassEntry 2 }

   ups16BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups16BypassEntry 3 }

   ups16BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups16BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups16Alarm              OBJECT IDENTIFIER ::= { ups16Objects 6 }

   ups16AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups16Alarm 1 }

   ups16AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups16AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups16AlarmId equal to 1, and increments the value of
               ups16AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups16AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups16AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups16AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups16AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups16AlarmsPresent."
       ::= { ups16Alarm 2 }

   ups16AlarmEntry OBJECT-TYPE
       SYNTAX     Ups16AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups16AlarmId }
       ::= { ups16AlarmTable 1 }

   Ups16AlarmEntry ::= SEQUENCE {
       ups16AlarmId          PositiveInteger,
       ups16AlarmDescr       AutonomousType,
       ups16AlarmTime        TimeStamp
   }

   ups16AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups16AlarmEntry 1 }

   ups16AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups16AlarmEntry 2 }

   ups16AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups16AlarmTime shall equal
               0."
       ::= { ups16AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups16WellKnownAlarms    OBJECT IDENTIFIER ::= { ups16Alarm 3 }
   ups16AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups16WellKnownAlarms  1 }

   ups16AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups16WellKnownAlarms  2 }

   ups16AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups16ConfigLowBattTime."
       ::= { ups16WellKnownAlarms  3 }


   ups16AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups16WellKnownAlarms  4 }

   ups16AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups16WellKnownAlarms  5 }

   ups16AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups16WellKnownAlarms  6 }

   ups16AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups16WellKnownAlarms  7 }

   ups16AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups16WellKnownAlarms  8 }

   ups16AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups16WellKnownAlarms  9 }

   ups16AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups16WellKnownAlarms 10 }

   ups16AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups16WellKnownAlarms 11 }

   ups16AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups16WellKnownAlarms 12 }

   ups16AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups16WellKnownAlarms 13 }

   ups16AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups16WellKnownAlarms 14 }

   ups16AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups16WellKnownAlarms 15 }

   ups16AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups16WellKnownAlarms 16 }

   ups16AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups16WellKnownAlarms 17 }

   ups16AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups16WellKnownAlarms 18 }

   ups16AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups16WellKnownAlarms 19 }

   ups16AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups16WellKnownAlarms 20 }

   ups16AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups16WellKnownAlarms 21 }

   ups16AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups16ShutdownAfterDelay countdown is underway."
       ::= { ups16WellKnownAlarms 22 }

   ups16AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups16WellKnownAlarms 23 }

   ups16AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups16WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups16Test               OBJECT IDENTIFIER ::= { ups16Objects 7 }

   ups16TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups16TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups16TestResultsSummary. Tests in progress may be
               aborted by setting the ups16TestId variable to
               ups16TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups16TestNoTestsInitiated is returned."
       ::= { ups16Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups16TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups16TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups16TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups16TestResultsSummary */
                     get (upsTestSpinLock, ups16TestResultsSummary,
               ups16TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups16TestResultsSummary,
               ups16TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups16TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups16TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups16Test 2 }

   ups16TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups16TestId to ups16TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups16Test 3 }

   ups16TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups16TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups16Test 4 }

   ups16TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups16TestResultsSummary is noTestsInitiated(6),
               ups16TestStartTime has the value 0."
       ::= { ups16Test 5 }

   ups16TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups16TestResultsSummary is noTestsInitiated(6),
               ups16TestElapsedTime has the value 0."
       ::= { ups16Test 6 }

   --
   -- Well known tests.
   --

   ups16WellKnownTests     OBJECT IDENTIFIER ::= { ups16Test 7 }


   ups16TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups16WellKnownTests  1 }

   ups16TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups16WellKnownTests  2 }

   ups16TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups16WellKnownTests  3 }

   ups16TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups16WellKnownTests  4 }

   ups16TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups16WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups16Control            OBJECT IDENTIFIER ::= { ups16Objects 8 }

   ups16ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups16ShutdownAfterDelay and ups16RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups16Control 1 }

   ups16ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups16ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups16ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups16ShutdownType =
               output and the output is already off.  When read,
               ups16ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups16ShutdownAfterDelay already in effect."
       ::= { ups16Control 2 }

   ups16StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups16StartupAfterDelay
               countdown or ups16RebootWithDuration countdown in
               progress.  When read, ups16StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups16Control 3 }

   ups16RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups16ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups16RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups16Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups16Traps              OBJECT IDENTIFIER ::= { upsModule16 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups16TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups16EstimatedMinutesRemaining, ups16SecondsOnBattery,
                 ups16ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups16Traps 1 }

   ups16TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups16TestId, ups16TestSpinLock,
                 ups16TestResultsSummary, ups16TestResultsDetail,
                 ups16TestStartTime, ups16TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups16Traps 2 }

   ups16TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups16AlarmId, ups16AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups16AlarmOnBattery and
               ups16AlarmTestInProgress."
     ::= { ups16Traps 3 }

   ups16TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups16AlarmId, ups16AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups16AlarmTestInProgress."
     ::= { ups16Traps 4 }


   --
   -- conformance information
   --
   ups16Conformance        OBJECT IDENTIFIER ::= { upsModule16 3 }

   ups16Compliances        OBJECT IDENTIFIER ::= { ups16Conformance 1 }


   --
   -- compliance statements
   --

   ups16SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups16SubsetIdentGroup,
                     ups16SubsetBatteryGroup, ups16SubsetInputGroup,
                     ups16SubsetOutputGroup, ups16SubsetAlarmGroup,
                     ups16SubsetControlGroup }

       OBJECT     ups16BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups16AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups16AlarmOnBattery, ups16AlarmLowBattery,
               ups16AlarmInputBad, ups16AlarmUpsOutputOff,
               ups16AlarmUpsSystemOff, and ups16AlarmTestInProgress."

       OBJECT     ups16OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups16ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups16Compliances 1 }

   ups16BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups16BasicIdentGroup,
                     ups16BasicBatteryGroup, ups16BasicInputGroup,
                     ups16BasicOutputGroup, ups16BasicAlarmGroup,
                     ups16BasicTestGroup, ups16BasicControlGroup }

       OBJECT     ups16AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups16AlarmOnBattery, ups16AlarmLowBattery,
               ups16AlarmDepletedBattery, ups16AlarmTempBad,
               ups16AlarmInputBad, ups16AlarmOutputOverload,
               ups16AlarmOnBypass, ups16AlarmBypassBad,
               ups16AlarmOutputOffAsRequested,
               ups16AlarmUpsOffAsRequested, ups16AlarmUpsOutputOff,
               ups16AlarmUpsSystemOff, ups16AlarmGeneralFault,
               ups16AlarmDiagnosticTestFailed,
               ups16AlarmCommunicationsLost, ups16AlarmShutdownPending,
               and ups16AlarmTestInProgress."

       OBJECT     ups16TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups16TestNoTestsInitiated."

       OBJECT     ups16OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups16BasicBypassGroup
           DESCRIPTION
               "The ups16BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups16ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups16Compliances 2 }

   ups16FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups16FullIdentGroup, ups16FullBatteryGroup,
                     ups16FullInputGroup, ups16FullOutputGroup,
                     ups16FullAlarmGroup, ups16FullTestGroup,
                     ups16FullControlGroup }

       OBJECT     ups16AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups16AlarmBatteryBad, ups16AlarmOnBattery,
               ups16AlarmLowBattery, ups16AlarmDepletedBattery,
               ups16AlarmTempBad, ups16AlarmInputBad, ups16AlarmOnBypass,
               ups16AlarmBypassBad, ups16AlarmOutputOffAsRequested,
               ups16AlarmUpsOffAsRequested, ups16AlarmUpsOutputOff,
               ups16AlarmUpsSystemOff, ups16AlarmGeneralFault,
               ups16AlarmDiagnosticTestFailed,
               ups16AlarmCommunicationsLost, ups16AlarmShutdownPending,
               and ups16AlarmTestInProgress."

       OBJECT     ups16TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups16TestNoTestsInitiated,
               ups16TestGeneralSystemsTest, and
               ups16TestQuickBatteryTest."

       OBJECT     ups16OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups16FullBypassGroup
           DESCRIPTION
               "The ups16FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups16ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups16Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups16Groups             OBJECT IDENTIFIER ::= { ups16Conformance 2 }

   ups16SubsetGroups       OBJECT IDENTIFIER ::= { ups16Groups 1 }

   ups16SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups16IdentManufacturer, ups16IdentModel,
                 ups16IdentAgentSoftwareVersion, ups16IdentName,
                 ups16IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups16SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups16SubsetGroups 1 }

   ups16SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups16BatteryStatus, ups16SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups16SubsetGroups 2 }

   ups16SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups16InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups16SubsetGroups 3 }

   ups16SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups16OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups16SubsetGroups 4 }


   -- { ups16SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups16SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups16AlarmsPresent, ups16AlarmDescr, ups16AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups16SubsetGroups 6 }

   -- { ups16SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups16SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups16ShutdownType, ups16ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups16SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups16SubsetGroups 8 }

   ups16BasicGroups        OBJECT IDENTIFIER ::= { ups16Groups 2 }

   ups16BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups16IdentManufacturer, ups16IdentModel,
                 ups16IdentUPSSoftwareVersion,
                 ups16IdentAgentSoftwareVersion, ups16IdentName }
       STATUS  current
       DESCRIPTION
               "The ups16BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 1 }

   ups16BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups16BatteryStatus, ups16SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups16BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 2 }

   ups16BasicInputGroup OBJECT-GROUP
       OBJECTS { ups16InputLineBads, ups16InputNumLines,
                 ups16InputFrequency, ups16InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups16BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 3 }

   ups16BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups16OutputSource, ups16OutputFrequency,
                 ups16OutputNumLines, ups16OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups16BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 4 }

   ups16BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups16BypassFrequency, ups16BypassNumLines,
                 ups16BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups16BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 5 }

   ups16BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups16AlarmsPresent, ups16AlarmDescr, ups16AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups16BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 6 }

   ups16BasicTestGroup OBJECT-GROUP
       OBJECTS { ups16TestId, ups16TestSpinLock,
                 ups16TestResultsSummary, ups16TestResultsDetail,
                 ups16TestStartTime, ups16TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups16BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 7 }

   ups16BasicControlGroup OBJECT-GROUP
       OBJECTS { ups16ShutdownType, ups16ShutdownAfterDelay,
                 ups16StartupAfterDelay, ups16RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups16BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups16BasicGroups 8 }

   ups16FullGroups         OBJECT IDENTIFIER ::= { ups16Groups 3 }

   ups16FullIdentGroup OBJECT-GROUP
       OBJECTS { ups16IdentManufacturer, ups16IdentModel,
                 ups16IdentUPSSoftwareVersion,
                 ups16IdentAgentSoftwareVersion, ups16IdentName,
                 ups16IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups16FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups16FullGroups 1 }

   ups16FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups16BatteryStatus, ups16SecondsOnBattery,
                 ups16EstimatedMinutesRemaining,
                 ups16EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups16FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups16FullGroups 2 }

   ups16FullInputGroup OBJECT-GROUP
       OBJECTS { ups16InputLineBads, ups16InputNumLines,
                 ups16InputFrequency, ups16InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups16FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups16FullGroups 3 }

   ups16FullOutputGroup OBJECT-GROUP
       OBJECTS { ups16OutputSource, ups16OutputFrequency,
                 ups16OutputNumLines, ups16OutputVoltage,
                 ups16OutputCurrent, ups16OutputPower,
                 ups16OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups16FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups16FullGroups 4 }

   ups16FullBypassGroup OBJECT-GROUP
       OBJECTS { ups16BypassFrequency, ups16BypassNumLines,
                 ups16BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups16FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups16FullGroups 5 }

   ups16FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups16AlarmsPresent, ups16AlarmDescr, ups16AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups16FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups16FullGroups 6 }

   ups16FullTestGroup OBJECT-GROUP
       OBJECTS { ups16TestId, ups16TestSpinLock,
                 ups16TestResultsSummary, ups16TestResultsDetail,
                 ups16TestStartTime, ups16TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups16FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups16FullGroups 7 }

   ups16FullControlGroup OBJECT-GROUP
       OBJECTS { ups16ShutdownType, ups16ShutdownAfterDelay,
                 ups16StartupAfterDelay, ups16RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups16FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups16FullGroups 8 }


   --*******************************************************************
   --
   -- Module 17 data
   --

   upsModule17           OBJECT IDENTIFIER ::= { upsModular 18 }
   ups17Objects           OBJECT IDENTIFIER ::= { upsModule17 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups17IdentName and
   --      ups17IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups17Ident              OBJECT IDENTIFIER ::= { ups17Objects 1 }

   ups17IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups17Ident 1 }

   ups17IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups17Ident 2 }

   ups17IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups17IdentAgentSoftwareVersion in some implementations."
       ::= { ups17Ident 3 }

   ups17IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups17IdentUPSSoftwareVersion in some implementations."
       ::= { ups17Ident 4 }

   ups17IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups17Ident 5 }

   ups17IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups17Ident 6 }


   --
   -- Battery Group
   --

   ups17Battery            OBJECT IDENTIFIER ::= { ups17Objects 2 }

   ups17BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups17ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups17ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups17Battery 1 }

   ups17SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups17Battery 2 }

   ups17EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups17Battery 3 }

   ups17EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups17Battery 4 }

   ups17BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups17Battery 5 }

   ups17BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups17Battery 6 }

   ups17BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups17Battery 7 }


   --
   -- Input Group
   --

   ups17Input              OBJECT IDENTIFIER ::= { ups17Objects 3 }

   ups17InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups17Input 1 }


   ups17InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups17Input 2 }

   ups17InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups17InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups17InputNumLines."
       ::= { ups17Input 3 }

   ups17InputEntry OBJECT-TYPE
       SYNTAX     Ups17InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups17InputLineIndex }
       ::= { ups17InputTable 1 }

   Ups17InputEntry ::= SEQUENCE {
       ups17InputLineIndex   PositiveInteger,
       ups17InputFrequency   NonNegativeInteger,
       ups17InputVoltage     NonNegativeInteger,
       ups17InputCurrent     NonNegativeInteger,
       ups17InputTruePower   NonNegativeInteger
   }

   ups17InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups17InputEntry 1 }

   ups17InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups17InputEntry 2 }

   ups17InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups17InputEntry 3 }

   ups17InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups17InputEntry 4 }

   ups17InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups17InputEntry 5 }


   --
   -- The Output group.
   --

   ups17Output             OBJECT IDENTIFIER ::= { ups17Objects 4 }

   ups17OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups17Output 1 }

   ups17OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups17Output 2 }

   ups17OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups17Output 3 }

   ups17OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups17OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups17OutputNumLines."
       ::= { ups17Output 4 }

   ups17OutputEntry OBJECT-TYPE
       SYNTAX     Ups17OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups17OutputLineIndex }
       ::= { ups17OutputTable 1 }

   Ups17OutputEntry ::= SEQUENCE {
       ups17OutputLineIndex   PositiveInteger,
       ups17OutputVoltage     NonNegativeInteger,
       ups17OutputCurrent     NonNegativeInteger,
       ups17OutputPower       NonNegativeInteger,
       ups17OutputPercentLoad INTEGER
   }

   ups17OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups17OutputEntry 1 }

   ups17OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups17OutputEntry 2 }

   ups17OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups17OutputEntry 3 }

   ups17OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups17OutputEntry 4 }

   ups17OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups17OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups17Bypass             OBJECT IDENTIFIER ::= { ups17Objects 5 }

   ups17BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups17Bypass 1 }

   ups17BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups17Bypass 2 }

   ups17BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups17BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups17BypassNumLines."
       ::= { ups17Bypass 3 }

   ups17BypassEntry OBJECT-TYPE
       SYNTAX     Ups17BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups17BypassLineIndex }
       ::= { ups17BypassTable 1 }

   Ups17BypassEntry ::= SEQUENCE {
       ups17BypassLineIndex  PositiveInteger,
       ups17BypassVoltage    NonNegativeInteger,
       ups17BypassCurrent    NonNegativeInteger,
       ups17BypassPower      NonNegativeInteger
   }

   ups17BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups17BypassEntry 1 }

   ups17BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups17BypassEntry 2 }

   ups17BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups17BypassEntry 3 }

   ups17BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups17BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups17Alarm              OBJECT IDENTIFIER ::= { ups17Objects 6 }

   ups17AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups17Alarm 1 }

   ups17AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups17AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups17AlarmId equal to 1, and increments the value of
               ups17AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups17AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups17AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups17AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups17AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups17AlarmsPresent."
       ::= { ups17Alarm 2 }

   ups17AlarmEntry OBJECT-TYPE
       SYNTAX     Ups17AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups17AlarmId }
       ::= { ups17AlarmTable 1 }

   Ups17AlarmEntry ::= SEQUENCE {
       ups17AlarmId          PositiveInteger,
       ups17AlarmDescr       AutonomousType,
       ups17AlarmTime        TimeStamp
   }

   ups17AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups17AlarmEntry 1 }

   ups17AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups17AlarmEntry 2 }

   ups17AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups17AlarmTime shall equal
               0."
       ::= { ups17AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups17WellKnownAlarms    OBJECT IDENTIFIER ::= { ups17Alarm 3 }
   ups17AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups17WellKnownAlarms  1 }

   ups17AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups17WellKnownAlarms  2 }

   ups17AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups17ConfigLowBattTime."
       ::= { ups17WellKnownAlarms  3 }


   ups17AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups17WellKnownAlarms  4 }

   ups17AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups17WellKnownAlarms  5 }

   ups17AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups17WellKnownAlarms  6 }

   ups17AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups17WellKnownAlarms  7 }

   ups17AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups17WellKnownAlarms  8 }

   ups17AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups17WellKnownAlarms  9 }

   ups17AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups17WellKnownAlarms 10 }

   ups17AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups17WellKnownAlarms 11 }

   ups17AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups17WellKnownAlarms 12 }

   ups17AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups17WellKnownAlarms 13 }

   ups17AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups17WellKnownAlarms 14 }

   ups17AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups17WellKnownAlarms 15 }

   ups17AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups17WellKnownAlarms 16 }

   ups17AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups17WellKnownAlarms 17 }

   ups17AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups17WellKnownAlarms 18 }

   ups17AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups17WellKnownAlarms 19 }

   ups17AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups17WellKnownAlarms 20 }

   ups17AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups17WellKnownAlarms 21 }

   ups17AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups17ShutdownAfterDelay countdown is underway."
       ::= { ups17WellKnownAlarms 22 }

   ups17AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups17WellKnownAlarms 23 }

   ups17AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups17WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups17Test               OBJECT IDENTIFIER ::= { ups17Objects 7 }

   ups17TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups17TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups17TestResultsSummary. Tests in progress may be
               aborted by setting the ups17TestId variable to
               ups17TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups17TestNoTestsInitiated is returned."
       ::= { ups17Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups17TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups17TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups17TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups17TestResultsSummary */
                     get (upsTestSpinLock, ups17TestResultsSummary,
               ups17TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups17TestResultsSummary,
               ups17TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups17TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups17TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups17Test 2 }

   ups17TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups17TestId to ups17TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups17Test 3 }

   ups17TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups17TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups17Test 4 }

   ups17TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups17TestResultsSummary is noTestsInitiated(6),
               ups17TestStartTime has the value 0."
       ::= { ups17Test 5 }

   ups17TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups17TestResultsSummary is noTestsInitiated(6),
               ups17TestElapsedTime has the value 0."
       ::= { ups17Test 6 }

   --
   -- Well known tests.
   --

   ups17WellKnownTests     OBJECT IDENTIFIER ::= { ups17Test 7 }


   ups17TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups17WellKnownTests  1 }

   ups17TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups17WellKnownTests  2 }

   ups17TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups17WellKnownTests  3 }

   ups17TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups17WellKnownTests  4 }

   ups17TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups17WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups17Control            OBJECT IDENTIFIER ::= { ups17Objects 8 }

   ups17ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups17ShutdownAfterDelay and ups17RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups17Control 1 }

   ups17ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups17ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups17ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups17ShutdownType =
               output and the output is already off.  When read,
               ups17ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups17ShutdownAfterDelay already in effect."
       ::= { ups17Control 2 }

   ups17StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups17StartupAfterDelay
               countdown or ups17RebootWithDuration countdown in
               progress.  When read, ups17StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups17Control 3 }

   ups17RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups17ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups17RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups17Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups17Traps              OBJECT IDENTIFIER ::= { upsModule17 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups17TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups17EstimatedMinutesRemaining, ups17SecondsOnBattery,
                 ups17ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups17Traps 1 }

   ups17TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups17TestId, ups17TestSpinLock,
                 ups17TestResultsSummary, ups17TestResultsDetail,
                 ups17TestStartTime, ups17TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups17Traps 2 }

   ups17TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups17AlarmId, ups17AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups17AlarmOnBattery and
               ups17AlarmTestInProgress."
     ::= { ups17Traps 3 }

   ups17TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups17AlarmId, ups17AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups17AlarmTestInProgress."
     ::= { ups17Traps 4 }


   --
   -- conformance information
   --
   ups17Conformance        OBJECT IDENTIFIER ::= { upsModule17 3 }

   ups17Compliances        OBJECT IDENTIFIER ::= { ups17Conformance 1 }


   --
   -- compliance statements
   --

   ups17SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups17SubsetIdentGroup,
                     ups17SubsetBatteryGroup, ups17SubsetInputGroup,
                     ups17SubsetOutputGroup, ups17SubsetAlarmGroup,
                     ups17SubsetControlGroup }

       OBJECT     ups17BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups17AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups17AlarmOnBattery, ups17AlarmLowBattery,
               ups17AlarmInputBad, ups17AlarmUpsOutputOff,
               ups17AlarmUpsSystemOff, and ups17AlarmTestInProgress."

       OBJECT     ups17OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups17ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups17Compliances 1 }

   ups17BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups17BasicIdentGroup,
                     ups17BasicBatteryGroup, ups17BasicInputGroup,
                     ups17BasicOutputGroup, ups17BasicAlarmGroup,
                     ups17BasicTestGroup, ups17BasicControlGroup }

       OBJECT     ups17AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups17AlarmOnBattery, ups17AlarmLowBattery,
               ups17AlarmDepletedBattery, ups17AlarmTempBad,
               ups17AlarmInputBad, ups17AlarmOutputOverload,
               ups17AlarmOnBypass, ups17AlarmBypassBad,
               ups17AlarmOutputOffAsRequested,
               ups17AlarmUpsOffAsRequested, ups17AlarmUpsOutputOff,
               ups17AlarmUpsSystemOff, ups17AlarmGeneralFault,
               ups17AlarmDiagnosticTestFailed,
               ups17AlarmCommunicationsLost, ups17AlarmShutdownPending,
               and ups17AlarmTestInProgress."

       OBJECT     ups17TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups17TestNoTestsInitiated."

       OBJECT     ups17OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups17BasicBypassGroup
           DESCRIPTION
               "The ups17BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups17ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups17Compliances 2 }

   ups17FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups17FullIdentGroup, ups17FullBatteryGroup,
                     ups17FullInputGroup, ups17FullOutputGroup,
                     ups17FullAlarmGroup, ups17FullTestGroup,
                     ups17FullControlGroup }

       OBJECT     ups17AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups17AlarmBatteryBad, ups17AlarmOnBattery,
               ups17AlarmLowBattery, ups17AlarmDepletedBattery,
               ups17AlarmTempBad, ups17AlarmInputBad, ups17AlarmOnBypass,
               ups17AlarmBypassBad, ups17AlarmOutputOffAsRequested,
               ups17AlarmUpsOffAsRequested, ups17AlarmUpsOutputOff,
               ups17AlarmUpsSystemOff, ups17AlarmGeneralFault,
               ups17AlarmDiagnosticTestFailed,
               ups17AlarmCommunicationsLost, ups17AlarmShutdownPending,
               and ups17AlarmTestInProgress."

       OBJECT     ups17TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups17TestNoTestsInitiated,
               ups17TestGeneralSystemsTest, and
               ups17TestQuickBatteryTest."

       OBJECT     ups17OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups17FullBypassGroup
           DESCRIPTION
               "The ups17FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups17ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups17Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups17Groups             OBJECT IDENTIFIER ::= { ups17Conformance 2 }

   ups17SubsetGroups       OBJECT IDENTIFIER ::= { ups17Groups 1 }

   ups17SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups17IdentManufacturer, ups17IdentModel,
                 ups17IdentAgentSoftwareVersion, ups17IdentName,
                 ups17IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups17SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups17SubsetGroups 1 }

   ups17SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups17BatteryStatus, ups17SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups17SubsetGroups 2 }

   ups17SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups17InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups17SubsetGroups 3 }

   ups17SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups17OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups17SubsetGroups 4 }


   -- { ups17SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups17SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups17AlarmsPresent, ups17AlarmDescr, ups17AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups17SubsetGroups 6 }

   -- { ups17SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups17SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups17ShutdownType, ups17ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups17SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups17SubsetGroups 8 }

   ups17BasicGroups        OBJECT IDENTIFIER ::= { ups17Groups 2 }

   ups17BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups17IdentManufacturer, ups17IdentModel,
                 ups17IdentUPSSoftwareVersion,
                 ups17IdentAgentSoftwareVersion, ups17IdentName }
       STATUS  current
       DESCRIPTION
               "The ups17BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 1 }

   ups17BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups17BatteryStatus, ups17SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups17BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 2 }

   ups17BasicInputGroup OBJECT-GROUP
       OBJECTS { ups17InputLineBads, ups17InputNumLines,
                 ups17InputFrequency, ups17InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups17BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 3 }

   ups17BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups17OutputSource, ups17OutputFrequency,
                 ups17OutputNumLines, ups17OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups17BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 4 }

   ups17BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups17BypassFrequency, ups17BypassNumLines,
                 ups17BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups17BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 5 }

   ups17BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups17AlarmsPresent, ups17AlarmDescr, ups17AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups17BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 6 }

   ups17BasicTestGroup OBJECT-GROUP
       OBJECTS { ups17TestId, ups17TestSpinLock,
                 ups17TestResultsSummary, ups17TestResultsDetail,
                 ups17TestStartTime, ups17TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups17BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 7 }

   ups17BasicControlGroup OBJECT-GROUP
       OBJECTS { ups17ShutdownType, ups17ShutdownAfterDelay,
                 ups17StartupAfterDelay, ups17RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups17BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups17BasicGroups 8 }

   ups17FullGroups         OBJECT IDENTIFIER ::= { ups17Groups 3 }

   ups17FullIdentGroup OBJECT-GROUP
       OBJECTS { ups17IdentManufacturer, ups17IdentModel,
                 ups17IdentUPSSoftwareVersion,
                 ups17IdentAgentSoftwareVersion, ups17IdentName,
                 ups17IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups17FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups17FullGroups 1 }

   ups17FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups17BatteryStatus, ups17SecondsOnBattery,
                 ups17EstimatedMinutesRemaining,
                 ups17EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups17FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups17FullGroups 2 }

   ups17FullInputGroup OBJECT-GROUP
       OBJECTS { ups17InputLineBads, ups17InputNumLines,
                 ups17InputFrequency, ups17InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups17FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups17FullGroups 3 }

   ups17FullOutputGroup OBJECT-GROUP
       OBJECTS { ups17OutputSource, ups17OutputFrequency,
                 ups17OutputNumLines, ups17OutputVoltage,
                 ups17OutputCurrent, ups17OutputPower,
                 ups17OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups17FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups17FullGroups 4 }

   ups17FullBypassGroup OBJECT-GROUP
       OBJECTS { ups17BypassFrequency, ups17BypassNumLines,
                 ups17BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups17FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups17FullGroups 5 }

   ups17FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups17AlarmsPresent, ups17AlarmDescr, ups17AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups17FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups17FullGroups 6 }

   ups17FullTestGroup OBJECT-GROUP
       OBJECTS { ups17TestId, ups17TestSpinLock,
                 ups17TestResultsSummary, ups17TestResultsDetail,
                 ups17TestStartTime, ups17TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups17FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups17FullGroups 7 }

   ups17FullControlGroup OBJECT-GROUP
       OBJECTS { ups17ShutdownType, ups17ShutdownAfterDelay,
                 ups17StartupAfterDelay, ups17RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups17FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups17FullGroups 8 }


   --*******************************************************************
   --
   -- Module 18 data
   --

   upsModule18           OBJECT IDENTIFIER ::= { upsModular 19 }
   ups18Objects           OBJECT IDENTIFIER ::= { upsModule18 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups18IdentName and
   --      ups18IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups18Ident              OBJECT IDENTIFIER ::= { ups18Objects 1 }

   ups18IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups18Ident 1 }

   ups18IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups18Ident 2 }

   ups18IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups18IdentAgentSoftwareVersion in some implementations."
       ::= { ups18Ident 3 }

   ups18IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups18IdentUPSSoftwareVersion in some implementations."
       ::= { ups18Ident 4 }

   ups18IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups18Ident 5 }

   ups18IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups18Ident 6 }


   --
   -- Battery Group
   --

   ups18Battery            OBJECT IDENTIFIER ::= { ups18Objects 2 }

   ups18BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups18ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups18ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups18Battery 1 }

   ups18SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups18Battery 2 }

   ups18EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups18Battery 3 }

   ups18EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups18Battery 4 }

   ups18BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups18Battery 5 }

   ups18BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups18Battery 6 }

   ups18BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups18Battery 7 }


   --
   -- Input Group
   --

   ups18Input              OBJECT IDENTIFIER ::= { ups18Objects 3 }

   ups18InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups18Input 1 }


   ups18InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups18Input 2 }

   ups18InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups18InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups18InputNumLines."
       ::= { ups18Input 3 }

   ups18InputEntry OBJECT-TYPE
       SYNTAX     Ups18InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups18InputLineIndex }
       ::= { ups18InputTable 1 }

   Ups18InputEntry ::= SEQUENCE {
       ups18InputLineIndex   PositiveInteger,
       ups18InputFrequency   NonNegativeInteger,
       ups18InputVoltage     NonNegativeInteger,
       ups18InputCurrent     NonNegativeInteger,
       ups18InputTruePower   NonNegativeInteger
   }

   ups18InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups18InputEntry 1 }

   ups18InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups18InputEntry 2 }

   ups18InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups18InputEntry 3 }

   ups18InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups18InputEntry 4 }

   ups18InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups18InputEntry 5 }


   --
   -- The Output group.
   --

   ups18Output             OBJECT IDENTIFIER ::= { ups18Objects 4 }

   ups18OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups18Output 1 }

   ups18OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups18Output 2 }

   ups18OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups18Output 3 }

   ups18OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups18OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups18OutputNumLines."
       ::= { ups18Output 4 }

   ups18OutputEntry OBJECT-TYPE
       SYNTAX     Ups18OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups18OutputLineIndex }
       ::= { ups18OutputTable 1 }

   Ups18OutputEntry ::= SEQUENCE {
       ups18OutputLineIndex   PositiveInteger,
       ups18OutputVoltage     NonNegativeInteger,
       ups18OutputCurrent     NonNegativeInteger,
       ups18OutputPower       NonNegativeInteger,
       ups18OutputPercentLoad INTEGER
   }

   ups18OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups18OutputEntry 1 }

   ups18OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups18OutputEntry 2 }

   ups18OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups18OutputEntry 3 }

   ups18OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups18OutputEntry 4 }

   ups18OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups18OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups18Bypass             OBJECT IDENTIFIER ::= { ups18Objects 5 }

   ups18BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups18Bypass 1 }

   ups18BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups18Bypass 2 }

   ups18BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups18BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups18BypassNumLines."
       ::= { ups18Bypass 3 }

   ups18BypassEntry OBJECT-TYPE
       SYNTAX     Ups18BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups18BypassLineIndex }
       ::= { ups18BypassTable 1 }

   Ups18BypassEntry ::= SEQUENCE {
       ups18BypassLineIndex  PositiveInteger,
       ups18BypassVoltage    NonNegativeInteger,
       ups18BypassCurrent    NonNegativeInteger,
       ups18BypassPower      NonNegativeInteger
   }

   ups18BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups18BypassEntry 1 }

   ups18BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups18BypassEntry 2 }

   ups18BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups18BypassEntry 3 }

   ups18BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups18BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups18Alarm              OBJECT IDENTIFIER ::= { ups18Objects 6 }

   ups18AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups18Alarm 1 }

   ups18AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups18AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups18AlarmId equal to 1, and increments the value of
               ups18AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups18AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups18AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups18AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups18AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups18AlarmsPresent."
       ::= { ups18Alarm 2 }

   ups18AlarmEntry OBJECT-TYPE
       SYNTAX     Ups18AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups18AlarmId }
       ::= { ups18AlarmTable 1 }

   Ups18AlarmEntry ::= SEQUENCE {
       ups18AlarmId          PositiveInteger,
       ups18AlarmDescr       AutonomousType,
       ups18AlarmTime        TimeStamp
   }

   ups18AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups18AlarmEntry 1 }

   ups18AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups18AlarmEntry 2 }

   ups18AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups18AlarmTime shall equal
               0."
       ::= { ups18AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups18WellKnownAlarms    OBJECT IDENTIFIER ::= { ups18Alarm 3 }
   ups18AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups18WellKnownAlarms  1 }

   ups18AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups18WellKnownAlarms  2 }

   ups18AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups18ConfigLowBattTime."
       ::= { ups18WellKnownAlarms  3 }


   ups18AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups18WellKnownAlarms  4 }

   ups18AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups18WellKnownAlarms  5 }

   ups18AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups18WellKnownAlarms  6 }

   ups18AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups18WellKnownAlarms  7 }

   ups18AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups18WellKnownAlarms  8 }

   ups18AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups18WellKnownAlarms  9 }

   ups18AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups18WellKnownAlarms 10 }

   ups18AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups18WellKnownAlarms 11 }

   ups18AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups18WellKnownAlarms 12 }

   ups18AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups18WellKnownAlarms 13 }

   ups18AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups18WellKnownAlarms 14 }

   ups18AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups18WellKnownAlarms 15 }

   ups18AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups18WellKnownAlarms 16 }

   ups18AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups18WellKnownAlarms 17 }

   ups18AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups18WellKnownAlarms 18 }

   ups18AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups18WellKnownAlarms 19 }

   ups18AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups18WellKnownAlarms 20 }

   ups18AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups18WellKnownAlarms 21 }

   ups18AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups18ShutdownAfterDelay countdown is underway."
       ::= { ups18WellKnownAlarms 22 }

   ups18AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups18WellKnownAlarms 23 }

   ups18AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups18WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups18Test               OBJECT IDENTIFIER ::= { ups18Objects 7 }

   ups18TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups18TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups18TestResultsSummary. Tests in progress may be
               aborted by setting the ups18TestId variable to
               ups18TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups18TestNoTestsInitiated is returned."
       ::= { ups18Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups18TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups18TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups18TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups18TestResultsSummary */
                     get (upsTestSpinLock, ups18TestResultsSummary,
               ups18TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups18TestResultsSummary,
               ups18TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups18TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups18TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups18Test 2 }

   ups18TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups18TestId to ups18TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups18Test 3 }

   ups18TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups18TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups18Test 4 }

   ups18TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups18TestResultsSummary is noTestsInitiated(6),
               ups18TestStartTime has the value 0."
       ::= { ups18Test 5 }

   ups18TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups18TestResultsSummary is noTestsInitiated(6),
               ups18TestElapsedTime has the value 0."
       ::= { ups18Test 6 }

   --
   -- Well known tests.
   --

   ups18WellKnownTests     OBJECT IDENTIFIER ::= { ups18Test 7 }


   ups18TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups18WellKnownTests  1 }

   ups18TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups18WellKnownTests  2 }

   ups18TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups18WellKnownTests  3 }

   ups18TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups18WellKnownTests  4 }

   ups18TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups18WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups18Control            OBJECT IDENTIFIER ::= { ups18Objects 8 }

   ups18ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups18ShutdownAfterDelay and ups18RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups18Control 1 }

   ups18ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups18ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups18ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups18ShutdownType =
               output and the output is already off.  When read,
               ups18ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups18ShutdownAfterDelay already in effect."
       ::= { ups18Control 2 }

   ups18StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups18StartupAfterDelay
               countdown or ups18RebootWithDuration countdown in
               progress.  When read, ups18StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups18Control 3 }

   ups18RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups18ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups18RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups18Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups18Traps              OBJECT IDENTIFIER ::= { upsModule18 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups18TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups18EstimatedMinutesRemaining, ups18SecondsOnBattery,
                 ups18ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups18Traps 1 }

   ups18TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups18TestId, ups18TestSpinLock,
                 ups18TestResultsSummary, ups18TestResultsDetail,
                 ups18TestStartTime, ups18TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups18Traps 2 }

   ups18TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups18AlarmId, ups18AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups18AlarmOnBattery and
               ups18AlarmTestInProgress."
     ::= { ups18Traps 3 }

   ups18TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups18AlarmId, ups18AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups18AlarmTestInProgress."
     ::= { ups18Traps 4 }


   --
   -- conformance information
   --
   ups18Conformance        OBJECT IDENTIFIER ::= { upsModule18 3 }

   ups18Compliances        OBJECT IDENTIFIER ::= { ups18Conformance 1 }


   --
   -- compliance statements
   --

   ups18SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups18SubsetIdentGroup,
                     ups18SubsetBatteryGroup, ups18SubsetInputGroup,
                     ups18SubsetOutputGroup, ups18SubsetAlarmGroup,
                     ups18SubsetControlGroup }

       OBJECT     ups18BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups18AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups18AlarmOnBattery, ups18AlarmLowBattery,
               ups18AlarmInputBad, ups18AlarmUpsOutputOff,
               ups18AlarmUpsSystemOff, and ups18AlarmTestInProgress."

       OBJECT     ups18OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups18ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups18Compliances 1 }

   ups18BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups18BasicIdentGroup,
                     ups18BasicBatteryGroup, ups18BasicInputGroup,
                     ups18BasicOutputGroup, ups18BasicAlarmGroup,
                     ups18BasicTestGroup, ups18BasicControlGroup }


       OBJECT     ups18AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups18AlarmOnBattery, ups18AlarmLowBattery,
               ups18AlarmDepletedBattery, ups18AlarmTempBad,
               ups18AlarmInputBad, ups18AlarmOutputOverload,
               ups18AlarmOnBypass, ups18AlarmBypassBad,
               ups18AlarmOutputOffAsRequested,
               ups18AlarmUpsOffAsRequested, ups18AlarmUpsOutputOff,
               ups18AlarmUpsSystemOff, ups18AlarmGeneralFault,
               ups18AlarmDiagnosticTestFailed,
               ups18AlarmCommunicationsLost, ups18AlarmShutdownPending,
               and ups18AlarmTestInProgress."

       OBJECT     ups18TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups18TestNoTestsInitiated."

       OBJECT     ups18OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups18BasicBypassGroup
           DESCRIPTION
               "The ups18BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups18ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups18Compliances 2 }

   ups18FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups18FullIdentGroup, ups18FullBatteryGroup,
                     ups18FullInputGroup, ups18FullOutputGroup,
                     ups18FullAlarmGroup, ups18FullTestGroup,
                     ups18FullControlGroup }

       OBJECT     ups18AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups18AlarmBatteryBad, ups18AlarmOnBattery,
               ups18AlarmLowBattery, ups18AlarmDepletedBattery,
               ups18AlarmTempBad, ups18AlarmInputBad, ups18AlarmOnBypass,
               ups18AlarmBypassBad, ups18AlarmOutputOffAsRequested,
               ups18AlarmUpsOffAsRequested, ups18AlarmUpsOutputOff,
               ups18AlarmUpsSystemOff, ups18AlarmGeneralFault,
               ups18AlarmDiagnosticTestFailed,
               ups18AlarmCommunicationsLost, ups18AlarmShutdownPending,
               and ups18AlarmTestInProgress."

       OBJECT     ups18TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups18TestNoTestsInitiated,
               ups18TestGeneralSystemsTest, and
               ups18TestQuickBatteryTest."

       OBJECT     ups18OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups18FullBypassGroup
           DESCRIPTION
               "The ups18FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups18ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups18Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups18Groups             OBJECT IDENTIFIER ::= { ups18Conformance 2 }

   ups18SubsetGroups       OBJECT IDENTIFIER ::= { ups18Groups 1 }

   ups18SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups18IdentManufacturer, ups18IdentModel,
                 ups18IdentAgentSoftwareVersion, ups18IdentName,
                 ups18IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups18SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups18SubsetGroups 1 }

   ups18SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups18BatteryStatus, ups18SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups18SubsetGroups 2 }

   ups18SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups18InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups18SubsetGroups 3 }

   ups18SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups18OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups18SubsetGroups 4 }


   -- { ups18SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups18SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups18AlarmsPresent, ups18AlarmDescr, ups18AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups18SubsetGroups 6 }

   -- { ups18SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups18SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups18ShutdownType, ups18ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups18SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups18SubsetGroups 8 }

   ups18BasicGroups        OBJECT IDENTIFIER ::= { ups18Groups 2 }

   ups18BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups18IdentManufacturer, ups18IdentModel,
                 ups18IdentUPSSoftwareVersion,
                 ups18IdentAgentSoftwareVersion, ups18IdentName }
       STATUS  current
       DESCRIPTION
               "The ups18BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 1 }

   ups18BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups18BatteryStatus, ups18SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups18BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 2 }

   ups18BasicInputGroup OBJECT-GROUP
       OBJECTS { ups18InputLineBads, ups18InputNumLines,
                 ups18InputFrequency, ups18InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups18BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 3 }

   ups18BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups18OutputSource, ups18OutputFrequency,
                 ups18OutputNumLines, ups18OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups18BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 4 }

   ups18BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups18BypassFrequency, ups18BypassNumLines,
                 ups18BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups18BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 5 }

   ups18BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups18AlarmsPresent, ups18AlarmDescr, ups18AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups18BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 6 }

   ups18BasicTestGroup OBJECT-GROUP
       OBJECTS { ups18TestId, ups18TestSpinLock,
                 ups18TestResultsSummary, ups18TestResultsDetail,
                 ups18TestStartTime, ups18TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups18BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 7 }

   ups18BasicControlGroup OBJECT-GROUP
       OBJECTS { ups18ShutdownType, ups18ShutdownAfterDelay,
                 ups18StartupAfterDelay, ups18RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups18BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups18BasicGroups 8 }

   ups18FullGroups         OBJECT IDENTIFIER ::= { ups18Groups 3 }

   ups18FullIdentGroup OBJECT-GROUP
       OBJECTS { ups18IdentManufacturer, ups18IdentModel,
                 ups18IdentUPSSoftwareVersion,
                 ups18IdentAgentSoftwareVersion, ups18IdentName,
                 ups18IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups18FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups18FullGroups 1 }

   ups18FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups18BatteryStatus, ups18SecondsOnBattery,
                 ups18EstimatedMinutesRemaining,
                 ups18EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups18FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups18FullGroups 2 }

   ups18FullInputGroup OBJECT-GROUP
       OBJECTS { ups18InputLineBads, ups18InputNumLines,
                 ups18InputFrequency, ups18InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups18FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups18FullGroups 3 }

   ups18FullOutputGroup OBJECT-GROUP
       OBJECTS { ups18OutputSource, ups18OutputFrequency,
                 ups18OutputNumLines, ups18OutputVoltage,
                 ups18OutputCurrent, ups18OutputPower,
                 ups18OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups18FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups18FullGroups 4 }

   ups18FullBypassGroup OBJECT-GROUP
       OBJECTS { ups18BypassFrequency, ups18BypassNumLines,
                 ups18BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups18FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups18FullGroups 5 }

   ups18FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups18AlarmsPresent, ups18AlarmDescr, ups18AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups18FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups18FullGroups 6 }

   ups18FullTestGroup OBJECT-GROUP
       OBJECTS { ups18TestId, ups18TestSpinLock,
                 ups18TestResultsSummary, ups18TestResultsDetail,
                 ups18TestStartTime, ups18TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups18FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups18FullGroups 7 }

   ups18FullControlGroup OBJECT-GROUP
       OBJECTS { ups18ShutdownType, ups18ShutdownAfterDelay,
                 ups18StartupAfterDelay, ups18RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups18FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups18FullGroups 8 }


   --*******************************************************************
   --
   -- Module 19 data
   --

   upsModule19           OBJECT IDENTIFIER ::= { upsModular 20 }
   ups19Objects           OBJECT IDENTIFIER ::= { upsModule19 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups19IdentName and
   --      ups19IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups19Ident              OBJECT IDENTIFIER ::= { ups19Objects 1 }

   ups19IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups19Ident 1 }

   ups19IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups19Ident 2 }

   ups19IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups19IdentAgentSoftwareVersion in some implementations."
       ::= { ups19Ident 3 }

   ups19IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups19IdentUPSSoftwareVersion in some implementations."
       ::= { ups19Ident 4 }

   ups19IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups19Ident 5 }

   ups19IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups19Ident 6 }


   --
   -- Battery Group
   --

   ups19Battery            OBJECT IDENTIFIER ::= { ups19Objects 2 }

   ups19BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups19ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups19ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups19Battery 1 }

   ups19SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups19Battery 2 }

   ups19EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups19Battery 3 }

   ups19EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups19Battery 4 }

   ups19BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups19Battery 5 }

   ups19BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups19Battery 6 }

   ups19BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups19Battery 7 }


   --
   -- Input Group
   --

   ups19Input              OBJECT IDENTIFIER ::= { ups19Objects 3 }

   ups19InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups19Input 1 }


   ups19InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups19Input 2 }

   ups19InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups19InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups19InputNumLines."
       ::= { ups19Input 3 }

   ups19InputEntry OBJECT-TYPE
       SYNTAX     Ups19InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups19InputLineIndex }
       ::= { ups19InputTable 1 }

   Ups19InputEntry ::= SEQUENCE {
       ups19InputLineIndex   PositiveInteger,
       ups19InputFrequency   NonNegativeInteger,
       ups19InputVoltage     NonNegativeInteger,
       ups19InputCurrent     NonNegativeInteger,
       ups19InputTruePower   NonNegativeInteger
   }

   ups19InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups19InputEntry 1 }

   ups19InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups19InputEntry 2 }

   ups19InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups19InputEntry 3 }

   ups19InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups19InputEntry 4 }

   ups19InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups19InputEntry 5 }


   --
   -- The Output group.
   --

   ups19Output             OBJECT IDENTIFIER ::= { ups19Objects 4 }

   ups19OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups19Output 1 }

   ups19OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups19Output 2 }

   ups19OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups19Output 3 }

   ups19OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups19OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups19OutputNumLines."
       ::= { ups19Output 4 }

   ups19OutputEntry OBJECT-TYPE
       SYNTAX     Ups19OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups19OutputLineIndex }
       ::= { ups19OutputTable 1 }

   Ups19OutputEntry ::= SEQUENCE {
       ups19OutputLineIndex   PositiveInteger,
       ups19OutputVoltage     NonNegativeInteger,
       ups19OutputCurrent     NonNegativeInteger,
       ups19OutputPower       NonNegativeInteger,
       ups19OutputPercentLoad INTEGER
   }

   ups19OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups19OutputEntry 1 }

   ups19OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups19OutputEntry 2 }

   ups19OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups19OutputEntry 3 }

   ups19OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups19OutputEntry 4 }

   ups19OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups19OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups19Bypass             OBJECT IDENTIFIER ::= { ups19Objects 5 }

   ups19BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups19Bypass 1 }

   ups19BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups19Bypass 2 }

   ups19BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups19BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups19BypassNumLines."
       ::= { ups19Bypass 3 }

   ups19BypassEntry OBJECT-TYPE
       SYNTAX     Ups19BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups19BypassLineIndex }
       ::= { ups19BypassTable 1 }

   Ups19BypassEntry ::= SEQUENCE {
       ups19BypassLineIndex  PositiveInteger,
       ups19BypassVoltage    NonNegativeInteger,
       ups19BypassCurrent    NonNegativeInteger,
       ups19BypassPower      NonNegativeInteger
   }

   ups19BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups19BypassEntry 1 }

   ups19BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups19BypassEntry 2 }

   ups19BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups19BypassEntry 3 }

   ups19BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups19BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups19Alarm              OBJECT IDENTIFIER ::= { ups19Objects 6 }

   ups19AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups19Alarm 1 }

   ups19AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups19AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups19AlarmId equal to 1, and increments the value of
               ups19AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups19AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups19AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups19AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups19AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups19AlarmsPresent."
       ::= { ups19Alarm 2 }

   ups19AlarmEntry OBJECT-TYPE
       SYNTAX     Ups19AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups19AlarmId }
       ::= { ups19AlarmTable 1 }

   Ups19AlarmEntry ::= SEQUENCE {
       ups19AlarmId          PositiveInteger,
       ups19AlarmDescr       AutonomousType,
       ups19AlarmTime        TimeStamp
   }

   ups19AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups19AlarmEntry 1 }

   ups19AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups19AlarmEntry 2 }

   ups19AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups19AlarmTime shall equal
               0."
       ::= { ups19AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups19WellKnownAlarms    OBJECT IDENTIFIER ::= { ups19Alarm 3 }
   ups19AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups19WellKnownAlarms  1 }

   ups19AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups19WellKnownAlarms  2 }

   ups19AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups19ConfigLowBattTime."
       ::= { ups19WellKnownAlarms  3 }


   ups19AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups19WellKnownAlarms  4 }

   ups19AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups19WellKnownAlarms  5 }

   ups19AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups19WellKnownAlarms  6 }

   ups19AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups19WellKnownAlarms  7 }

   ups19AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups19WellKnownAlarms  8 }

   ups19AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups19WellKnownAlarms  9 }

   ups19AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups19WellKnownAlarms 10 }

   ups19AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups19WellKnownAlarms 11 }

   ups19AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups19WellKnownAlarms 12 }

   ups19AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups19WellKnownAlarms 13 }

   ups19AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups19WellKnownAlarms 14 }

   ups19AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups19WellKnownAlarms 15 }

   ups19AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups19WellKnownAlarms 16 }

   ups19AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups19WellKnownAlarms 17 }

   ups19AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups19WellKnownAlarms 18 }

   ups19AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups19WellKnownAlarms 19 }

   ups19AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups19WellKnownAlarms 20 }

   ups19AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups19WellKnownAlarms 21 }

   ups19AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups19ShutdownAfterDelay countdown is underway."
       ::= { ups19WellKnownAlarms 22 }

   ups19AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups19WellKnownAlarms 23 }

   ups19AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups19WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups19Test               OBJECT IDENTIFIER ::= { ups19Objects 7 }

   ups19TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups19TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups19TestResultsSummary. Tests in progress may be
               aborted by setting the ups19TestId variable to
               ups19TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups19TestNoTestsInitiated is returned."
       ::= { ups19Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups19TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups19TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups19TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups19TestResultsSummary */
                     get (upsTestSpinLock, ups19TestResultsSummary,
               ups19TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups19TestResultsSummary,
               ups19TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups19TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups19TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups19Test 2 }

   ups19TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups19TestId to ups19TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups19Test 3 }

   ups19TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups19TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups19Test 4 }

   ups19TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups19TestResultsSummary is noTestsInitiated(6),
               ups19TestStartTime has the value 0."
       ::= { ups19Test 5 }

   ups19TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups19TestResultsSummary is noTestsInitiated(6),
               ups19TestElapsedTime has the value 0."
       ::= { ups19Test 6 }

   --
   -- Well known tests.
   --

   ups19WellKnownTests     OBJECT IDENTIFIER ::= { ups19Test 7 }


   ups19TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups19WellKnownTests  1 }

   ups19TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups19WellKnownTests  2 }

   ups19TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups19WellKnownTests  3 }

   ups19TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups19WellKnownTests  4 }

   ups19TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups19WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups19Control            OBJECT IDENTIFIER ::= { ups19Objects 8 }

   ups19ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups19ShutdownAfterDelay and ups19RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups19Control 1 }

   ups19ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups19ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups19ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups19ShutdownType =
               output and the output is already off.  When read,
               ups19ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups19ShutdownAfterDelay already in effect."
       ::= { ups19Control 2 }

   ups19StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups19StartupAfterDelay
               countdown or ups19RebootWithDuration countdown in
               progress.  When read, ups19StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups19Control 3 }

   ups19RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups19ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups19RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups19Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups19Traps              OBJECT IDENTIFIER ::= { upsModule19 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups19TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups19EstimatedMinutesRemaining, ups19SecondsOnBattery,
                 ups19ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups19Traps 1 }

   ups19TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups19TestId, ups19TestSpinLock,
                 ups19TestResultsSummary, ups19TestResultsDetail,
                 ups19TestStartTime, ups19TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups19Traps 2 }

   ups19TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups19AlarmId, ups19AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups19AlarmOnBattery and
               ups19AlarmTestInProgress."
     ::= { ups19Traps 3 }

   ups19TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups19AlarmId, ups19AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups19AlarmTestInProgress."
     ::= { ups19Traps 4 }


   --
   -- conformance information
   --
   ups19Conformance        OBJECT IDENTIFIER ::= { upsModule19 3 }

   ups19Compliances        OBJECT IDENTIFIER ::= { ups19Conformance 1 }


   --
   -- compliance statements
   --

   ups19SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups19SubsetIdentGroup,
                     ups19SubsetBatteryGroup, ups19SubsetInputGroup,
                     ups19SubsetOutputGroup, ups19SubsetAlarmGroup,
                     ups19SubsetControlGroup }

       OBJECT     ups19BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups19AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups19AlarmOnBattery, ups19AlarmLowBattery,
               ups19AlarmInputBad, ups19AlarmUpsOutputOff,
               ups19AlarmUpsSystemOff, and ups19AlarmTestInProgress."

       OBJECT     ups19OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups19ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups19Compliances 1 }

   ups19BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups19BasicIdentGroup,
                     ups19BasicBatteryGroup, ups19BasicInputGroup,
                     ups19BasicOutputGroup, ups19BasicAlarmGroup,
                     ups19BasicTestGroup, ups19BasicControlGroup }

       OBJECT     ups19AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups19AlarmOnBattery, ups19AlarmLowBattery,
               ups19AlarmDepletedBattery, ups19AlarmTempBad,
               ups19AlarmInputBad, ups19AlarmOutputOverload,
               ups19AlarmOnBypass, ups19AlarmBypassBad,
               ups19AlarmOutputOffAsRequested,
               ups19AlarmUpsOffAsRequested, ups19AlarmUpsOutputOff,
               ups19AlarmUpsSystemOff, ups19AlarmGeneralFault,
               ups19AlarmDiagnosticTestFailed,
               ups19AlarmCommunicationsLost, ups19AlarmShutdownPending,
               and ups19AlarmTestInProgress."

       OBJECT     ups19TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups19TestNoTestsInitiated."

       OBJECT     ups19OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups19BasicBypassGroup
           DESCRIPTION
               "The ups19BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups19ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups19Compliances 2 }

   ups19FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups19FullIdentGroup, ups19FullBatteryGroup,
                     ups19FullInputGroup, ups19FullOutputGroup,
                     ups19FullAlarmGroup, ups19FullTestGroup,
                     ups19FullControlGroup }

       OBJECT     ups19AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups19AlarmBatteryBad, ups19AlarmOnBattery,
               ups19AlarmLowBattery, ups19AlarmDepletedBattery,
               ups19AlarmTempBad, ups19AlarmInputBad, ups19AlarmOnBypass,
               ups19AlarmBypassBad, ups19AlarmOutputOffAsRequested,
               ups19AlarmUpsOffAsRequested, ups19AlarmUpsOutputOff,
               ups19AlarmUpsSystemOff, ups19AlarmGeneralFault,
               ups19AlarmDiagnosticTestFailed,
               ups19AlarmCommunicationsLost, ups19AlarmShutdownPending,
               and ups19AlarmTestInProgress."

       OBJECT     ups19TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups19TestNoTestsInitiated,
               ups19TestGeneralSystemsTest, and
               ups19TestQuickBatteryTest."

       OBJECT     ups19OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups19FullBypassGroup
           DESCRIPTION
               "The ups19FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups19ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups19Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups19Groups             OBJECT IDENTIFIER ::= { ups19Conformance 2 }

   ups19SubsetGroups       OBJECT IDENTIFIER ::= { ups19Groups 1 }

   ups19SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups19IdentManufacturer, ups19IdentModel,
                 ups19IdentAgentSoftwareVersion, ups19IdentName,
                 ups19IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups19SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups19SubsetGroups 1 }

   ups19SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups19BatteryStatus, ups19SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups19SubsetGroups 2 }

   ups19SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups19InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups19SubsetGroups 3 }

   ups19SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups19OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups19SubsetGroups 4 }


   -- { ups19SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups19SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups19AlarmsPresent, ups19AlarmDescr, ups19AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups19SubsetGroups 6 }

   -- { ups19SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups19SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups19ShutdownType, ups19ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups19SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups19SubsetGroups 8 }

   ups19BasicGroups        OBJECT IDENTIFIER ::= { ups19Groups 2 }

   ups19BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups19IdentManufacturer, ups19IdentModel,
                 ups19IdentUPSSoftwareVersion,
                 ups19IdentAgentSoftwareVersion, ups19IdentName }
       STATUS  current
       DESCRIPTION
               "The ups19BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 1 }

   ups19BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups19BatteryStatus, ups19SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups19BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 2 }

   ups19BasicInputGroup OBJECT-GROUP
       OBJECTS { ups19InputLineBads, ups19InputNumLines,
                 ups19InputFrequency, ups19InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups19BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 3 }

   ups19BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups19OutputSource, ups19OutputFrequency,
                 ups19OutputNumLines, ups19OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups19BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 4 }

   ups19BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups19BypassFrequency, ups19BypassNumLines,
                 ups19BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups19BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 5 }

   ups19BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups19AlarmsPresent, ups19AlarmDescr, ups19AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups19BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 6 }

   ups19BasicTestGroup OBJECT-GROUP
       OBJECTS { ups19TestId, ups19TestSpinLock,
                 ups19TestResultsSummary, ups19TestResultsDetail,
                 ups19TestStartTime, ups19TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups19BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 7 }

   ups19BasicControlGroup OBJECT-GROUP
       OBJECTS { ups19ShutdownType, ups19ShutdownAfterDelay,
                 ups19StartupAfterDelay, ups19RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups19BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups19BasicGroups 8 }

   ups19FullGroups         OBJECT IDENTIFIER ::= { ups19Groups 3 }

   ups19FullIdentGroup OBJECT-GROUP
       OBJECTS { ups19IdentManufacturer, ups19IdentModel,
                 ups19IdentUPSSoftwareVersion,
                 ups19IdentAgentSoftwareVersion, ups19IdentName,
                 ups19IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups19FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups19FullGroups 1 }

   ups19FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups19BatteryStatus, ups19SecondsOnBattery,
                 ups19EstimatedMinutesRemaining,
                 ups19EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups19FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups19FullGroups 2 }

   ups19FullInputGroup OBJECT-GROUP
       OBJECTS { ups19InputLineBads, ups19InputNumLines,
                 ups19InputFrequency, ups19InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups19FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups19FullGroups 3 }

   ups19FullOutputGroup OBJECT-GROUP
       OBJECTS { ups19OutputSource, ups19OutputFrequency,
                 ups19OutputNumLines, ups19OutputVoltage,
                 ups19OutputCurrent, ups19OutputPower,
                 ups19OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups19FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups19FullGroups 4 }

   ups19FullBypassGroup OBJECT-GROUP
       OBJECTS { ups19BypassFrequency, ups19BypassNumLines,
                 ups19BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups19FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups19FullGroups 5 }

   ups19FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups19AlarmsPresent, ups19AlarmDescr, ups19AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups19FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups19FullGroups 6 }

   ups19FullTestGroup OBJECT-GROUP
       OBJECTS { ups19TestId, ups19TestSpinLock,
                 ups19TestResultsSummary, ups19TestResultsDetail,
                 ups19TestStartTime, ups19TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups19FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups19FullGroups 7 }

   ups19FullControlGroup OBJECT-GROUP
       OBJECTS { ups19ShutdownType, ups19ShutdownAfterDelay,
                 ups19StartupAfterDelay, ups19RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups19FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups19FullGroups 8 }


   --*******************************************************************
   --
   -- Module 20 data
   --

   upsModule20           OBJECT IDENTIFIER ::= { upsModular 21 }
   ups20Objects           OBJECT IDENTIFIER ::= { upsModule20 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups20IdentName and
   --      ups20IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups20Ident              OBJECT IDENTIFIER ::= { ups20Objects 1 }

   ups20IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups20Ident 1 }

   ups20IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups20Ident 2 }

   ups20IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups20IdentAgentSoftwareVersion in some implementations."
       ::= { ups20Ident 3 }

   ups20IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups20IdentUPSSoftwareVersion in some implementations."
       ::= { ups20Ident 4 }

   ups20IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups20Ident 5 }

   ups20IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups20Ident 6 }


   --
   -- Battery Group
   --

   ups20Battery            OBJECT IDENTIFIER ::= { ups20Objects 2 }

   ups20BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups20ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups20ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups20Battery 1 }

   ups20SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups20Battery 2 }

   ups20EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups20Battery 3 }

   ups20EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups20Battery 4 }

   ups20BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups20Battery 5 }

   ups20BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups20Battery 6 }

   ups20BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups20Battery 7 }


   --
   -- Input Group
   --

   ups20Input              OBJECT IDENTIFIER ::= { ups20Objects 3 }

   ups20InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups20Input 1 }


   ups20InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups20Input 2 }

   ups20InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups20InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups20InputNumLines."
       ::= { ups20Input 3 }

   ups20InputEntry OBJECT-TYPE
       SYNTAX     Ups20InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups20InputLineIndex }
       ::= { ups20InputTable 1 }

   Ups20InputEntry ::= SEQUENCE {
       ups20InputLineIndex   PositiveInteger,
       ups20InputFrequency   NonNegativeInteger,
       ups20InputVoltage     NonNegativeInteger,
       ups20InputCurrent     NonNegativeInteger,
       ups20InputTruePower   NonNegativeInteger
   }

   ups20InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups20InputEntry 1 }

   ups20InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups20InputEntry 2 }

   ups20InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups20InputEntry 3 }

   ups20InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups20InputEntry 4 }

   ups20InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups20InputEntry 5 }


   --
   -- The Output group.
   --

   ups20Output             OBJECT IDENTIFIER ::= { ups20Objects 4 }

   ups20OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups20Output 1 }

   ups20OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups20Output 2 }

   ups20OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups20Output 3 }

   ups20OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups20OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups20OutputNumLines."
       ::= { ups20Output 4 }

   ups20OutputEntry OBJECT-TYPE
       SYNTAX     Ups20OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups20OutputLineIndex }
       ::= { ups20OutputTable 1 }

   Ups20OutputEntry ::= SEQUENCE {
       ups20OutputLineIndex   PositiveInteger,
       ups20OutputVoltage     NonNegativeInteger,
       ups20OutputCurrent     NonNegativeInteger,
       ups20OutputPower       NonNegativeInteger,
       ups20OutputPercentLoad INTEGER
   }

   ups20OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups20OutputEntry 1 }

   ups20OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups20OutputEntry 2 }

   ups20OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups20OutputEntry 3 }

   ups20OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups20OutputEntry 4 }

   ups20OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups20OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups20Bypass             OBJECT IDENTIFIER ::= { ups20Objects 5 }

   ups20BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups20Bypass 1 }

   ups20BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups20Bypass 2 }

   ups20BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups20BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups20BypassNumLines."
       ::= { ups20Bypass 3 }

   ups20BypassEntry OBJECT-TYPE
       SYNTAX     Ups20BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups20BypassLineIndex }
       ::= { ups20BypassTable 1 }

   Ups20BypassEntry ::= SEQUENCE {
       ups20BypassLineIndex  PositiveInteger,
       ups20BypassVoltage    NonNegativeInteger,
       ups20BypassCurrent    NonNegativeInteger,
       ups20BypassPower      NonNegativeInteger
   }

   ups20BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups20BypassEntry 1 }

   ups20BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups20BypassEntry 2 }

   ups20BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups20BypassEntry 3 }

   ups20BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups20BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups20Alarm              OBJECT IDENTIFIER ::= { ups20Objects 6 }

   ups20AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups20Alarm 1 }

   ups20AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups20AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups20AlarmId equal to 1, and increments the value of
               ups20AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups20AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups20AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups20AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups20AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups20AlarmsPresent."
       ::= { ups20Alarm 2 }

   ups20AlarmEntry OBJECT-TYPE
       SYNTAX     Ups20AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups20AlarmId }
       ::= { ups20AlarmTable 1 }

   Ups20AlarmEntry ::= SEQUENCE {
       ups20AlarmId          PositiveInteger,
       ups20AlarmDescr       AutonomousType,
       ups20AlarmTime        TimeStamp
   }

   ups20AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups20AlarmEntry 1 }

   ups20AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups20AlarmEntry 2 }

   ups20AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups20AlarmTime shall equal
               0."
       ::= { ups20AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups20WellKnownAlarms    OBJECT IDENTIFIER ::= { ups20Alarm 3 }
   ups20AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups20WellKnownAlarms  1 }

   ups20AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups20WellKnownAlarms  2 }

   ups20AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups20ConfigLowBattTime."
       ::= { ups20WellKnownAlarms  3 }


   ups20AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups20WellKnownAlarms  4 }

   ups20AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups20WellKnownAlarms  5 }

   ups20AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups20WellKnownAlarms  6 }

   ups20AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups20WellKnownAlarms  7 }

   ups20AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups20WellKnownAlarms  8 }

   ups20AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups20WellKnownAlarms  9 }

   ups20AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups20WellKnownAlarms 10 }

   ups20AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups20WellKnownAlarms 11 }

   ups20AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups20WellKnownAlarms 12 }

   ups20AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups20WellKnownAlarms 13 }

   ups20AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups20WellKnownAlarms 14 }

   ups20AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups20WellKnownAlarms 15 }

   ups20AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups20WellKnownAlarms 16 }

   ups20AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups20WellKnownAlarms 17 }

   ups20AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups20WellKnownAlarms 18 }

   ups20AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups20WellKnownAlarms 19 }

   ups20AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups20WellKnownAlarms 20 }

   ups20AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups20WellKnownAlarms 21 }

   ups20AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups20ShutdownAfterDelay countdown is underway."
       ::= { ups20WellKnownAlarms 22 }

   ups20AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups20WellKnownAlarms 23 }

   ups20AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups20WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups20Test               OBJECT IDENTIFIER ::= { ups20Objects 7 }

   ups20TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups20TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups20TestResultsSummary. Tests in progress may be
               aborted by setting the ups20TestId variable to
               ups20TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups20TestNoTestsInitiated is returned."
       ::= { ups20Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups20TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups20TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups20TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups20TestResultsSummary */
                     get (upsTestSpinLock, ups20TestResultsSummary,
               ups20TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups20TestResultsSummary,
               ups20TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups20TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups20TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups20Test 2 }

   ups20TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups20TestId to ups20TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups20Test 3 }

   ups20TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups20TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups20Test 4 }

   ups20TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups20TestResultsSummary is noTestsInitiated(6),
               ups20TestStartTime has the value 0."
       ::= { ups20Test 5 }

   ups20TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups20TestResultsSummary is noTestsInitiated(6),
               ups20TestElapsedTime has the value 0."
       ::= { ups20Test 6 }

   --
   -- Well known tests.
   --

   ups20WellKnownTests     OBJECT IDENTIFIER ::= { ups20Test 7 }


   ups20TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups20WellKnownTests  1 }

   ups20TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups20WellKnownTests  2 }

   ups20TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups20WellKnownTests  3 }

   ups20TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups20WellKnownTests  4 }

   ups20TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups20WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups20Control            OBJECT IDENTIFIER ::= { ups20Objects 8 }

   ups20ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups20ShutdownAfterDelay and ups20RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups20Control 1 }

   ups20ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups20ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups20ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups20ShutdownType =
               output and the output is already off.  When read,
               ups20ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups20ShutdownAfterDelay already in effect."
       ::= { ups20Control 2 }

   ups20StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups20StartupAfterDelay
               countdown or ups20RebootWithDuration countdown in
               progress.  When read, ups20StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups20Control 3 }

   ups20RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups20ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups20RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups20Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups20Traps              OBJECT IDENTIFIER ::= { upsModule20 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups20TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups20EstimatedMinutesRemaining, ups20SecondsOnBattery,
                 ups20ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups20Traps 1 }

   ups20TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups20TestId, ups20TestSpinLock,
                 ups20TestResultsSummary, ups20TestResultsDetail,
                 ups20TestStartTime, ups20TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups20Traps 2 }

   ups20TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups20AlarmId, ups20AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups20AlarmOnBattery and
               ups20AlarmTestInProgress."
     ::= { ups20Traps 3 }

   ups20TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups20AlarmId, ups20AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups20AlarmTestInProgress."
     ::= { ups20Traps 4 }


   --
   -- conformance information
   --
   ups20Conformance        OBJECT IDENTIFIER ::= { upsModule20 3 }

   ups20Compliances        OBJECT IDENTIFIER ::= { ups20Conformance 1 }


   --
   -- compliance statements
   --

   ups20SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups20SubsetIdentGroup,
                     ups20SubsetBatteryGroup, ups20SubsetInputGroup,
                     ups20SubsetOutputGroup, ups20SubsetAlarmGroup,
                     ups20SubsetControlGroup }

       OBJECT     ups20BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups20AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups20AlarmOnBattery, ups20AlarmLowBattery,
               ups20AlarmInputBad, ups20AlarmUpsOutputOff,
               ups20AlarmUpsSystemOff, and ups20AlarmTestInProgress."

       OBJECT     ups20OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups20ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups20Compliances 1 }

   ups20BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups20BasicIdentGroup,
                     ups20BasicBatteryGroup, ups20BasicInputGroup,
                     ups20BasicOutputGroup, ups20BasicAlarmGroup,
                     ups20BasicTestGroup, ups20BasicControlGroup }

       OBJECT     ups20AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups20AlarmOnBattery, ups20AlarmLowBattery,
               ups20AlarmDepletedBattery, ups20AlarmTempBad,
               ups20AlarmInputBad, ups20AlarmOutputOverload,
               ups20AlarmOnBypass, ups20AlarmBypassBad,
               ups20AlarmOutputOffAsRequested,
               ups20AlarmUpsOffAsRequested, ups20AlarmUpsOutputOff,
               ups20AlarmUpsSystemOff, ups20AlarmGeneralFault,
               ups20AlarmDiagnosticTestFailed,
               ups20AlarmCommunicationsLost, ups20AlarmShutdownPending,
               and ups20AlarmTestInProgress."

       OBJECT     ups20TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups20TestNoTestsInitiated."

       OBJECT     ups20OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups20BasicBypassGroup
           DESCRIPTION
               "The ups20BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups20ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups20Compliances 2 }

   ups20FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups20FullIdentGroup, ups20FullBatteryGroup,
                     ups20FullInputGroup, ups20FullOutputGroup,
                     ups20FullAlarmGroup, ups20FullTestGroup,
                     ups20FullControlGroup }

       OBJECT     ups20AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups20AlarmBatteryBad, ups20AlarmOnBattery,
               ups20AlarmLowBattery, ups20AlarmDepletedBattery,
               ups20AlarmTempBad, ups20AlarmInputBad, ups20AlarmOnBypass,
               ups20AlarmBypassBad, ups20AlarmOutputOffAsRequested,
               ups20AlarmUpsOffAsRequested, ups20AlarmUpsOutputOff,
               ups20AlarmUpsSystemOff, ups20AlarmGeneralFault,
               ups20AlarmDiagnosticTestFailed,
               ups20AlarmCommunicationsLost, ups20AlarmShutdownPending,
               and ups20AlarmTestInProgress."

       OBJECT     ups20TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups20TestNoTestsInitiated,
               ups20TestGeneralSystemsTest, and
               ups20TestQuickBatteryTest."

       OBJECT     ups20OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups20FullBypassGroup
           DESCRIPTION
               "The ups20FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups20ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups20Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups20Groups             OBJECT IDENTIFIER ::= { ups20Conformance 2 }

   ups20SubsetGroups       OBJECT IDENTIFIER ::= { ups20Groups 1 }

   ups20SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups20IdentManufacturer, ups20IdentModel,
                 ups20IdentAgentSoftwareVersion, ups20IdentName,
                 ups20IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups20SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups20SubsetGroups 1 }

   ups20SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups20BatteryStatus, ups20SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups20SubsetGroups 2 }

   ups20SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups20InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups20SubsetGroups 3 }

   ups20SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups20OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups20SubsetGroups 4 }


   -- { ups20SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups20SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups20AlarmsPresent, ups20AlarmDescr, ups20AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups20SubsetGroups 6 }

   -- { ups20SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups20SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups20ShutdownType, ups20ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups20SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups20SubsetGroups 8 }

   ups20BasicGroups        OBJECT IDENTIFIER ::= { ups20Groups 2 }

   ups20BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups20IdentManufacturer, ups20IdentModel,
                 ups20IdentUPSSoftwareVersion,
                 ups20IdentAgentSoftwareVersion, ups20IdentName }
       STATUS  current
       DESCRIPTION
               "The ups20BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 1 }

   ups20BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups20BatteryStatus, ups20SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups20BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 2 }

   ups20BasicInputGroup OBJECT-GROUP
       OBJECTS { ups20InputLineBads, ups20InputNumLines,
                 ups20InputFrequency, ups20InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups20BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 3 }

   ups20BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups20OutputSource, ups20OutputFrequency,
                 ups20OutputNumLines, ups20OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups20BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 4 }

   ups20BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups20BypassFrequency, ups20BypassNumLines,
                 ups20BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups20BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 5 }

   ups20BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups20AlarmsPresent, ups20AlarmDescr, ups20AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups20BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 6 }

   ups20BasicTestGroup OBJECT-GROUP
       OBJECTS { ups20TestId, ups20TestSpinLock,
                 ups20TestResultsSummary, ups20TestResultsDetail,
                 ups20TestStartTime, ups20TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups20BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 7 }

   ups20BasicControlGroup OBJECT-GROUP
       OBJECTS { ups20ShutdownType, ups20ShutdownAfterDelay,
                 ups20StartupAfterDelay, ups20RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups20BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups20BasicGroups 8 }

   ups20FullGroups         OBJECT IDENTIFIER ::= { ups20Groups 3 }

   ups20FullIdentGroup OBJECT-GROUP
       OBJECTS { ups20IdentManufacturer, ups20IdentModel,
                 ups20IdentUPSSoftwareVersion,
                 ups20IdentAgentSoftwareVersion, ups20IdentName,
                 ups20IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups20FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups20FullGroups 1 }

   ups20FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups20BatteryStatus, ups20SecondsOnBattery,
                 ups20EstimatedMinutesRemaining,
                 ups20EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups20FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups20FullGroups 2 }

   ups20FullInputGroup OBJECT-GROUP
       OBJECTS { ups20InputLineBads, ups20InputNumLines,
                 ups20InputFrequency, ups20InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups20FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups20FullGroups 3 }

   ups20FullOutputGroup OBJECT-GROUP
       OBJECTS { ups20OutputSource, ups20OutputFrequency,
                 ups20OutputNumLines, ups20OutputVoltage,
                 ups20OutputCurrent, ups20OutputPower,
                 ups20OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups20FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups20FullGroups 4 }

   ups20FullBypassGroup OBJECT-GROUP
       OBJECTS { ups20BypassFrequency, ups20BypassNumLines,
                 ups20BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups20FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups20FullGroups 5 }

   ups20FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups20AlarmsPresent, ups20AlarmDescr, ups20AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups20FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups20FullGroups 6 }

   ups20FullTestGroup OBJECT-GROUP
       OBJECTS { ups20TestId, ups20TestSpinLock,
                 ups20TestResultsSummary, ups20TestResultsDetail,
                 ups20TestStartTime, ups20TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups20FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups20FullGroups 7 }

   ups20FullControlGroup OBJECT-GROUP
       OBJECTS { ups20ShutdownType, ups20ShutdownAfterDelay,
                 ups20StartupAfterDelay, ups20RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups20FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups20FullGroups 8 }


   --*******************************************************************
   --
   -- Module 21 data
   --

   upsModule21           OBJECT IDENTIFIER ::= { upsModular 22 }
   ups21Objects           OBJECT IDENTIFIER ::= { upsModule21 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups21IdentName and
   --      ups21IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups21Ident              OBJECT IDENTIFIER ::= { ups21Objects 1 }

   ups21IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups21Ident 1 }

   ups21IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups21Ident 2 }

   ups21IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups21IdentAgentSoftwareVersion in some implementations."
       ::= { ups21Ident 3 }

   ups21IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups21IdentUPSSoftwareVersion in some implementations."
       ::= { ups21Ident 4 }

   ups21IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups21Ident 5 }

   ups21IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups21Ident 6 }


   --
   -- Battery Group
   --

   ups21Battery            OBJECT IDENTIFIER ::= { ups21Objects 2 }

   ups21BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups21ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups21ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups21Battery 1 }

   ups21SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups21Battery 2 }

   ups21EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups21Battery 3 }

   ups21EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups21Battery 4 }

   ups21BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups21Battery 5 }

   ups21BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups21Battery 6 }

   ups21BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups21Battery 7 }


   --
   -- Input Group
   --

   ups21Input              OBJECT IDENTIFIER ::= { ups21Objects 3 }

   ups21InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups21Input 1 }


   ups21InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups21Input 2 }

   ups21InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups21InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups21InputNumLines."
       ::= { ups21Input 3 }

   ups21InputEntry OBJECT-TYPE
       SYNTAX     Ups21InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups21InputLineIndex }
       ::= { ups21InputTable 1 }

   Ups21InputEntry ::= SEQUENCE {
       ups21InputLineIndex   PositiveInteger,
       ups21InputFrequency   NonNegativeInteger,
       ups21InputVoltage     NonNegativeInteger,
       ups21InputCurrent     NonNegativeInteger,
       ups21InputTruePower   NonNegativeInteger
   }

   ups21InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups21InputEntry 1 }

   ups21InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups21InputEntry 2 }

   ups21InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups21InputEntry 3 }

   ups21InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups21InputEntry 4 }

   ups21InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups21InputEntry 5 }


   --
   -- The Output group.
   --

   ups21Output             OBJECT IDENTIFIER ::= { ups21Objects 4 }

   ups21OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups21Output 1 }

   ups21OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups21Output 2 }

   ups21OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups21Output 3 }

   ups21OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups21OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups21OutputNumLines."
       ::= { ups21Output 4 }

   ups21OutputEntry OBJECT-TYPE
       SYNTAX     Ups21OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups21OutputLineIndex }
       ::= { ups21OutputTable 1 }

   Ups21OutputEntry ::= SEQUENCE {
       ups21OutputLineIndex   PositiveInteger,
       ups21OutputVoltage     NonNegativeInteger,
       ups21OutputCurrent     NonNegativeInteger,
       ups21OutputPower       NonNegativeInteger,
       ups21OutputPercentLoad INTEGER
   }

   ups21OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups21OutputEntry 1 }

   ups21OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups21OutputEntry 2 }

   ups21OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups21OutputEntry 3 }

   ups21OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups21OutputEntry 4 }

   ups21OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups21OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups21Bypass             OBJECT IDENTIFIER ::= { ups21Objects 5 }

   ups21BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups21Bypass 1 }

   ups21BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups21Bypass 2 }

   ups21BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups21BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups21BypassNumLines."
       ::= { ups21Bypass 3 }

   ups21BypassEntry OBJECT-TYPE
       SYNTAX     Ups21BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups21BypassLineIndex }
       ::= { ups21BypassTable 1 }

   Ups21BypassEntry ::= SEQUENCE {
       ups21BypassLineIndex  PositiveInteger,
       ups21BypassVoltage    NonNegativeInteger,
       ups21BypassCurrent    NonNegativeInteger,
       ups21BypassPower      NonNegativeInteger
   }

   ups21BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups21BypassEntry 1 }

   ups21BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups21BypassEntry 2 }

   ups21BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups21BypassEntry 3 }

   ups21BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups21BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups21Alarm              OBJECT IDENTIFIER ::= { ups21Objects 6 }

   ups21AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups21Alarm 1 }

   ups21AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups21AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups21AlarmId equal to 1, and increments the value of
               ups21AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups21AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups21AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups21AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups21AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups21AlarmsPresent."
       ::= { ups21Alarm 2 }

   ups21AlarmEntry OBJECT-TYPE
       SYNTAX     Ups21AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups21AlarmId }
       ::= { ups21AlarmTable 1 }

   Ups21AlarmEntry ::= SEQUENCE {
       ups21AlarmId          PositiveInteger,
       ups21AlarmDescr       AutonomousType,
       ups21AlarmTime        TimeStamp
   }

   ups21AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups21AlarmEntry 1 }

   ups21AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups21AlarmEntry 2 }

   ups21AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups21AlarmTime shall equal
               0."
       ::= { ups21AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups21WellKnownAlarms    OBJECT IDENTIFIER ::= { ups21Alarm 3 }
   ups21AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups21WellKnownAlarms  1 }

   ups21AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups21WellKnownAlarms  2 }

   ups21AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups21ConfigLowBattTime."
       ::= { ups21WellKnownAlarms  3 }


   ups21AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups21WellKnownAlarms  4 }

   ups21AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups21WellKnownAlarms  5 }

   ups21AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups21WellKnownAlarms  6 }

   ups21AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups21WellKnownAlarms  7 }

   ups21AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups21WellKnownAlarms  8 }

   ups21AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups21WellKnownAlarms  9 }

   ups21AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups21WellKnownAlarms 10 }

   ups21AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups21WellKnownAlarms 11 }

   ups21AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups21WellKnownAlarms 12 }

   ups21AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups21WellKnownAlarms 13 }

   ups21AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups21WellKnownAlarms 14 }

   ups21AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups21WellKnownAlarms 15 }

   ups21AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups21WellKnownAlarms 16 }

   ups21AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups21WellKnownAlarms 17 }

   ups21AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups21WellKnownAlarms 18 }

   ups21AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups21WellKnownAlarms 19 }

   ups21AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups21WellKnownAlarms 20 }

   ups21AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups21WellKnownAlarms 21 }

   ups21AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups21ShutdownAfterDelay countdown is underway."
       ::= { ups21WellKnownAlarms 22 }

   ups21AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups21WellKnownAlarms 23 }

   ups21AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups21WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups21Test               OBJECT IDENTIFIER ::= { ups21Objects 7 }

   ups21TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups21TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups21TestResultsSummary. Tests in progress may be
               aborted by setting the ups21TestId variable to
               ups21TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups21TestNoTestsInitiated is returned."
       ::= { ups21Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups21TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups21TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups21TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups21TestResultsSummary */
                     get (upsTestSpinLock, ups21TestResultsSummary,
               ups21TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups21TestResultsSummary,
               ups21TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups21TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups21TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups21Test 2 }

   ups21TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups21TestId to ups21TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups21Test 3 }

   ups21TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups21TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups21Test 4 }

   ups21TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups21TestResultsSummary is noTestsInitiated(6),
               ups21TestStartTime has the value 0."
       ::= { ups21Test 5 }

   ups21TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups21TestResultsSummary is noTestsInitiated(6),
               ups21TestElapsedTime has the value 0."
       ::= { ups21Test 6 }

   --
   -- Well known tests.
   --

   ups21WellKnownTests     OBJECT IDENTIFIER ::= { ups21Test 7 }


   ups21TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups21WellKnownTests  1 }

   ups21TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups21WellKnownTests  2 }

   ups21TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups21WellKnownTests  3 }

   ups21TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups21WellKnownTests  4 }

   ups21TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups21WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups21Control            OBJECT IDENTIFIER ::= { ups21Objects 8 }

   ups21ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups21ShutdownAfterDelay and ups21RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups21Control 1 }

   ups21ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups21ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups21ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups21ShutdownType =
               output and the output is already off.  When read,
               ups21ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups21ShutdownAfterDelay already in effect."
       ::= { ups21Control 2 }

   ups21StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups21StartupAfterDelay
               countdown or ups21RebootWithDuration countdown in
               progress.  When read, ups21StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups21Control 3 }

   ups21RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups21ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups21RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups21Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups21Traps              OBJECT IDENTIFIER ::= { upsModule21 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups21TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups21EstimatedMinutesRemaining, ups21SecondsOnBattery,
                 ups21ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups21Traps 1 }

   ups21TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups21TestId, ups21TestSpinLock,
                 ups21TestResultsSummary, ups21TestResultsDetail,
                 ups21TestStartTime, ups21TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups21Traps 2 }

   ups21TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups21AlarmId, ups21AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups21AlarmOnBattery and
               ups21AlarmTestInProgress."
     ::= { ups21Traps 3 }

   ups21TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups21AlarmId, ups21AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups21AlarmTestInProgress."
     ::= { ups21Traps 4 }


   --
   -- conformance information
   --
   ups21Conformance        OBJECT IDENTIFIER ::= { upsModule21 3 }

   ups21Compliances        OBJECT IDENTIFIER ::= { ups21Conformance 1 }


   --
   -- compliance statements
   --

   ups21SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups21SubsetIdentGroup,
                     ups21SubsetBatteryGroup, ups21SubsetInputGroup,
                     ups21SubsetOutputGroup, ups21SubsetAlarmGroup,
                     ups21SubsetControlGroup }

       OBJECT     ups21BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups21AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups21AlarmOnBattery, ups21AlarmLowBattery,
               ups21AlarmInputBad, ups21AlarmUpsOutputOff,
               ups21AlarmUpsSystemOff, and ups21AlarmTestInProgress."

       OBJECT     ups21OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups21ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups21Compliances 1 }

   ups21BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups21BasicIdentGroup,
                     ups21BasicBatteryGroup, ups21BasicInputGroup,
                     ups21BasicOutputGroup, ups21BasicAlarmGroup,
                     ups21BasicTestGroup, ups21BasicControlGroup }


       OBJECT     ups21AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups21AlarmOnBattery, ups21AlarmLowBattery,
               ups21AlarmDepletedBattery, ups21AlarmTempBad,
               ups21AlarmInputBad, ups21AlarmOutputOverload,
               ups21AlarmOnBypass, ups21AlarmBypassBad,
               ups21AlarmOutputOffAsRequested,
               ups21AlarmUpsOffAsRequested, ups21AlarmUpsOutputOff,
               ups21AlarmUpsSystemOff, ups21AlarmGeneralFault,
               ups21AlarmDiagnosticTestFailed,
               ups21AlarmCommunicationsLost, ups21AlarmShutdownPending,
               and ups21AlarmTestInProgress."

       OBJECT     ups21TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups21TestNoTestsInitiated."

       OBJECT     ups21OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups21BasicBypassGroup
           DESCRIPTION
               "The ups21BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups21ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups21Compliances 2 }

   ups21FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups21FullIdentGroup, ups21FullBatteryGroup,
                     ups21FullInputGroup, ups21FullOutputGroup,
                     ups21FullAlarmGroup, ups21FullTestGroup,
                     ups21FullControlGroup }

       OBJECT     ups21AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups21AlarmBatteryBad, ups21AlarmOnBattery,
               ups21AlarmLowBattery, ups21AlarmDepletedBattery,
               ups21AlarmTempBad, ups21AlarmInputBad, ups21AlarmOnBypass,
               ups21AlarmBypassBad, ups21AlarmOutputOffAsRequested,
               ups21AlarmUpsOffAsRequested, ups21AlarmUpsOutputOff,
               ups21AlarmUpsSystemOff, ups21AlarmGeneralFault,
               ups21AlarmDiagnosticTestFailed,
               ups21AlarmCommunicationsLost, ups21AlarmShutdownPending,
               and ups21AlarmTestInProgress."

       OBJECT     ups21TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups21TestNoTestsInitiated,
               ups21TestGeneralSystemsTest, and
               ups21TestQuickBatteryTest."

       OBJECT     ups21OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups21FullBypassGroup
           DESCRIPTION
               "The ups21FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups21ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups21Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups21Groups             OBJECT IDENTIFIER ::= { ups21Conformance 2 }

   ups21SubsetGroups       OBJECT IDENTIFIER ::= { ups21Groups 1 }

   ups21SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups21IdentManufacturer, ups21IdentModel,
                 ups21IdentAgentSoftwareVersion, ups21IdentName,
                 ups21IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups21SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups21SubsetGroups 1 }

   ups21SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups21BatteryStatus, ups21SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups21SubsetGroups 2 }

   ups21SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups21InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups21SubsetGroups 3 }

   ups21SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups21OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups21SubsetGroups 4 }


   -- { ups21SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups21SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups21AlarmsPresent, ups21AlarmDescr, ups21AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups21SubsetGroups 6 }

   -- { ups21SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups21SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups21ShutdownType, ups21ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups21SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups21SubsetGroups 8 }

   ups21BasicGroups        OBJECT IDENTIFIER ::= { ups21Groups 2 }

   ups21BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups21IdentManufacturer, ups21IdentModel,
                 ups21IdentUPSSoftwareVersion,
                 ups21IdentAgentSoftwareVersion, ups21IdentName }
       STATUS  current
       DESCRIPTION
               "The ups21BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 1 }

   ups21BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups21BatteryStatus, ups21SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups21BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 2 }

   ups21BasicInputGroup OBJECT-GROUP
       OBJECTS { ups21InputLineBads, ups21InputNumLines,
                 ups21InputFrequency, ups21InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups21BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 3 }

   ups21BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups21OutputSource, ups21OutputFrequency,
                 ups21OutputNumLines, ups21OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups21BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 4 }

   ups21BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups21BypassFrequency, ups21BypassNumLines,
                 ups21BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups21BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 5 }

   ups21BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups21AlarmsPresent, ups21AlarmDescr, ups21AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups21BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 6 }

   ups21BasicTestGroup OBJECT-GROUP
       OBJECTS { ups21TestId, ups21TestSpinLock,
                 ups21TestResultsSummary, ups21TestResultsDetail,
                 ups21TestStartTime, ups21TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups21BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 7 }

   ups21BasicControlGroup OBJECT-GROUP
       OBJECTS { ups21ShutdownType, ups21ShutdownAfterDelay,
                 ups21StartupAfterDelay, ups21RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups21BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups21BasicGroups 8 }

   ups21FullGroups         OBJECT IDENTIFIER ::= { ups21Groups 3 }

   ups21FullIdentGroup OBJECT-GROUP
       OBJECTS { ups21IdentManufacturer, ups21IdentModel,
                 ups21IdentUPSSoftwareVersion,
                 ups21IdentAgentSoftwareVersion, ups21IdentName,
                 ups21IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups21FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups21FullGroups 1 }

   ups21FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups21BatteryStatus, ups21SecondsOnBattery,
                 ups21EstimatedMinutesRemaining,
                 ups21EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups21FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups21FullGroups 2 }

   ups21FullInputGroup OBJECT-GROUP
       OBJECTS { ups21InputLineBads, ups21InputNumLines,
                 ups21InputFrequency, ups21InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups21FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups21FullGroups 3 }

   ups21FullOutputGroup OBJECT-GROUP
       OBJECTS { ups21OutputSource, ups21OutputFrequency,
                 ups21OutputNumLines, ups21OutputVoltage,
                 ups21OutputCurrent, ups21OutputPower,
                 ups21OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups21FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups21FullGroups 4 }

   ups21FullBypassGroup OBJECT-GROUP
       OBJECTS { ups21BypassFrequency, ups21BypassNumLines,
                 ups21BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups21FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups21FullGroups 5 }

   ups21FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups21AlarmsPresent, ups21AlarmDescr, ups21AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups21FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups21FullGroups 6 }

   ups21FullTestGroup OBJECT-GROUP
       OBJECTS { ups21TestId, ups21TestSpinLock,
                 ups21TestResultsSummary, ups21TestResultsDetail,
                 ups21TestStartTime, ups21TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups21FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups21FullGroups 7 }

   ups21FullControlGroup OBJECT-GROUP
       OBJECTS { ups21ShutdownType, ups21ShutdownAfterDelay,
                 ups21StartupAfterDelay, ups21RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups21FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups21FullGroups 8 }


   --*******************************************************************
   --
   -- Module 22 data
   --

   upsModule22           OBJECT IDENTIFIER ::= { upsModular 23 }
   ups22Objects           OBJECT IDENTIFIER ::= { upsModule22 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups22IdentName and
   --      ups22IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups22Ident              OBJECT IDENTIFIER ::= { ups22Objects 1 }

   ups22IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups22Ident 1 }

   ups22IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups22Ident 2 }

   ups22IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups22IdentAgentSoftwareVersion in some implementations."
       ::= { ups22Ident 3 }

   ups22IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups22IdentUPSSoftwareVersion in some implementations."
       ::= { ups22Ident 4 }

   ups22IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups22Ident 5 }

   ups22IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups22Ident 6 }


   --
   -- Battery Group
   --

   ups22Battery            OBJECT IDENTIFIER ::= { ups22Objects 2 }

   ups22BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups22ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups22ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups22Battery 1 }

   ups22SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups22Battery 2 }

   ups22EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups22Battery 3 }

   ups22EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups22Battery 4 }

   ups22BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups22Battery 5 }

   ups22BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups22Battery 6 }

   ups22BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups22Battery 7 }


   --
   -- Input Group
   --

   ups22Input              OBJECT IDENTIFIER ::= { ups22Objects 3 }

   ups22InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups22Input 1 }


   ups22InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups22Input 2 }

   ups22InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups22InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups22InputNumLines."
       ::= { ups22Input 3 }

   ups22InputEntry OBJECT-TYPE
       SYNTAX     Ups22InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups22InputLineIndex }
       ::= { ups22InputTable 1 }

   Ups22InputEntry ::= SEQUENCE {
       ups22InputLineIndex   PositiveInteger,
       ups22InputFrequency   NonNegativeInteger,
       ups22InputVoltage     NonNegativeInteger,
       ups22InputCurrent     NonNegativeInteger,
       ups22InputTruePower   NonNegativeInteger
   }

   ups22InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups22InputEntry 1 }

   ups22InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups22InputEntry 2 }

   ups22InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups22InputEntry 3 }

   ups22InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups22InputEntry 4 }

   ups22InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups22InputEntry 5 }


   --
   -- The Output group.
   --

   ups22Output             OBJECT IDENTIFIER ::= { ups22Objects 4 }

   ups22OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups22Output 1 }

   ups22OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups22Output 2 }

   ups22OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups22Output 3 }

   ups22OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups22OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups22OutputNumLines."
       ::= { ups22Output 4 }

   ups22OutputEntry OBJECT-TYPE
       SYNTAX     Ups22OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups22OutputLineIndex }
       ::= { ups22OutputTable 1 }

   Ups22OutputEntry ::= SEQUENCE {
       ups22OutputLineIndex   PositiveInteger,
       ups22OutputVoltage     NonNegativeInteger,
       ups22OutputCurrent     NonNegativeInteger,
       ups22OutputPower       NonNegativeInteger,
       ups22OutputPercentLoad INTEGER
   }

   ups22OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups22OutputEntry 1 }

   ups22OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups22OutputEntry 2 }

   ups22OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups22OutputEntry 3 }

   ups22OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups22OutputEntry 4 }

   ups22OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups22OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups22Bypass             OBJECT IDENTIFIER ::= { ups22Objects 5 }

   ups22BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups22Bypass 1 }

   ups22BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups22Bypass 2 }

   ups22BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups22BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups22BypassNumLines."
       ::= { ups22Bypass 3 }

   ups22BypassEntry OBJECT-TYPE
       SYNTAX     Ups22BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups22BypassLineIndex }
       ::= { ups22BypassTable 1 }

   Ups22BypassEntry ::= SEQUENCE {
       ups22BypassLineIndex  PositiveInteger,
       ups22BypassVoltage    NonNegativeInteger,
       ups22BypassCurrent    NonNegativeInteger,
       ups22BypassPower      NonNegativeInteger
   }

   ups22BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups22BypassEntry 1 }

   ups22BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups22BypassEntry 2 }

   ups22BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups22BypassEntry 3 }

   ups22BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups22BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups22Alarm              OBJECT IDENTIFIER ::= { ups22Objects 6 }

   ups22AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups22Alarm 1 }

   ups22AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups22AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups22AlarmId equal to 1, and increments the value of
               ups22AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups22AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups22AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups22AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups22AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups22AlarmsPresent."
       ::= { ups22Alarm 2 }

   ups22AlarmEntry OBJECT-TYPE
       SYNTAX     Ups22AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups22AlarmId }
       ::= { ups22AlarmTable 1 }

   Ups22AlarmEntry ::= SEQUENCE {
       ups22AlarmId          PositiveInteger,
       ups22AlarmDescr       AutonomousType,
       ups22AlarmTime        TimeStamp
   }

   ups22AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups22AlarmEntry 1 }

   ups22AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups22AlarmEntry 2 }

   ups22AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups22AlarmTime shall equal
               0."
       ::= { ups22AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups22WellKnownAlarms    OBJECT IDENTIFIER ::= { ups22Alarm 3 }
   ups22AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups22WellKnownAlarms  1 }

   ups22AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups22WellKnownAlarms  2 }

   ups22AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups22ConfigLowBattTime."
       ::= { ups22WellKnownAlarms  3 }


   ups22AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups22WellKnownAlarms  4 }

   ups22AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups22WellKnownAlarms  5 }

   ups22AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups22WellKnownAlarms  6 }

   ups22AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups22WellKnownAlarms  7 }

   ups22AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups22WellKnownAlarms  8 }

   ups22AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups22WellKnownAlarms  9 }

   ups22AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups22WellKnownAlarms 10 }

   ups22AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups22WellKnownAlarms 11 }

   ups22AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups22WellKnownAlarms 12 }

   ups22AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups22WellKnownAlarms 13 }

   ups22AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups22WellKnownAlarms 14 }

   ups22AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups22WellKnownAlarms 15 }

   ups22AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups22WellKnownAlarms 16 }

   ups22AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups22WellKnownAlarms 17 }

   ups22AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups22WellKnownAlarms 18 }

   ups22AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups22WellKnownAlarms 19 }

   ups22AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups22WellKnownAlarms 20 }

   ups22AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups22WellKnownAlarms 21 }

   ups22AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups22ShutdownAfterDelay countdown is underway."
       ::= { ups22WellKnownAlarms 22 }

   ups22AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups22WellKnownAlarms 23 }

   ups22AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups22WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups22Test               OBJECT IDENTIFIER ::= { ups22Objects 7 }

   ups22TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups22TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups22TestResultsSummary. Tests in progress may be
               aborted by setting the ups22TestId variable to
               ups22TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups22TestNoTestsInitiated is returned."
       ::= { ups22Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups22TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups22TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups22TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups22TestResultsSummary */
                     get (upsTestSpinLock, ups22TestResultsSummary,
               ups22TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups22TestResultsSummary,
               ups22TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups22TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups22TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups22Test 2 }

   ups22TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups22TestId to ups22TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups22Test 3 }

   ups22TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups22TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups22Test 4 }

   ups22TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups22TestResultsSummary is noTestsInitiated(6),
               ups22TestStartTime has the value 0."
       ::= { ups22Test 5 }

   ups22TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups22TestResultsSummary is noTestsInitiated(6),
               ups22TestElapsedTime has the value 0."
       ::= { ups22Test 6 }

   --
   -- Well known tests.
   --

   ups22WellKnownTests     OBJECT IDENTIFIER ::= { ups22Test 7 }


   ups22TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups22WellKnownTests  1 }

   ups22TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups22WellKnownTests  2 }

   ups22TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups22WellKnownTests  3 }

   ups22TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups22WellKnownTests  4 }

   ups22TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups22WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups22Control            OBJECT IDENTIFIER ::= { ups22Objects 8 }

   ups22ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups22ShutdownAfterDelay and ups22RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups22Control 1 }

   ups22ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups22ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups22ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups22ShutdownType =
               output and the output is already off.  When read,
               ups22ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups22ShutdownAfterDelay already in effect."
       ::= { ups22Control 2 }

   ups22StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups22StartupAfterDelay
               countdown or ups22RebootWithDuration countdown in
               progress.  When read, ups22StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups22Control 3 }

   ups22RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups22ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups22RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups22Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups22Traps              OBJECT IDENTIFIER ::= { upsModule22 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups22TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups22EstimatedMinutesRemaining, ups22SecondsOnBattery,
                 ups22ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups22Traps 1 }

   ups22TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups22TestId, ups22TestSpinLock,
                 ups22TestResultsSummary, ups22TestResultsDetail,
                 ups22TestStartTime, ups22TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups22Traps 2 }

   ups22TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups22AlarmId, ups22AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups22AlarmOnBattery and
               ups22AlarmTestInProgress."
     ::= { ups22Traps 3 }

   ups22TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups22AlarmId, ups22AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups22AlarmTestInProgress."
     ::= { ups22Traps 4 }


   --
   -- conformance information
   --
   ups22Conformance        OBJECT IDENTIFIER ::= { upsModule22 3 }

   ups22Compliances        OBJECT IDENTIFIER ::= { ups22Conformance 1 }


   --
   -- compliance statements
   --

   ups22SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups22SubsetIdentGroup,
                     ups22SubsetBatteryGroup, ups22SubsetInputGroup,
                     ups22SubsetOutputGroup, ups22SubsetAlarmGroup,
                     ups22SubsetControlGroup }

       OBJECT     ups22BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups22AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups22AlarmOnBattery, ups22AlarmLowBattery,
               ups22AlarmInputBad, ups22AlarmUpsOutputOff,
               ups22AlarmUpsSystemOff, and ups22AlarmTestInProgress."

       OBJECT     ups22OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups22ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups22Compliances 1 }

   ups22BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups22BasicIdentGroup,
                     ups22BasicBatteryGroup, ups22BasicInputGroup,
                     ups22BasicOutputGroup, ups22BasicAlarmGroup,
                     ups22BasicTestGroup, ups22BasicControlGroup }

       OBJECT     ups22AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups22AlarmOnBattery, ups22AlarmLowBattery,
               ups22AlarmDepletedBattery, ups22AlarmTempBad,
               ups22AlarmInputBad, ups22AlarmOutputOverload,
               ups22AlarmOnBypass, ups22AlarmBypassBad,
               ups22AlarmOutputOffAsRequested,
               ups22AlarmUpsOffAsRequested, ups22AlarmUpsOutputOff,
               ups22AlarmUpsSystemOff, ups22AlarmGeneralFault,
               ups22AlarmDiagnosticTestFailed,
               ups22AlarmCommunicationsLost, ups22AlarmShutdownPending,
               and ups22AlarmTestInProgress."

       OBJECT     ups22TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups22TestNoTestsInitiated."

       OBJECT     ups22OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups22BasicBypassGroup
           DESCRIPTION
               "The ups22BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups22ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups22Compliances 2 }

   ups22FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups22FullIdentGroup, ups22FullBatteryGroup,
                     ups22FullInputGroup, ups22FullOutputGroup,
                     ups22FullAlarmGroup, ups22FullTestGroup,
                     ups22FullControlGroup }

       OBJECT     ups22AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups22AlarmBatteryBad, ups22AlarmOnBattery,
               ups22AlarmLowBattery, ups22AlarmDepletedBattery,
               ups22AlarmTempBad, ups22AlarmInputBad, ups22AlarmOnBypass,
               ups22AlarmBypassBad, ups22AlarmOutputOffAsRequested,
               ups22AlarmUpsOffAsRequested, ups22AlarmUpsOutputOff,
               ups22AlarmUpsSystemOff, ups22AlarmGeneralFault,
               ups22AlarmDiagnosticTestFailed,
               ups22AlarmCommunicationsLost, ups22AlarmShutdownPending,
               and ups22AlarmTestInProgress."

       OBJECT     ups22TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups22TestNoTestsInitiated,
               ups22TestGeneralSystemsTest, and
               ups22TestQuickBatteryTest."

       OBJECT     ups22OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups22FullBypassGroup
           DESCRIPTION
               "The ups22FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups22ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups22Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups22Groups             OBJECT IDENTIFIER ::= { ups22Conformance 2 }

   ups22SubsetGroups       OBJECT IDENTIFIER ::= { ups22Groups 1 }

   ups22SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups22IdentManufacturer, ups22IdentModel,
                 ups22IdentAgentSoftwareVersion, ups22IdentName,
                 ups22IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups22SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups22SubsetGroups 1 }

   ups22SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups22BatteryStatus, ups22SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups22SubsetGroups 2 }

   ups22SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups22InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups22SubsetGroups 3 }

   ups22SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups22OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups22SubsetGroups 4 }


   -- { ups22SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups22SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups22AlarmsPresent, ups22AlarmDescr, ups22AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups22SubsetGroups 6 }

   -- { ups22SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups22SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups22ShutdownType, ups22ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups22SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups22SubsetGroups 8 }

   ups22BasicGroups        OBJECT IDENTIFIER ::= { ups22Groups 2 }

   ups22BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups22IdentManufacturer, ups22IdentModel,
                 ups22IdentUPSSoftwareVersion,
                 ups22IdentAgentSoftwareVersion, ups22IdentName }
       STATUS  current
       DESCRIPTION
               "The ups22BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 1 }

   ups22BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups22BatteryStatus, ups22SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups22BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 2 }

   ups22BasicInputGroup OBJECT-GROUP
       OBJECTS { ups22InputLineBads, ups22InputNumLines,
                 ups22InputFrequency, ups22InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups22BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 3 }

   ups22BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups22OutputSource, ups22OutputFrequency,
                 ups22OutputNumLines, ups22OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups22BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 4 }

   ups22BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups22BypassFrequency, ups22BypassNumLines,
                 ups22BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups22BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 5 }

   ups22BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups22AlarmsPresent, ups22AlarmDescr, ups22AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups22BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 6 }

   ups22BasicTestGroup OBJECT-GROUP
       OBJECTS { ups22TestId, ups22TestSpinLock,
                 ups22TestResultsSummary, ups22TestResultsDetail,
                 ups22TestStartTime, ups22TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups22BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 7 }

   ups22BasicControlGroup OBJECT-GROUP
       OBJECTS { ups22ShutdownType, ups22ShutdownAfterDelay,
                 ups22StartupAfterDelay, ups22RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups22BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups22BasicGroups 8 }

   ups22FullGroups         OBJECT IDENTIFIER ::= { ups22Groups 3 }

   ups22FullIdentGroup OBJECT-GROUP
       OBJECTS { ups22IdentManufacturer, ups22IdentModel,
                 ups22IdentUPSSoftwareVersion,
                 ups22IdentAgentSoftwareVersion, ups22IdentName,
                 ups22IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups22FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups22FullGroups 1 }

   ups22FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups22BatteryStatus, ups22SecondsOnBattery,
                 ups22EstimatedMinutesRemaining,
                 ups22EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups22FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups22FullGroups 2 }

   ups22FullInputGroup OBJECT-GROUP
       OBJECTS { ups22InputLineBads, ups22InputNumLines,
                 ups22InputFrequency, ups22InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups22FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups22FullGroups 3 }

   ups22FullOutputGroup OBJECT-GROUP
       OBJECTS { ups22OutputSource, ups22OutputFrequency,
                 ups22OutputNumLines, ups22OutputVoltage,
                 ups22OutputCurrent, ups22OutputPower,
                 ups22OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups22FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups22FullGroups 4 }

   ups22FullBypassGroup OBJECT-GROUP
       OBJECTS { ups22BypassFrequency, ups22BypassNumLines,
                 ups22BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups22FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups22FullGroups 5 }

   ups22FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups22AlarmsPresent, ups22AlarmDescr, ups22AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups22FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups22FullGroups 6 }

   ups22FullTestGroup OBJECT-GROUP
       OBJECTS { ups22TestId, ups22TestSpinLock,
                 ups22TestResultsSummary, ups22TestResultsDetail,
                 ups22TestStartTime, ups22TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups22FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups22FullGroups 7 }

   ups22FullControlGroup OBJECT-GROUP
       OBJECTS { ups22ShutdownType, ups22ShutdownAfterDelay,
                 ups22StartupAfterDelay, ups22RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups22FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups22FullGroups 8 }


   --*******************************************************************
   --
   -- Module 23 data
   --

   upsModule23           OBJECT IDENTIFIER ::= { upsModular 24 }
   ups23Objects           OBJECT IDENTIFIER ::= { upsModule23 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups23IdentName and
   --      ups23IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups23Ident              OBJECT IDENTIFIER ::= { ups23Objects 1 }

   ups23IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups23Ident 1 }

   ups23IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups23Ident 2 }

   ups23IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups23IdentAgentSoftwareVersion in some implementations."
       ::= { ups23Ident 3 }

   ups23IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups23IdentUPSSoftwareVersion in some implementations."
       ::= { ups23Ident 4 }

   ups23IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups23Ident 5 }

   ups23IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups23Ident 6 }


   --
   -- Battery Group
   --

   ups23Battery            OBJECT IDENTIFIER ::= { ups23Objects 2 }

   ups23BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups23ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups23ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups23Battery 1 }

   ups23SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups23Battery 2 }

   ups23EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups23Battery 3 }

   ups23EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups23Battery 4 }

   ups23BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups23Battery 5 }

   ups23BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups23Battery 6 }

   ups23BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups23Battery 7 }


   --
   -- Input Group
   --

   ups23Input              OBJECT IDENTIFIER ::= { ups23Objects 3 }

   ups23InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups23Input 1 }


   ups23InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups23Input 2 }

   ups23InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups23InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups23InputNumLines."
       ::= { ups23Input 3 }

   ups23InputEntry OBJECT-TYPE
       SYNTAX     Ups23InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups23InputLineIndex }
       ::= { ups23InputTable 1 }

   Ups23InputEntry ::= SEQUENCE {
       ups23InputLineIndex   PositiveInteger,
       ups23InputFrequency   NonNegativeInteger,
       ups23InputVoltage     NonNegativeInteger,
       ups23InputCurrent     NonNegativeInteger,
       ups23InputTruePower   NonNegativeInteger
   }

   ups23InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups23InputEntry 1 }

   ups23InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups23InputEntry 2 }

   ups23InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups23InputEntry 3 }

   ups23InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups23InputEntry 4 }

   ups23InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups23InputEntry 5 }


   --
   -- The Output group.
   --

   ups23Output             OBJECT IDENTIFIER ::= { ups23Objects 4 }

   ups23OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups23Output 1 }

   ups23OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups23Output 2 }

   ups23OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups23Output 3 }

   ups23OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups23OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups23OutputNumLines."
       ::= { ups23Output 4 }

   ups23OutputEntry OBJECT-TYPE
       SYNTAX     Ups23OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups23OutputLineIndex }
       ::= { ups23OutputTable 1 }

   Ups23OutputEntry ::= SEQUENCE {
       ups23OutputLineIndex   PositiveInteger,
       ups23OutputVoltage     NonNegativeInteger,
       ups23OutputCurrent     NonNegativeInteger,
       ups23OutputPower       NonNegativeInteger,
       ups23OutputPercentLoad INTEGER
   }

   ups23OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups23OutputEntry 1 }

   ups23OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups23OutputEntry 2 }

   ups23OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups23OutputEntry 3 }

   ups23OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups23OutputEntry 4 }

   ups23OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups23OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups23Bypass             OBJECT IDENTIFIER ::= { ups23Objects 5 }

   ups23BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups23Bypass 1 }

   ups23BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups23Bypass 2 }

   ups23BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups23BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups23BypassNumLines."
       ::= { ups23Bypass 3 }

   ups23BypassEntry OBJECT-TYPE
       SYNTAX     Ups23BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups23BypassLineIndex }
       ::= { ups23BypassTable 1 }

   Ups23BypassEntry ::= SEQUENCE {
       ups23BypassLineIndex  PositiveInteger,
       ups23BypassVoltage    NonNegativeInteger,
       ups23BypassCurrent    NonNegativeInteger,
       ups23BypassPower      NonNegativeInteger
   }

   ups23BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups23BypassEntry 1 }

   ups23BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups23BypassEntry 2 }

   ups23BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups23BypassEntry 3 }

   ups23BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups23BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups23Alarm              OBJECT IDENTIFIER ::= { ups23Objects 6 }

   ups23AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups23Alarm 1 }

   ups23AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups23AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups23AlarmId equal to 1, and increments the value of
               ups23AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups23AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups23AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups23AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups23AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups23AlarmsPresent."
       ::= { ups23Alarm 2 }

   ups23AlarmEntry OBJECT-TYPE
       SYNTAX     Ups23AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups23AlarmId }
       ::= { ups23AlarmTable 1 }

   Ups23AlarmEntry ::= SEQUENCE {
       ups23AlarmId          PositiveInteger,
       ups23AlarmDescr       AutonomousType,
       ups23AlarmTime        TimeStamp
   }

   ups23AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups23AlarmEntry 1 }

   ups23AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups23AlarmEntry 2 }

   ups23AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups23AlarmTime shall equal
               0."
       ::= { ups23AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups23WellKnownAlarms    OBJECT IDENTIFIER ::= { ups23Alarm 3 }
   ups23AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups23WellKnownAlarms  1 }

   ups23AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups23WellKnownAlarms  2 }

   ups23AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups23ConfigLowBattTime."
       ::= { ups23WellKnownAlarms  3 }


   ups23AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups23WellKnownAlarms  4 }

   ups23AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups23WellKnownAlarms  5 }

   ups23AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups23WellKnownAlarms  6 }

   ups23AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups23WellKnownAlarms  7 }

   ups23AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups23WellKnownAlarms  8 }

   ups23AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups23WellKnownAlarms  9 }

   ups23AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups23WellKnownAlarms 10 }

   ups23AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups23WellKnownAlarms 11 }

   ups23AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups23WellKnownAlarms 12 }

   ups23AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups23WellKnownAlarms 13 }

   ups23AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups23WellKnownAlarms 14 }

   ups23AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups23WellKnownAlarms 15 }

   ups23AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups23WellKnownAlarms 16 }

   ups23AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups23WellKnownAlarms 17 }

   ups23AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups23WellKnownAlarms 18 }

   ups23AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups23WellKnownAlarms 19 }

   ups23AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups23WellKnownAlarms 20 }

   ups23AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups23WellKnownAlarms 21 }

   ups23AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups23ShutdownAfterDelay countdown is underway."
       ::= { ups23WellKnownAlarms 22 }

   ups23AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups23WellKnownAlarms 23 }

   ups23AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups23WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups23Test               OBJECT IDENTIFIER ::= { ups23Objects 7 }

   ups23TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups23TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups23TestResultsSummary. Tests in progress may be
               aborted by setting the ups23TestId variable to
               ups23TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups23TestNoTestsInitiated is returned."
       ::= { ups23Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups23TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups23TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups23TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups23TestResultsSummary */
                     get (upsTestSpinLock, ups23TestResultsSummary,
               ups23TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups23TestResultsSummary,
               ups23TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups23TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups23TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups23Test 2 }

   ups23TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups23TestId to ups23TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups23Test 3 }

   ups23TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups23TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups23Test 4 }

   ups23TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups23TestResultsSummary is noTestsInitiated(6),
               ups23TestStartTime has the value 0."
       ::= { ups23Test 5 }

   ups23TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups23TestResultsSummary is noTestsInitiated(6),
               ups23TestElapsedTime has the value 0."
       ::= { ups23Test 6 }

   --
   -- Well known tests.
   --

   ups23WellKnownTests     OBJECT IDENTIFIER ::= { ups23Test 7 }


   ups23TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups23WellKnownTests  1 }

   ups23TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups23WellKnownTests  2 }

   ups23TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups23WellKnownTests  3 }

   ups23TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups23WellKnownTests  4 }

   ups23TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups23WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups23Control            OBJECT IDENTIFIER ::= { ups23Objects 8 }

   ups23ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups23ShutdownAfterDelay and ups23RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups23Control 1 }

   ups23ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups23ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups23ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups23ShutdownType =
               output and the output is already off.  When read,
               ups23ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups23ShutdownAfterDelay already in effect."
       ::= { ups23Control 2 }

   ups23StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups23StartupAfterDelay
               countdown or ups23RebootWithDuration countdown in
               progress.  When read, ups23StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups23Control 3 }

   ups23RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups23ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups23RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups23Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups23Traps              OBJECT IDENTIFIER ::= { upsModule23 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups23TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups23EstimatedMinutesRemaining, ups23SecondsOnBattery,
                 ups23ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups23Traps 1 }

   ups23TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups23TestId, ups23TestSpinLock,
                 ups23TestResultsSummary, ups23TestResultsDetail,
                 ups23TestStartTime, ups23TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups23Traps 2 }

   ups23TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups23AlarmId, ups23AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups23AlarmOnBattery and
               ups23AlarmTestInProgress."
     ::= { ups23Traps 3 }

   ups23TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups23AlarmId, ups23AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups23AlarmTestInProgress."
     ::= { ups23Traps 4 }


   --
   -- conformance information
   --
   ups23Conformance        OBJECT IDENTIFIER ::= { upsModule23 3 }

   ups23Compliances        OBJECT IDENTIFIER ::= { ups23Conformance 1 }


   --
   -- compliance statements
   --

   ups23SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups23SubsetIdentGroup,
                     ups23SubsetBatteryGroup, ups23SubsetInputGroup,
                     ups23SubsetOutputGroup, ups23SubsetAlarmGroup,
                     ups23SubsetControlGroup }

       OBJECT     ups23BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups23AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups23AlarmOnBattery, ups23AlarmLowBattery,
               ups23AlarmInputBad, ups23AlarmUpsOutputOff,
               ups23AlarmUpsSystemOff, and ups23AlarmTestInProgress."

       OBJECT     ups23OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups23ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups23Compliances 1 }

   ups23BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups23BasicIdentGroup,
                     ups23BasicBatteryGroup, ups23BasicInputGroup,
                     ups23BasicOutputGroup, ups23BasicAlarmGroup,
                     ups23BasicTestGroup, ups23BasicControlGroup }

       OBJECT     ups23AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups23AlarmOnBattery, ups23AlarmLowBattery,
               ups23AlarmDepletedBattery, ups23AlarmTempBad,
               ups23AlarmInputBad, ups23AlarmOutputOverload,
               ups23AlarmOnBypass, ups23AlarmBypassBad,
               ups23AlarmOutputOffAsRequested,
               ups23AlarmUpsOffAsRequested, ups23AlarmUpsOutputOff,
               ups23AlarmUpsSystemOff, ups23AlarmGeneralFault,
               ups23AlarmDiagnosticTestFailed,
               ups23AlarmCommunicationsLost, ups23AlarmShutdownPending,
               and ups23AlarmTestInProgress."

       OBJECT     ups23TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups23TestNoTestsInitiated."

       OBJECT     ups23OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups23BasicBypassGroup
           DESCRIPTION
               "The ups23BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups23ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups23Compliances 2 }

   ups23FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups23FullIdentGroup, ups23FullBatteryGroup,
                     ups23FullInputGroup, ups23FullOutputGroup,
                     ups23FullAlarmGroup, ups23FullTestGroup,
                     ups23FullControlGroup }

       OBJECT     ups23AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups23AlarmBatteryBad, ups23AlarmOnBattery,
               ups23AlarmLowBattery, ups23AlarmDepletedBattery,
               ups23AlarmTempBad, ups23AlarmInputBad, ups23AlarmOnBypass,
               ups23AlarmBypassBad, ups23AlarmOutputOffAsRequested,
               ups23AlarmUpsOffAsRequested, ups23AlarmUpsOutputOff,
               ups23AlarmUpsSystemOff, ups23AlarmGeneralFault,
               ups23AlarmDiagnosticTestFailed,
               ups23AlarmCommunicationsLost, ups23AlarmShutdownPending,
               and ups23AlarmTestInProgress."

       OBJECT     ups23TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups23TestNoTestsInitiated,
               ups23TestGeneralSystemsTest, and
               ups23TestQuickBatteryTest."

       OBJECT     ups23OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups23FullBypassGroup
           DESCRIPTION
               "The ups23FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups23ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups23Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups23Groups             OBJECT IDENTIFIER ::= { ups23Conformance 2 }

   ups23SubsetGroups       OBJECT IDENTIFIER ::= { ups23Groups 1 }

   ups23SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups23IdentManufacturer, ups23IdentModel,
                 ups23IdentAgentSoftwareVersion, ups23IdentName,
                 ups23IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups23SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups23SubsetGroups 1 }

   ups23SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups23BatteryStatus, ups23SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups23SubsetGroups 2 }

   ups23SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups23InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups23SubsetGroups 3 }

   ups23SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups23OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups23SubsetGroups 4 }


   -- { ups23SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups23SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups23AlarmsPresent, ups23AlarmDescr, ups23AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups23SubsetGroups 6 }

   -- { ups23SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups23SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups23ShutdownType, ups23ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups23SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups23SubsetGroups 8 }

   ups23BasicGroups        OBJECT IDENTIFIER ::= { ups23Groups 2 }

   ups23BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups23IdentManufacturer, ups23IdentModel,
                 ups23IdentUPSSoftwareVersion,
                 ups23IdentAgentSoftwareVersion, ups23IdentName }
       STATUS  current
       DESCRIPTION
               "The ups23BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 1 }

   ups23BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups23BatteryStatus, ups23SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups23BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 2 }

   ups23BasicInputGroup OBJECT-GROUP
       OBJECTS { ups23InputLineBads, ups23InputNumLines,
                 ups23InputFrequency, ups23InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups23BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 3 }

   ups23BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups23OutputSource, ups23OutputFrequency,
                 ups23OutputNumLines, ups23OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups23BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 4 }

   ups23BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups23BypassFrequency, ups23BypassNumLines,
                 ups23BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups23BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 5 }

   ups23BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups23AlarmsPresent, ups23AlarmDescr, ups23AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups23BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 6 }

   ups23BasicTestGroup OBJECT-GROUP
       OBJECTS { ups23TestId, ups23TestSpinLock,
                 ups23TestResultsSummary, ups23TestResultsDetail,
                 ups23TestStartTime, ups23TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups23BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 7 }

   ups23BasicControlGroup OBJECT-GROUP
       OBJECTS { ups23ShutdownType, ups23ShutdownAfterDelay,
                 ups23StartupAfterDelay, ups23RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups23BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups23BasicGroups 8 }

   ups23FullGroups         OBJECT IDENTIFIER ::= { ups23Groups 3 }

   ups23FullIdentGroup OBJECT-GROUP
       OBJECTS { ups23IdentManufacturer, ups23IdentModel,
                 ups23IdentUPSSoftwareVersion,
                 ups23IdentAgentSoftwareVersion, ups23IdentName,
                 ups23IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups23FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups23FullGroups 1 }

   ups23FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups23BatteryStatus, ups23SecondsOnBattery,
                 ups23EstimatedMinutesRemaining,
                 ups23EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups23FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups23FullGroups 2 }

   ups23FullInputGroup OBJECT-GROUP
       OBJECTS { ups23InputLineBads, ups23InputNumLines,
                 ups23InputFrequency, ups23InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups23FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups23FullGroups 3 }

   ups23FullOutputGroup OBJECT-GROUP
       OBJECTS { ups23OutputSource, ups23OutputFrequency,
                 ups23OutputNumLines, ups23OutputVoltage,
                 ups23OutputCurrent, ups23OutputPower,
                 ups23OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups23FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups23FullGroups 4 }

   ups23FullBypassGroup OBJECT-GROUP
       OBJECTS { ups23BypassFrequency, ups23BypassNumLines,
                 ups23BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups23FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups23FullGroups 5 }

   ups23FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups23AlarmsPresent, ups23AlarmDescr, ups23AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups23FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups23FullGroups 6 }

   ups23FullTestGroup OBJECT-GROUP
       OBJECTS { ups23TestId, ups23TestSpinLock,
                 ups23TestResultsSummary, ups23TestResultsDetail,
                 ups23TestStartTime, ups23TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups23FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups23FullGroups 7 }

   ups23FullControlGroup OBJECT-GROUP
       OBJECTS { ups23ShutdownType, ups23ShutdownAfterDelay,
                 ups23StartupAfterDelay, ups23RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups23FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups23FullGroups 8 }


   --*******************************************************************
   --
   -- Module 24 data
   --

   upsModule24           OBJECT IDENTIFIER ::= { upsModular 25 }
   ups24Objects           OBJECT IDENTIFIER ::= { upsModule24 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups24IdentName and
   --      ups24IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups24Ident              OBJECT IDENTIFIER ::= { ups24Objects 1 }

   ups24IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups24Ident 1 }

   ups24IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups24Ident 2 }

   ups24IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups24IdentAgentSoftwareVersion in some implementations."
       ::= { ups24Ident 3 }

   ups24IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups24IdentUPSSoftwareVersion in some implementations."
       ::= { ups24Ident 4 }

   ups24IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups24Ident 5 }

   ups24IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups24Ident 6 }


   --
   -- Battery Group
   --

   ups24Battery            OBJECT IDENTIFIER ::= { ups24Objects 2 }

   ups24BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups24ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups24ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups24Battery 1 }

   ups24SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups24Battery 2 }

   ups24EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups24Battery 3 }

   ups24EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups24Battery 4 }

   ups24BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups24Battery 5 }

   ups24BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups24Battery 6 }

   ups24BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups24Battery 7 }


   --
   -- Input Group
   --

   ups24Input              OBJECT IDENTIFIER ::= { ups24Objects 3 }

   ups24InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups24Input 1 }


   ups24InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups24Input 2 }

   ups24InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups24InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups24InputNumLines."
       ::= { ups24Input 3 }

   ups24InputEntry OBJECT-TYPE
       SYNTAX     Ups24InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups24InputLineIndex }
       ::= { ups24InputTable 1 }

   Ups24InputEntry ::= SEQUENCE {
       ups24InputLineIndex   PositiveInteger,
       ups24InputFrequency   NonNegativeInteger,
       ups24InputVoltage     NonNegativeInteger,
       ups24InputCurrent     NonNegativeInteger,
       ups24InputTruePower   NonNegativeInteger
   }

   ups24InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups24InputEntry 1 }

   ups24InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups24InputEntry 2 }

   ups24InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups24InputEntry 3 }

   ups24InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups24InputEntry 4 }

   ups24InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups24InputEntry 5 }


   --
   -- The Output group.
   --

   ups24Output             OBJECT IDENTIFIER ::= { ups24Objects 4 }

   ups24OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups24Output 1 }

   ups24OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups24Output 2 }

   ups24OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups24Output 3 }

   ups24OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups24OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups24OutputNumLines."
       ::= { ups24Output 4 }

   ups24OutputEntry OBJECT-TYPE
       SYNTAX     Ups24OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups24OutputLineIndex }
       ::= { ups24OutputTable 1 }

   Ups24OutputEntry ::= SEQUENCE {
       ups24OutputLineIndex   PositiveInteger,
       ups24OutputVoltage     NonNegativeInteger,
       ups24OutputCurrent     NonNegativeInteger,
       ups24OutputPower       NonNegativeInteger,
       ups24OutputPercentLoad INTEGER
   }

   ups24OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups24OutputEntry 1 }

   ups24OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups24OutputEntry 2 }

   ups24OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups24OutputEntry 3 }

   ups24OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups24OutputEntry 4 }

   ups24OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups24OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups24Bypass             OBJECT IDENTIFIER ::= { ups24Objects 5 }

   ups24BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups24Bypass 1 }

   ups24BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups24Bypass 2 }

   ups24BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups24BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups24BypassNumLines."
       ::= { ups24Bypass 3 }

   ups24BypassEntry OBJECT-TYPE
       SYNTAX     Ups24BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups24BypassLineIndex }
       ::= { ups24BypassTable 1 }

   Ups24BypassEntry ::= SEQUENCE {
       ups24BypassLineIndex  PositiveInteger,
       ups24BypassVoltage    NonNegativeInteger,
       ups24BypassCurrent    NonNegativeInteger,
       ups24BypassPower      NonNegativeInteger
   }

   ups24BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups24BypassEntry 1 }

   ups24BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups24BypassEntry 2 }

   ups24BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups24BypassEntry 3 }

   ups24BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups24BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups24Alarm              OBJECT IDENTIFIER ::= { ups24Objects 6 }

   ups24AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups24Alarm 1 }

   ups24AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups24AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups24AlarmId equal to 1, and increments the value of
               ups24AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups24AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups24AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups24AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups24AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups24AlarmsPresent."
       ::= { ups24Alarm 2 }

   ups24AlarmEntry OBJECT-TYPE
       SYNTAX     Ups24AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups24AlarmId }
       ::= { ups24AlarmTable 1 }

   Ups24AlarmEntry ::= SEQUENCE {
       ups24AlarmId          PositiveInteger,
       ups24AlarmDescr       AutonomousType,
       ups24AlarmTime        TimeStamp
   }

   ups24AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups24AlarmEntry 1 }

   ups24AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups24AlarmEntry 2 }

   ups24AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups24AlarmTime shall equal
               0."
       ::= { ups24AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups24WellKnownAlarms    OBJECT IDENTIFIER ::= { ups24Alarm 3 }
   ups24AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups24WellKnownAlarms  1 }

   ups24AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups24WellKnownAlarms  2 }

   ups24AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups24ConfigLowBattTime."
       ::= { ups24WellKnownAlarms  3 }


   ups24AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups24WellKnownAlarms  4 }

   ups24AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups24WellKnownAlarms  5 }

   ups24AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups24WellKnownAlarms  6 }

   ups24AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups24WellKnownAlarms  7 }

   ups24AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups24WellKnownAlarms  8 }

   ups24AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups24WellKnownAlarms  9 }

   ups24AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups24WellKnownAlarms 10 }

   ups24AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups24WellKnownAlarms 11 }

   ups24AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups24WellKnownAlarms 12 }

   ups24AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups24WellKnownAlarms 13 }

   ups24AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups24WellKnownAlarms 14 }

   ups24AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups24WellKnownAlarms 15 }

   ups24AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups24WellKnownAlarms 16 }

   ups24AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups24WellKnownAlarms 17 }

   ups24AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups24WellKnownAlarms 18 }

   ups24AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups24WellKnownAlarms 19 }

   ups24AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups24WellKnownAlarms 20 }

   ups24AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups24WellKnownAlarms 21 }

   ups24AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups24ShutdownAfterDelay countdown is underway."
       ::= { ups24WellKnownAlarms 22 }

   ups24AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups24WellKnownAlarms 23 }

   ups24AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups24WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups24Test               OBJECT IDENTIFIER ::= { ups24Objects 7 }

   ups24TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups24TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups24TestResultsSummary. Tests in progress may be
               aborted by setting the ups24TestId variable to
               ups24TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups24TestNoTestsInitiated is returned."
       ::= { ups24Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups24TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups24TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups24TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups24TestResultsSummary */
                     get (upsTestSpinLock, ups24TestResultsSummary,
               ups24TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups24TestResultsSummary,
               ups24TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups24TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups24TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups24Test 2 }

   ups24TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups24TestId to ups24TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups24Test 3 }

   ups24TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups24TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups24Test 4 }

   ups24TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups24TestResultsSummary is noTestsInitiated(6),
               ups24TestStartTime has the value 0."
       ::= { ups24Test 5 }

   ups24TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups24TestResultsSummary is noTestsInitiated(6),
               ups24TestElapsedTime has the value 0."
       ::= { ups24Test 6 }

   --
   -- Well known tests.
   --

   ups24WellKnownTests     OBJECT IDENTIFIER ::= { ups24Test 7 }


   ups24TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups24WellKnownTests  1 }

   ups24TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups24WellKnownTests  2 }

   ups24TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups24WellKnownTests  3 }

   ups24TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups24WellKnownTests  4 }

   ups24TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups24WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups24Control            OBJECT IDENTIFIER ::= { ups24Objects 8 }

   ups24ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups24ShutdownAfterDelay and ups24RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups24Control 1 }

   ups24ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups24ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups24ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups24ShutdownType =
               output and the output is already off.  When read,
               ups24ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups24ShutdownAfterDelay already in effect."
       ::= { ups24Control 2 }

   ups24StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups24StartupAfterDelay
               countdown or ups24RebootWithDuration countdown in
               progress.  When read, ups24StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups24Control 3 }

   ups24RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups24ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups24RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups24Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups24Traps              OBJECT IDENTIFIER ::= { upsModule24 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups24TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups24EstimatedMinutesRemaining, ups24SecondsOnBattery,
                 ups24ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups24Traps 1 }

   ups24TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups24TestId, ups24TestSpinLock,
                 ups24TestResultsSummary, ups24TestResultsDetail,
                 ups24TestStartTime, ups24TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups24Traps 2 }

   ups24TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups24AlarmId, ups24AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups24AlarmOnBattery and
               ups24AlarmTestInProgress."
     ::= { ups24Traps 3 }

   ups24TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups24AlarmId, ups24AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups24AlarmTestInProgress."
     ::= { ups24Traps 4 }


   --
   -- conformance information
   --
   ups24Conformance        OBJECT IDENTIFIER ::= { upsModule24 3 }

   ups24Compliances        OBJECT IDENTIFIER ::= { ups24Conformance 1 }


   --
   -- compliance statements
   --

   ups24SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups24SubsetIdentGroup,
                     ups24SubsetBatteryGroup, ups24SubsetInputGroup,
                     ups24SubsetOutputGroup, ups24SubsetAlarmGroup,
                     ups24SubsetControlGroup }

       OBJECT     ups24BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups24AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups24AlarmOnBattery, ups24AlarmLowBattery,
               ups24AlarmInputBad, ups24AlarmUpsOutputOff,
               ups24AlarmUpsSystemOff, and ups24AlarmTestInProgress."

       OBJECT     ups24OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups24ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups24Compliances 1 }

   ups24BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups24BasicIdentGroup,
                     ups24BasicBatteryGroup, ups24BasicInputGroup,
                     ups24BasicOutputGroup, ups24BasicAlarmGroup,
                     ups24BasicTestGroup, ups24BasicControlGroup }

       OBJECT     ups24AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups24AlarmOnBattery, ups24AlarmLowBattery,
               ups24AlarmDepletedBattery, ups24AlarmTempBad,
               ups24AlarmInputBad, ups24AlarmOutputOverload,
               ups24AlarmOnBypass, ups24AlarmBypassBad,
               ups24AlarmOutputOffAsRequested,
               ups24AlarmUpsOffAsRequested, ups24AlarmUpsOutputOff,
               ups24AlarmUpsSystemOff, ups24AlarmGeneralFault,
               ups24AlarmDiagnosticTestFailed,
               ups24AlarmCommunicationsLost, ups24AlarmShutdownPending,
               and ups24AlarmTestInProgress."

       OBJECT     ups24TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups24TestNoTestsInitiated."

       OBJECT     ups24OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups24BasicBypassGroup
           DESCRIPTION
               "The ups24BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups24ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."


       ::= { ups24Compliances 2 }

   ups24FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups24FullIdentGroup, ups24FullBatteryGroup,
                     ups24FullInputGroup, ups24FullOutputGroup,
                     ups24FullAlarmGroup, ups24FullTestGroup,
                     ups24FullControlGroup }

       OBJECT     ups24AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups24AlarmBatteryBad, ups24AlarmOnBattery,
               ups24AlarmLowBattery, ups24AlarmDepletedBattery,
               ups24AlarmTempBad, ups24AlarmInputBad, ups24AlarmOnBypass,
               ups24AlarmBypassBad, ups24AlarmOutputOffAsRequested,
               ups24AlarmUpsOffAsRequested, ups24AlarmUpsOutputOff,
               ups24AlarmUpsSystemOff, ups24AlarmGeneralFault,
               ups24AlarmDiagnosticTestFailed,
               ups24AlarmCommunicationsLost, ups24AlarmShutdownPending,
               and ups24AlarmTestInProgress."

       OBJECT     ups24TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups24TestNoTestsInitiated,
               ups24TestGeneralSystemsTest, and
               ups24TestQuickBatteryTest."

       OBJECT     ups24OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups24FullBypassGroup
           DESCRIPTION
               "The ups24FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups24ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups24Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups24Groups             OBJECT IDENTIFIER ::= { ups24Conformance 2 }

   ups24SubsetGroups       OBJECT IDENTIFIER ::= { ups24Groups 1 }

   ups24SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups24IdentManufacturer, ups24IdentModel,
                 ups24IdentAgentSoftwareVersion, ups24IdentName,
                 ups24IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups24SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups24SubsetGroups 1 }

   ups24SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups24BatteryStatus, ups24SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups24SubsetGroups 2 }

   ups24SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups24InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups24SubsetGroups 3 }

   ups24SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups24OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups24SubsetGroups 4 }


   -- { ups24SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups24SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups24AlarmsPresent, ups24AlarmDescr, ups24AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups24SubsetGroups 6 }

   -- { ups24SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups24SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups24ShutdownType, ups24ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups24SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups24SubsetGroups 8 }

   ups24BasicGroups        OBJECT IDENTIFIER ::= { ups24Groups 2 }

   ups24BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups24IdentManufacturer, ups24IdentModel,
                 ups24IdentUPSSoftwareVersion,
                 ups24IdentAgentSoftwareVersion, ups24IdentName }
       STATUS  current
       DESCRIPTION
               "The ups24BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 1 }

   ups24BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups24BatteryStatus, ups24SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups24BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 2 }

   ups24BasicInputGroup OBJECT-GROUP
       OBJECTS { ups24InputLineBads, ups24InputNumLines,
                 ups24InputFrequency, ups24InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups24BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 3 }

   ups24BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups24OutputSource, ups24OutputFrequency,
                 ups24OutputNumLines, ups24OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups24BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 4 }

   ups24BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups24BypassFrequency, ups24BypassNumLines,
                 ups24BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups24BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 5 }

   ups24BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups24AlarmsPresent, ups24AlarmDescr, ups24AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups24BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 6 }

   ups24BasicTestGroup OBJECT-GROUP
       OBJECTS { ups24TestId, ups24TestSpinLock,
                 ups24TestResultsSummary, ups24TestResultsDetail,
                 ups24TestStartTime, ups24TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups24BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 7 }

   ups24BasicControlGroup OBJECT-GROUP
       OBJECTS { ups24ShutdownType, ups24ShutdownAfterDelay,
                 ups24StartupAfterDelay, ups24RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups24BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups24BasicGroups 8 }

   ups24FullGroups         OBJECT IDENTIFIER ::= { ups24Groups 3 }

   ups24FullIdentGroup OBJECT-GROUP
       OBJECTS { ups24IdentManufacturer, ups24IdentModel,
                 ups24IdentUPSSoftwareVersion,
                 ups24IdentAgentSoftwareVersion, ups24IdentName,
                 ups24IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups24FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups24FullGroups 1 }

   ups24FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups24BatteryStatus, ups24SecondsOnBattery,
                 ups24EstimatedMinutesRemaining,
                 ups24EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups24FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups24FullGroups 2 }

   ups24FullInputGroup OBJECT-GROUP
       OBJECTS { ups24InputLineBads, ups24InputNumLines,
                 ups24InputFrequency, ups24InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups24FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups24FullGroups 3 }

   ups24FullOutputGroup OBJECT-GROUP
       OBJECTS { ups24OutputSource, ups24OutputFrequency,
                 ups24OutputNumLines, ups24OutputVoltage,
                 ups24OutputCurrent, ups24OutputPower,
                 ups24OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups24FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups24FullGroups 4 }

   ups24FullBypassGroup OBJECT-GROUP
       OBJECTS { ups24BypassFrequency, ups24BypassNumLines,
                 ups24BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups24FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups24FullGroups 5 }

   ups24FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups24AlarmsPresent, ups24AlarmDescr, ups24AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups24FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups24FullGroups 6 }

   ups24FullTestGroup OBJECT-GROUP
       OBJECTS { ups24TestId, ups24TestSpinLock,
                 ups24TestResultsSummary, ups24TestResultsDetail,
                 ups24TestStartTime, ups24TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups24FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups24FullGroups 7 }

   ups24FullControlGroup OBJECT-GROUP
       OBJECTS { ups24ShutdownType, ups24ShutdownAfterDelay,
                 ups24StartupAfterDelay, ups24RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups24FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups24FullGroups 8 }


   --*******************************************************************
   --
   -- Module 25 data
   --

   upsModule25           OBJECT IDENTIFIER ::= { upsModular 26 }
   ups25Objects           OBJECT IDENTIFIER ::= { upsModule25 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups25IdentName and
   --      ups25IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups25Ident              OBJECT IDENTIFIER ::= { ups25Objects 1 }

   ups25IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups25Ident 1 }

   ups25IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups25Ident 2 }

   ups25IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups25IdentAgentSoftwareVersion in some implementations."
       ::= { ups25Ident 3 }

   ups25IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups25IdentUPSSoftwareVersion in some implementations."
       ::= { ups25Ident 4 }

   ups25IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups25Ident 5 }

   ups25IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups25Ident 6 }


   --
   -- Battery Group
   --

   ups25Battery            OBJECT IDENTIFIER ::= { ups25Objects 2 }

   ups25BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups25ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups25ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups25Battery 1 }

   ups25SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups25Battery 2 }

   ups25EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups25Battery 3 }

   ups25EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups25Battery 4 }

   ups25BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups25Battery 5 }

   ups25BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups25Battery 6 }

   ups25BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups25Battery 7 }


   --
   -- Input Group
   --

   ups25Input              OBJECT IDENTIFIER ::= { ups25Objects 3 }

   ups25InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups25Input 1 }


   ups25InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups25Input 2 }

   ups25InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups25InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups25InputNumLines."
       ::= { ups25Input 3 }

   ups25InputEntry OBJECT-TYPE
       SYNTAX     Ups25InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups25InputLineIndex }
       ::= { ups25InputTable 1 }

   Ups25InputEntry ::= SEQUENCE {
       ups25InputLineIndex   PositiveInteger,
       ups25InputFrequency   NonNegativeInteger,
       ups25InputVoltage     NonNegativeInteger,
       ups25InputCurrent     NonNegativeInteger,
       ups25InputTruePower   NonNegativeInteger
   }

   ups25InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups25InputEntry 1 }

   ups25InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups25InputEntry 2 }

   ups25InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups25InputEntry 3 }

   ups25InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups25InputEntry 4 }

   ups25InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups25InputEntry 5 }


   --
   -- The Output group.
   --

   ups25Output             OBJECT IDENTIFIER ::= { ups25Objects 4 }

   ups25OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups25Output 1 }

   ups25OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups25Output 2 }

   ups25OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups25Output 3 }

   ups25OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups25OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups25OutputNumLines."
       ::= { ups25Output 4 }

   ups25OutputEntry OBJECT-TYPE
       SYNTAX     Ups25OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups25OutputLineIndex }
       ::= { ups25OutputTable 1 }

   Ups25OutputEntry ::= SEQUENCE {
       ups25OutputLineIndex   PositiveInteger,
       ups25OutputVoltage     NonNegativeInteger,
       ups25OutputCurrent     NonNegativeInteger,
       ups25OutputPower       NonNegativeInteger,
       ups25OutputPercentLoad INTEGER
   }

   ups25OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups25OutputEntry 1 }

   ups25OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups25OutputEntry 2 }

   ups25OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups25OutputEntry 3 }

   ups25OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups25OutputEntry 4 }

   ups25OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups25OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups25Bypass             OBJECT IDENTIFIER ::= { ups25Objects 5 }

   ups25BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups25Bypass 1 }

   ups25BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups25Bypass 2 }

   ups25BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups25BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups25BypassNumLines."
       ::= { ups25Bypass 3 }

   ups25BypassEntry OBJECT-TYPE
       SYNTAX     Ups25BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups25BypassLineIndex }
       ::= { ups25BypassTable 1 }

   Ups25BypassEntry ::= SEQUENCE {
       ups25BypassLineIndex  PositiveInteger,
       ups25BypassVoltage    NonNegativeInteger,
       ups25BypassCurrent    NonNegativeInteger,
       ups25BypassPower      NonNegativeInteger
   }

   ups25BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups25BypassEntry 1 }

   ups25BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups25BypassEntry 2 }

   ups25BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups25BypassEntry 3 }

   ups25BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups25BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups25Alarm              OBJECT IDENTIFIER ::= { ups25Objects 6 }

   ups25AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups25Alarm 1 }

   ups25AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups25AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups25AlarmId equal to 1, and increments the value of
               ups25AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups25AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups25AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups25AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups25AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups25AlarmsPresent."
       ::= { ups25Alarm 2 }

   ups25AlarmEntry OBJECT-TYPE
       SYNTAX     Ups25AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups25AlarmId }
       ::= { ups25AlarmTable 1 }

   Ups25AlarmEntry ::= SEQUENCE {
       ups25AlarmId          PositiveInteger,
       ups25AlarmDescr       AutonomousType,
       ups25AlarmTime        TimeStamp
   }

   ups25AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups25AlarmEntry 1 }

   ups25AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups25AlarmEntry 2 }

   ups25AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups25AlarmTime shall equal
               0."
       ::= { ups25AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups25WellKnownAlarms    OBJECT IDENTIFIER ::= { ups25Alarm 3 }
   ups25AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups25WellKnownAlarms  1 }

   ups25AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups25WellKnownAlarms  2 }

   ups25AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups25ConfigLowBattTime."
       ::= { ups25WellKnownAlarms  3 }


   ups25AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups25WellKnownAlarms  4 }

   ups25AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups25WellKnownAlarms  5 }

   ups25AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups25WellKnownAlarms  6 }

   ups25AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups25WellKnownAlarms  7 }

   ups25AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups25WellKnownAlarms  8 }

   ups25AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups25WellKnownAlarms  9 }

   ups25AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups25WellKnownAlarms 10 }

   ups25AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups25WellKnownAlarms 11 }

   ups25AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups25WellKnownAlarms 12 }

   ups25AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups25WellKnownAlarms 13 }

   ups25AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups25WellKnownAlarms 14 }

   ups25AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups25WellKnownAlarms 15 }

   ups25AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups25WellKnownAlarms 16 }

   ups25AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups25WellKnownAlarms 17 }

   ups25AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups25WellKnownAlarms 18 }

   ups25AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups25WellKnownAlarms 19 }

   ups25AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups25WellKnownAlarms 20 }

   ups25AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups25WellKnownAlarms 21 }

   ups25AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups25ShutdownAfterDelay countdown is underway."
       ::= { ups25WellKnownAlarms 22 }

   ups25AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups25WellKnownAlarms 23 }

   ups25AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups25WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups25Test               OBJECT IDENTIFIER ::= { ups25Objects 7 }

   ups25TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups25TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups25TestResultsSummary. Tests in progress may be
               aborted by setting the ups25TestId variable to
               ups25TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups25TestNoTestsInitiated is returned."
       ::= { ups25Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups25TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups25TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups25TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups25TestResultsSummary */
                     get (upsTestSpinLock, ups25TestResultsSummary,
               ups25TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups25TestResultsSummary,
               ups25TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups25TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups25TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups25Test 2 }

   ups25TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups25TestId to ups25TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups25Test 3 }

   ups25TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups25TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups25Test 4 }

   ups25TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups25TestResultsSummary is noTestsInitiated(6),
               ups25TestStartTime has the value 0."
       ::= { ups25Test 5 }

   ups25TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups25TestResultsSummary is noTestsInitiated(6),
               ups25TestElapsedTime has the value 0."
       ::= { ups25Test 6 }

   --
   -- Well known tests.
   --

   ups25WellKnownTests     OBJECT IDENTIFIER ::= { ups25Test 7 }


   ups25TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups25WellKnownTests  1 }

   ups25TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups25WellKnownTests  2 }

   ups25TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups25WellKnownTests  3 }

   ups25TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups25WellKnownTests  4 }

   ups25TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups25WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups25Control            OBJECT IDENTIFIER ::= { ups25Objects 8 }

   ups25ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups25ShutdownAfterDelay and ups25RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups25Control 1 }

   ups25ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups25ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups25ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups25ShutdownType =
               output and the output is already off.  When read,
               ups25ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups25ShutdownAfterDelay already in effect."
       ::= { ups25Control 2 }

   ups25StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups25StartupAfterDelay
               countdown or ups25RebootWithDuration countdown in
               progress.  When read, ups25StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups25Control 3 }

   ups25RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups25ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups25RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups25Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups25Traps              OBJECT IDENTIFIER ::= { upsModule25 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups25TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups25EstimatedMinutesRemaining, ups25SecondsOnBattery,
                 ups25ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups25Traps 1 }

   ups25TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups25TestId, ups25TestSpinLock,
                 ups25TestResultsSummary, ups25TestResultsDetail,
                 ups25TestStartTime, ups25TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups25Traps 2 }

   ups25TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups25AlarmId, ups25AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups25AlarmOnBattery and
               ups25AlarmTestInProgress."
     ::= { ups25Traps 3 }

   ups25TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups25AlarmId, ups25AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups25AlarmTestInProgress."
     ::= { ups25Traps 4 }


   --
   -- conformance information
   --
   ups25Conformance        OBJECT IDENTIFIER ::= { upsModule25 3 }

   ups25Compliances        OBJECT IDENTIFIER ::= { ups25Conformance 1 }


   --
   -- compliance statements
   --

   ups25SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups25SubsetIdentGroup,
                     ups25SubsetBatteryGroup, ups25SubsetInputGroup,
                     ups25SubsetOutputGroup, ups25SubsetAlarmGroup,
                     ups25SubsetControlGroup }

       OBJECT     ups25BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups25AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups25AlarmOnBattery, ups25AlarmLowBattery,
               ups25AlarmInputBad, ups25AlarmUpsOutputOff,
               ups25AlarmUpsSystemOff, and ups25AlarmTestInProgress."

       OBJECT     ups25OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups25ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups25Compliances 1 }

   ups25BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups25BasicIdentGroup,
                     ups25BasicBatteryGroup, ups25BasicInputGroup,
                     ups25BasicOutputGroup, ups25BasicAlarmGroup,
                     ups25BasicTestGroup, ups25BasicControlGroup }

       OBJECT     ups25AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups25AlarmOnBattery, ups25AlarmLowBattery,
               ups25AlarmDepletedBattery, ups25AlarmTempBad,
               ups25AlarmInputBad, ups25AlarmOutputOverload,
               ups25AlarmOnBypass, ups25AlarmBypassBad,
               ups25AlarmOutputOffAsRequested,
               ups25AlarmUpsOffAsRequested, ups25AlarmUpsOutputOff,
               ups25AlarmUpsSystemOff, ups25AlarmGeneralFault,
               ups25AlarmDiagnosticTestFailed,
               ups25AlarmCommunicationsLost, ups25AlarmShutdownPending,
               and ups25AlarmTestInProgress."

       OBJECT     ups25TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups25TestNoTestsInitiated."

       OBJECT     ups25OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups25BasicBypassGroup
           DESCRIPTION
               "The ups25BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups25ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups25Compliances 2 }

   ups25FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups25FullIdentGroup, ups25FullBatteryGroup,
                     ups25FullInputGroup, ups25FullOutputGroup,
                     ups25FullAlarmGroup, ups25FullTestGroup,
                     ups25FullControlGroup }

       OBJECT     ups25AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups25AlarmBatteryBad, ups25AlarmOnBattery,
               ups25AlarmLowBattery, ups25AlarmDepletedBattery,
               ups25AlarmTempBad, ups25AlarmInputBad, ups25AlarmOnBypass,
               ups25AlarmBypassBad, ups25AlarmOutputOffAsRequested,
               ups25AlarmUpsOffAsRequested, ups25AlarmUpsOutputOff,
               ups25AlarmUpsSystemOff, ups25AlarmGeneralFault,
               ups25AlarmDiagnosticTestFailed,
               ups25AlarmCommunicationsLost, ups25AlarmShutdownPending,
               and ups25AlarmTestInProgress."

       OBJECT     ups25TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups25TestNoTestsInitiated,
               ups25TestGeneralSystemsTest, and
               ups25TestQuickBatteryTest."

       OBJECT     ups25OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups25FullBypassGroup
           DESCRIPTION
               "The ups25FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups25ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups25Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups25Groups             OBJECT IDENTIFIER ::= { ups25Conformance 2 }

   ups25SubsetGroups       OBJECT IDENTIFIER ::= { ups25Groups 1 }

   ups25SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups25IdentManufacturer, ups25IdentModel,
                 ups25IdentAgentSoftwareVersion, ups25IdentName,
                 ups25IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups25SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups25SubsetGroups 1 }

   ups25SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups25BatteryStatus, ups25SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups25SubsetGroups 2 }

   ups25SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups25InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups25SubsetGroups 3 }

   ups25SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups25OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups25SubsetGroups 4 }


   -- { ups25SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups25SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups25AlarmsPresent, ups25AlarmDescr, ups25AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups25SubsetGroups 6 }

   -- { ups25SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups25SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups25ShutdownType, ups25ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups25SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups25SubsetGroups 8 }

   ups25BasicGroups        OBJECT IDENTIFIER ::= { ups25Groups 2 }

   ups25BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups25IdentManufacturer, ups25IdentModel,
                 ups25IdentUPSSoftwareVersion,
                 ups25IdentAgentSoftwareVersion, ups25IdentName }
       STATUS  current
       DESCRIPTION
               "The ups25BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 1 }

   ups25BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups25BatteryStatus, ups25SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups25BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 2 }

   ups25BasicInputGroup OBJECT-GROUP
       OBJECTS { ups25InputLineBads, ups25InputNumLines,
                 ups25InputFrequency, ups25InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups25BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 3 }

   ups25BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups25OutputSource, ups25OutputFrequency,
                 ups25OutputNumLines, ups25OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups25BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 4 }

   ups25BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups25BypassFrequency, ups25BypassNumLines,
                 ups25BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups25BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 5 }

   ups25BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups25AlarmsPresent, ups25AlarmDescr, ups25AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups25BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 6 }

   ups25BasicTestGroup OBJECT-GROUP
       OBJECTS { ups25TestId, ups25TestSpinLock,
                 ups25TestResultsSummary, ups25TestResultsDetail,
                 ups25TestStartTime, ups25TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups25BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 7 }

   ups25BasicControlGroup OBJECT-GROUP
       OBJECTS { ups25ShutdownType, ups25ShutdownAfterDelay,
                 ups25StartupAfterDelay, ups25RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups25BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups25BasicGroups 8 }

   ups25FullGroups         OBJECT IDENTIFIER ::= { ups25Groups 3 }

   ups25FullIdentGroup OBJECT-GROUP
       OBJECTS { ups25IdentManufacturer, ups25IdentModel,
                 ups25IdentUPSSoftwareVersion,
                 ups25IdentAgentSoftwareVersion, ups25IdentName,
                 ups25IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups25FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups25FullGroups 1 }

   ups25FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups25BatteryStatus, ups25SecondsOnBattery,
                 ups25EstimatedMinutesRemaining,
                 ups25EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups25FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups25FullGroups 2 }

   ups25FullInputGroup OBJECT-GROUP
       OBJECTS { ups25InputLineBads, ups25InputNumLines,
                 ups25InputFrequency, ups25InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups25FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups25FullGroups 3 }

   ups25FullOutputGroup OBJECT-GROUP
       OBJECTS { ups25OutputSource, ups25OutputFrequency,
                 ups25OutputNumLines, ups25OutputVoltage,
                 ups25OutputCurrent, ups25OutputPower,
                 ups25OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups25FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups25FullGroups 4 }

   ups25FullBypassGroup OBJECT-GROUP
       OBJECTS { ups25BypassFrequency, ups25BypassNumLines,
                 ups25BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups25FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups25FullGroups 5 }

   ups25FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups25AlarmsPresent, ups25AlarmDescr, ups25AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups25FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups25FullGroups 6 }

   ups25FullTestGroup OBJECT-GROUP
       OBJECTS { ups25TestId, ups25TestSpinLock,
                 ups25TestResultsSummary, ups25TestResultsDetail,
                 ups25TestStartTime, ups25TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups25FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups25FullGroups 7 }

   ups25FullControlGroup OBJECT-GROUP
       OBJECTS { ups25ShutdownType, ups25ShutdownAfterDelay,
                 ups25StartupAfterDelay, ups25RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups25FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups25FullGroups 8 }


   --*******************************************************************
   --
   -- Module 26 data
   --

   upsModule26           OBJECT IDENTIFIER ::= { upsModular 27 }
   ups26Objects           OBJECT IDENTIFIER ::= { upsModule26 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups26IdentName and
   --      ups26IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups26Ident              OBJECT IDENTIFIER ::= { ups26Objects 1 }

   ups26IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups26Ident 1 }

   ups26IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups26Ident 2 }

   ups26IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups26IdentAgentSoftwareVersion in some implementations."
       ::= { ups26Ident 3 }

   ups26IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups26IdentUPSSoftwareVersion in some implementations."
       ::= { ups26Ident 4 }

   ups26IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups26Ident 5 }

   ups26IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups26Ident 6 }


   --
   -- Battery Group
   --

   ups26Battery            OBJECT IDENTIFIER ::= { ups26Objects 2 }

   ups26BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups26ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups26ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups26Battery 1 }

   ups26SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups26Battery 2 }

   ups26EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups26Battery 3 }

   ups26EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups26Battery 4 }

   ups26BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups26Battery 5 }

   ups26BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups26Battery 6 }

   ups26BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups26Battery 7 }


   --
   -- Input Group
   --

   ups26Input              OBJECT IDENTIFIER ::= { ups26Objects 3 }

   ups26InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups26Input 1 }


   ups26InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups26Input 2 }

   ups26InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups26InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups26InputNumLines."
       ::= { ups26Input 3 }

   ups26InputEntry OBJECT-TYPE
       SYNTAX     Ups26InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups26InputLineIndex }
       ::= { ups26InputTable 1 }

   Ups26InputEntry ::= SEQUENCE {
       ups26InputLineIndex   PositiveInteger,
       ups26InputFrequency   NonNegativeInteger,
       ups26InputVoltage     NonNegativeInteger,
       ups26InputCurrent     NonNegativeInteger,
       ups26InputTruePower   NonNegativeInteger
   }

   ups26InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups26InputEntry 1 }

   ups26InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups26InputEntry 2 }

   ups26InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups26InputEntry 3 }

   ups26InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups26InputEntry 4 }

   ups26InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups26InputEntry 5 }


   --
   -- The Output group.
   --

   ups26Output             OBJECT IDENTIFIER ::= { ups26Objects 4 }

   ups26OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups26Output 1 }

   ups26OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups26Output 2 }

   ups26OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups26Output 3 }

   ups26OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups26OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups26OutputNumLines."
       ::= { ups26Output 4 }

   ups26OutputEntry OBJECT-TYPE
       SYNTAX     Ups26OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups26OutputLineIndex }
       ::= { ups26OutputTable 1 }

   Ups26OutputEntry ::= SEQUENCE {
       ups26OutputLineIndex   PositiveInteger,
       ups26OutputVoltage     NonNegativeInteger,
       ups26OutputCurrent     NonNegativeInteger,
       ups26OutputPower       NonNegativeInteger,
       ups26OutputPercentLoad INTEGER
   }

   ups26OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups26OutputEntry 1 }

   ups26OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups26OutputEntry 2 }

   ups26OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups26OutputEntry 3 }

   ups26OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups26OutputEntry 4 }

   ups26OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups26OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups26Bypass             OBJECT IDENTIFIER ::= { ups26Objects 5 }

   ups26BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups26Bypass 1 }

   ups26BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups26Bypass 2 }

   ups26BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups26BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups26BypassNumLines."
       ::= { ups26Bypass 3 }

   ups26BypassEntry OBJECT-TYPE
       SYNTAX     Ups26BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups26BypassLineIndex }
       ::= { ups26BypassTable 1 }

   Ups26BypassEntry ::= SEQUENCE {
       ups26BypassLineIndex  PositiveInteger,
       ups26BypassVoltage    NonNegativeInteger,
       ups26BypassCurrent    NonNegativeInteger,
       ups26BypassPower      NonNegativeInteger
   }

   ups26BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups26BypassEntry 1 }

   ups26BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups26BypassEntry 2 }

   ups26BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups26BypassEntry 3 }

   ups26BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups26BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups26Alarm              OBJECT IDENTIFIER ::= { ups26Objects 6 }

   ups26AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups26Alarm 1 }

   ups26AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups26AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups26AlarmId equal to 1, and increments the value of
               ups26AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups26AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups26AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups26AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups26AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups26AlarmsPresent."
       ::= { ups26Alarm 2 }

   ups26AlarmEntry OBJECT-TYPE
       SYNTAX     Ups26AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups26AlarmId }
       ::= { ups26AlarmTable 1 }

   Ups26AlarmEntry ::= SEQUENCE {
       ups26AlarmId          PositiveInteger,
       ups26AlarmDescr       AutonomousType,
       ups26AlarmTime        TimeStamp
   }

   ups26AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups26AlarmEntry 1 }

   ups26AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups26AlarmEntry 2 }

   ups26AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups26AlarmTime shall equal
               0."
       ::= { ups26AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups26WellKnownAlarms    OBJECT IDENTIFIER ::= { ups26Alarm 3 }
   ups26AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups26WellKnownAlarms  1 }

   ups26AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups26WellKnownAlarms  2 }

   ups26AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups26ConfigLowBattTime."
       ::= { ups26WellKnownAlarms  3 }


   ups26AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups26WellKnownAlarms  4 }

   ups26AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups26WellKnownAlarms  5 }

   ups26AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups26WellKnownAlarms  6 }

   ups26AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups26WellKnownAlarms  7 }

   ups26AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups26WellKnownAlarms  8 }

   ups26AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups26WellKnownAlarms  9 }

   ups26AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups26WellKnownAlarms 10 }

   ups26AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups26WellKnownAlarms 11 }

   ups26AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups26WellKnownAlarms 12 }

   ups26AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups26WellKnownAlarms 13 }

   ups26AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups26WellKnownAlarms 14 }

   ups26AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups26WellKnownAlarms 15 }

   ups26AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups26WellKnownAlarms 16 }

   ups26AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups26WellKnownAlarms 17 }

   ups26AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups26WellKnownAlarms 18 }

   ups26AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups26WellKnownAlarms 19 }

   ups26AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups26WellKnownAlarms 20 }

   ups26AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups26WellKnownAlarms 21 }

   ups26AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups26ShutdownAfterDelay countdown is underway."
       ::= { ups26WellKnownAlarms 22 }

   ups26AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups26WellKnownAlarms 23 }

   ups26AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups26WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups26Test               OBJECT IDENTIFIER ::= { ups26Objects 7 }

   ups26TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups26TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups26TestResultsSummary. Tests in progress may be
               aborted by setting the ups26TestId variable to
               ups26TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups26TestNoTestsInitiated is returned."
       ::= { ups26Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups26TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups26TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups26TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups26TestResultsSummary */
                     get (upsTestSpinLock, ups26TestResultsSummary,
               ups26TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups26TestResultsSummary,
               ups26TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups26TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups26TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups26Test 2 }

   ups26TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups26TestId to ups26TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups26Test 3 }

   ups26TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups26TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups26Test 4 }

   ups26TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups26TestResultsSummary is noTestsInitiated(6),
               ups26TestStartTime has the value 0."
       ::= { ups26Test 5 }

   ups26TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups26TestResultsSummary is noTestsInitiated(6),
               ups26TestElapsedTime has the value 0."
       ::= { ups26Test 6 }

   --
   -- Well known tests.
   --

   ups26WellKnownTests     OBJECT IDENTIFIER ::= { ups26Test 7 }


   ups26TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups26WellKnownTests  1 }

   ups26TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups26WellKnownTests  2 }

   ups26TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups26WellKnownTests  3 }

   ups26TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups26WellKnownTests  4 }

   ups26TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups26WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups26Control            OBJECT IDENTIFIER ::= { ups26Objects 8 }

   ups26ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups26ShutdownAfterDelay and ups26RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups26Control 1 }

   ups26ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups26ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups26ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups26ShutdownType =
               output and the output is already off.  When read,
               ups26ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups26ShutdownAfterDelay already in effect."
       ::= { ups26Control 2 }

   ups26StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups26StartupAfterDelay
               countdown or ups26RebootWithDuration countdown in
               progress.  When read, ups26StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups26Control 3 }

   ups26RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups26ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups26RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups26Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups26Traps              OBJECT IDENTIFIER ::= { upsModule26 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups26TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups26EstimatedMinutesRemaining, ups26SecondsOnBattery,
                 ups26ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups26Traps 1 }

   ups26TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups26TestId, ups26TestSpinLock,
                 ups26TestResultsSummary, ups26TestResultsDetail,
                 ups26TestStartTime, ups26TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups26Traps 2 }

   ups26TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups26AlarmId, ups26AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups26AlarmOnBattery and
               ups26AlarmTestInProgress."
     ::= { ups26Traps 3 }

   ups26TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups26AlarmId, ups26AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups26AlarmTestInProgress."
     ::= { ups26Traps 4 }


   --
   -- conformance information
   --
   ups26Conformance        OBJECT IDENTIFIER ::= { upsModule26 3 }

   ups26Compliances        OBJECT IDENTIFIER ::= { ups26Conformance 1 }


   --
   -- compliance statements
   --

   ups26SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups26SubsetIdentGroup,
                     ups26SubsetBatteryGroup, ups26SubsetInputGroup,
                     ups26SubsetOutputGroup, ups26SubsetAlarmGroup,
                     ups26SubsetControlGroup }

       OBJECT     ups26BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups26AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups26AlarmOnBattery, ups26AlarmLowBattery,
               ups26AlarmInputBad, ups26AlarmUpsOutputOff,
               ups26AlarmUpsSystemOff, and ups26AlarmTestInProgress."

       OBJECT     ups26OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups26ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups26Compliances 1 }

   ups26BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups26BasicIdentGroup,
                     ups26BasicBatteryGroup, ups26BasicInputGroup,
                     ups26BasicOutputGroup, ups26BasicAlarmGroup,
                     ups26BasicTestGroup, ups26BasicControlGroup }

       OBJECT     ups26AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups26AlarmOnBattery, ups26AlarmLowBattery,
               ups26AlarmDepletedBattery, ups26AlarmTempBad,
               ups26AlarmInputBad, ups26AlarmOutputOverload,
               ups26AlarmOnBypass, ups26AlarmBypassBad,
               ups26AlarmOutputOffAsRequested,
               ups26AlarmUpsOffAsRequested, ups26AlarmUpsOutputOff,
               ups26AlarmUpsSystemOff, ups26AlarmGeneralFault,
               ups26AlarmDiagnosticTestFailed,
               ups26AlarmCommunicationsLost, ups26AlarmShutdownPending,
               and ups26AlarmTestInProgress."

       OBJECT     ups26TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups26TestNoTestsInitiated."

       OBJECT     ups26OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups26BasicBypassGroup
           DESCRIPTION
               "The ups26BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups26ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups26Compliances 2 }

   ups26FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups26FullIdentGroup, ups26FullBatteryGroup,
                     ups26FullInputGroup, ups26FullOutputGroup,
                     ups26FullAlarmGroup, ups26FullTestGroup,
                     ups26FullControlGroup }

       OBJECT     ups26AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups26AlarmBatteryBad, ups26AlarmOnBattery,
               ups26AlarmLowBattery, ups26AlarmDepletedBattery,
               ups26AlarmTempBad, ups26AlarmInputBad, ups26AlarmOnBypass,
               ups26AlarmBypassBad, ups26AlarmOutputOffAsRequested,
               ups26AlarmUpsOffAsRequested, ups26AlarmUpsOutputOff,
               ups26AlarmUpsSystemOff, ups26AlarmGeneralFault,
               ups26AlarmDiagnosticTestFailed,
               ups26AlarmCommunicationsLost, ups26AlarmShutdownPending,
               and ups26AlarmTestInProgress."

       OBJECT     ups26TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups26TestNoTestsInitiated,
               ups26TestGeneralSystemsTest, and
               ups26TestQuickBatteryTest."

       OBJECT     ups26OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups26FullBypassGroup
           DESCRIPTION
               "The ups26FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups26ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups26Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups26Groups             OBJECT IDENTIFIER ::= { ups26Conformance 2 }

   ups26SubsetGroups       OBJECT IDENTIFIER ::= { ups26Groups 1 }

   ups26SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups26IdentManufacturer, ups26IdentModel,
                 ups26IdentAgentSoftwareVersion, ups26IdentName,
                 ups26IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups26SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups26SubsetGroups 1 }

   ups26SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups26BatteryStatus, ups26SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups26SubsetGroups 2 }

   ups26SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups26InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups26SubsetGroups 3 }

   ups26SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups26OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups26SubsetGroups 4 }


   -- { ups26SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups26SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups26AlarmsPresent, ups26AlarmDescr, ups26AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups26SubsetGroups 6 }

   -- { ups26SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups26SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups26ShutdownType, ups26ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups26SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups26SubsetGroups 8 }

   ups26BasicGroups        OBJECT IDENTIFIER ::= { ups26Groups 2 }

   ups26BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups26IdentManufacturer, ups26IdentModel,
                 ups26IdentUPSSoftwareVersion,
                 ups26IdentAgentSoftwareVersion, ups26IdentName }
       STATUS  current
       DESCRIPTION
               "The ups26BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 1 }

   ups26BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups26BatteryStatus, ups26SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups26BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 2 }

   ups26BasicInputGroup OBJECT-GROUP
       OBJECTS { ups26InputLineBads, ups26InputNumLines,
                 ups26InputFrequency, ups26InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups26BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 3 }

   ups26BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups26OutputSource, ups26OutputFrequency,
                 ups26OutputNumLines, ups26OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups26BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 4 }

   ups26BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups26BypassFrequency, ups26BypassNumLines,
                 ups26BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups26BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 5 }

   ups26BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups26AlarmsPresent, ups26AlarmDescr, ups26AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups26BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 6 }

   ups26BasicTestGroup OBJECT-GROUP
       OBJECTS { ups26TestId, ups26TestSpinLock,
                 ups26TestResultsSummary, ups26TestResultsDetail,
                 ups26TestStartTime, ups26TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups26BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 7 }

   ups26BasicControlGroup OBJECT-GROUP
       OBJECTS { ups26ShutdownType, ups26ShutdownAfterDelay,
                 ups26StartupAfterDelay, ups26RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups26BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups26BasicGroups 8 }

   ups26FullGroups         OBJECT IDENTIFIER ::= { ups26Groups 3 }

   ups26FullIdentGroup OBJECT-GROUP
       OBJECTS { ups26IdentManufacturer, ups26IdentModel,
                 ups26IdentUPSSoftwareVersion,
                 ups26IdentAgentSoftwareVersion, ups26IdentName,
                 ups26IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups26FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups26FullGroups 1 }

   ups26FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups26BatteryStatus, ups26SecondsOnBattery,
                 ups26EstimatedMinutesRemaining,
                 ups26EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups26FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups26FullGroups 2 }

   ups26FullInputGroup OBJECT-GROUP
       OBJECTS { ups26InputLineBads, ups26InputNumLines,
                 ups26InputFrequency, ups26InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups26FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups26FullGroups 3 }

   ups26FullOutputGroup OBJECT-GROUP
       OBJECTS { ups26OutputSource, ups26OutputFrequency,
                 ups26OutputNumLines, ups26OutputVoltage,
                 ups26OutputCurrent, ups26OutputPower,
                 ups26OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups26FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups26FullGroups 4 }

   ups26FullBypassGroup OBJECT-GROUP
       OBJECTS { ups26BypassFrequency, ups26BypassNumLines,
                 ups26BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups26FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups26FullGroups 5 }

   ups26FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups26AlarmsPresent, ups26AlarmDescr, ups26AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups26FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups26FullGroups 6 }

   ups26FullTestGroup OBJECT-GROUP
       OBJECTS { ups26TestId, ups26TestSpinLock,
                 ups26TestResultsSummary, ups26TestResultsDetail,
                 ups26TestStartTime, ups26TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups26FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups26FullGroups 7 }

   ups26FullControlGroup OBJECT-GROUP
       OBJECTS { ups26ShutdownType, ups26ShutdownAfterDelay,
                 ups26StartupAfterDelay, ups26RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups26FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups26FullGroups 8 }


   --*******************************************************************
   --
   -- Module 27 data
   --

   upsModule27           OBJECT IDENTIFIER ::= { upsModular 28 }
   ups27Objects           OBJECT IDENTIFIER ::= { upsModule27 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups27IdentName and
   --      ups27IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups27Ident              OBJECT IDENTIFIER ::= { ups27Objects 1 }

   ups27IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups27Ident 1 }

   ups27IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups27Ident 2 }

   ups27IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups27IdentAgentSoftwareVersion in some implementations."
       ::= { ups27Ident 3 }

   ups27IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups27IdentUPSSoftwareVersion in some implementations."
       ::= { ups27Ident 4 }

   ups27IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups27Ident 5 }

   ups27IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups27Ident 6 }


   --
   -- Battery Group
   --

   ups27Battery            OBJECT IDENTIFIER ::= { ups27Objects 2 }

   ups27BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups27ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups27ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups27Battery 1 }

   ups27SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups27Battery 2 }

   ups27EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups27Battery 3 }

   ups27EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups27Battery 4 }

   ups27BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups27Battery 5 }

   ups27BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups27Battery 6 }

   ups27BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups27Battery 7 }


   --
   -- Input Group
   --

   ups27Input              OBJECT IDENTIFIER ::= { ups27Objects 3 }

   ups27InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups27Input 1 }


   ups27InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups27Input 2 }

   ups27InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups27InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups27InputNumLines."
       ::= { ups27Input 3 }

   ups27InputEntry OBJECT-TYPE
       SYNTAX     Ups27InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups27InputLineIndex }
       ::= { ups27InputTable 1 }

   Ups27InputEntry ::= SEQUENCE {
       ups27InputLineIndex   PositiveInteger,
       ups27InputFrequency   NonNegativeInteger,
       ups27InputVoltage     NonNegativeInteger,
       ups27InputCurrent     NonNegativeInteger,
       ups27InputTruePower   NonNegativeInteger
   }

   ups27InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups27InputEntry 1 }

   ups27InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups27InputEntry 2 }

   ups27InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups27InputEntry 3 }

   ups27InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups27InputEntry 4 }

   ups27InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups27InputEntry 5 }


   --
   -- The Output group.
   --

   ups27Output             OBJECT IDENTIFIER ::= { ups27Objects 4 }

   ups27OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups27Output 1 }

   ups27OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups27Output 2 }

   ups27OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups27Output 3 }

   ups27OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups27OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups27OutputNumLines."
       ::= { ups27Output 4 }

   ups27OutputEntry OBJECT-TYPE
       SYNTAX     Ups27OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups27OutputLineIndex }
       ::= { ups27OutputTable 1 }

   Ups27OutputEntry ::= SEQUENCE {
       ups27OutputLineIndex   PositiveInteger,
       ups27OutputVoltage     NonNegativeInteger,
       ups27OutputCurrent     NonNegativeInteger,
       ups27OutputPower       NonNegativeInteger,
       ups27OutputPercentLoad INTEGER
   }

   ups27OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups27OutputEntry 1 }

   ups27OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups27OutputEntry 2 }

   ups27OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups27OutputEntry 3 }

   ups27OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups27OutputEntry 4 }

   ups27OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups27OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups27Bypass             OBJECT IDENTIFIER ::= { ups27Objects 5 }

   ups27BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups27Bypass 1 }

   ups27BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups27Bypass 2 }

   ups27BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups27BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups27BypassNumLines."
       ::= { ups27Bypass 3 }

   ups27BypassEntry OBJECT-TYPE
       SYNTAX     Ups27BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups27BypassLineIndex }
       ::= { ups27BypassTable 1 }

   Ups27BypassEntry ::= SEQUENCE {
       ups27BypassLineIndex  PositiveInteger,
       ups27BypassVoltage    NonNegativeInteger,
       ups27BypassCurrent    NonNegativeInteger,
       ups27BypassPower      NonNegativeInteger
   }

   ups27BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups27BypassEntry 1 }

   ups27BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups27BypassEntry 2 }

   ups27BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups27BypassEntry 3 }

   ups27BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups27BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups27Alarm              OBJECT IDENTIFIER ::= { ups27Objects 6 }

   ups27AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups27Alarm 1 }

   ups27AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups27AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups27AlarmId equal to 1, and increments the value of
               ups27AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups27AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups27AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups27AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups27AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups27AlarmsPresent."
       ::= { ups27Alarm 2 }

   ups27AlarmEntry OBJECT-TYPE
       SYNTAX     Ups27AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups27AlarmId }
       ::= { ups27AlarmTable 1 }

   Ups27AlarmEntry ::= SEQUENCE {
       ups27AlarmId          PositiveInteger,
       ups27AlarmDescr       AutonomousType,
       ups27AlarmTime        TimeStamp
   }

   ups27AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups27AlarmEntry 1 }

   ups27AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups27AlarmEntry 2 }

   ups27AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups27AlarmTime shall equal
               0."
       ::= { ups27AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups27WellKnownAlarms    OBJECT IDENTIFIER ::= { ups27Alarm 3 }
   ups27AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups27WellKnownAlarms  1 }

   ups27AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups27WellKnownAlarms  2 }

   ups27AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups27ConfigLowBattTime."
       ::= { ups27WellKnownAlarms  3 }


   ups27AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups27WellKnownAlarms  4 }

   ups27AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups27WellKnownAlarms  5 }

   ups27AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups27WellKnownAlarms  6 }

   ups27AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups27WellKnownAlarms  7 }

   ups27AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups27WellKnownAlarms  8 }

   ups27AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups27WellKnownAlarms  9 }

   ups27AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups27WellKnownAlarms 10 }

   ups27AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups27WellKnownAlarms 11 }

   ups27AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups27WellKnownAlarms 12 }

   ups27AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups27WellKnownAlarms 13 }

   ups27AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups27WellKnownAlarms 14 }

   ups27AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups27WellKnownAlarms 15 }

   ups27AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups27WellKnownAlarms 16 }

   ups27AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups27WellKnownAlarms 17 }

   ups27AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups27WellKnownAlarms 18 }

   ups27AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups27WellKnownAlarms 19 }

   ups27AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups27WellKnownAlarms 20 }

   ups27AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups27WellKnownAlarms 21 }

   ups27AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups27ShutdownAfterDelay countdown is underway."
       ::= { ups27WellKnownAlarms 22 }

   ups27AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups27WellKnownAlarms 23 }

   ups27AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups27WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups27Test               OBJECT IDENTIFIER ::= { ups27Objects 7 }

   ups27TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups27TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups27TestResultsSummary. Tests in progress may be
               aborted by setting the ups27TestId variable to
               ups27TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups27TestNoTestsInitiated is returned."
       ::= { ups27Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups27TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups27TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups27TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups27TestResultsSummary */
                     get (upsTestSpinLock, ups27TestResultsSummary,
               ups27TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups27TestResultsSummary,
               ups27TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups27TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups27TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups27Test 2 }

   ups27TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups27TestId to ups27TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups27Test 3 }

   ups27TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups27TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups27Test 4 }

   ups27TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups27TestResultsSummary is noTestsInitiated(6),
               ups27TestStartTime has the value 0."
       ::= { ups27Test 5 }

   ups27TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups27TestResultsSummary is noTestsInitiated(6),
               ups27TestElapsedTime has the value 0."
       ::= { ups27Test 6 }

   --
   -- Well known tests.
   --

   ups27WellKnownTests     OBJECT IDENTIFIER ::= { ups27Test 7 }


   ups27TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups27WellKnownTests  1 }

   ups27TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups27WellKnownTests  2 }

   ups27TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups27WellKnownTests  3 }

   ups27TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups27WellKnownTests  4 }

   ups27TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups27WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups27Control            OBJECT IDENTIFIER ::= { ups27Objects 8 }

   ups27ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups27ShutdownAfterDelay and ups27RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups27Control 1 }

   ups27ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups27ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups27ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups27ShutdownType =
               output and the output is already off.  When read,
               ups27ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups27ShutdownAfterDelay already in effect."
       ::= { ups27Control 2 }

   ups27StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups27StartupAfterDelay
               countdown or ups27RebootWithDuration countdown in
               progress.  When read, ups27StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups27Control 3 }

   ups27RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups27ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups27RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups27Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups27Traps              OBJECT IDENTIFIER ::= { upsModule27 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups27TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups27EstimatedMinutesRemaining, ups27SecondsOnBattery,
                 ups27ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups27Traps 1 }

   ups27TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups27TestId, ups27TestSpinLock,
                 ups27TestResultsSummary, ups27TestResultsDetail,
                 ups27TestStartTime, ups27TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups27Traps 2 }

   ups27TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups27AlarmId, ups27AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups27AlarmOnBattery and
               ups27AlarmTestInProgress."
     ::= { ups27Traps 3 }

   ups27TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups27AlarmId, ups27AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups27AlarmTestInProgress."
     ::= { ups27Traps 4 }


   --
   -- conformance information
   --
   ups27Conformance        OBJECT IDENTIFIER ::= { upsModule27 3 }

   ups27Compliances        OBJECT IDENTIFIER ::= { ups27Conformance 1 }


   --
   -- compliance statements
   --

   ups27SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups27SubsetIdentGroup,
                     ups27SubsetBatteryGroup, ups27SubsetInputGroup,
                     ups27SubsetOutputGroup, ups27SubsetAlarmGroup,
                     ups27SubsetControlGroup }

       OBJECT     ups27BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups27AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups27AlarmOnBattery, ups27AlarmLowBattery,
               ups27AlarmInputBad, ups27AlarmUpsOutputOff,
               ups27AlarmUpsSystemOff, and ups27AlarmTestInProgress."

       OBJECT     ups27OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups27ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups27Compliances 1 }

   ups27BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups27BasicIdentGroup,
                     ups27BasicBatteryGroup, ups27BasicInputGroup,
                     ups27BasicOutputGroup, ups27BasicAlarmGroup,
                     ups27BasicTestGroup, ups27BasicControlGroup }

       OBJECT     ups27AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups27AlarmOnBattery, ups27AlarmLowBattery,
               ups27AlarmDepletedBattery, ups27AlarmTempBad,
               ups27AlarmInputBad, ups27AlarmOutputOverload,
               ups27AlarmOnBypass, ups27AlarmBypassBad,
               ups27AlarmOutputOffAsRequested,
               ups27AlarmUpsOffAsRequested, ups27AlarmUpsOutputOff,
               ups27AlarmUpsSystemOff, ups27AlarmGeneralFault,
               ups27AlarmDiagnosticTestFailed,
               ups27AlarmCommunicationsLost, ups27AlarmShutdownPending,
               and ups27AlarmTestInProgress."

       OBJECT     ups27TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups27TestNoTestsInitiated."

       OBJECT     ups27OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups27BasicBypassGroup
           DESCRIPTION
               "The ups27BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups27ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups27Compliances 2 }

   ups27FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups27FullIdentGroup, ups27FullBatteryGroup,
                     ups27FullInputGroup, ups27FullOutputGroup,
                     ups27FullAlarmGroup, ups27FullTestGroup,
                     ups27FullControlGroup }

       OBJECT     ups27AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups27AlarmBatteryBad, ups27AlarmOnBattery,
               ups27AlarmLowBattery, ups27AlarmDepletedBattery,
               ups27AlarmTempBad, ups27AlarmInputBad, ups27AlarmOnBypass,
               ups27AlarmBypassBad, ups27AlarmOutputOffAsRequested,
               ups27AlarmUpsOffAsRequested, ups27AlarmUpsOutputOff,
               ups27AlarmUpsSystemOff, ups27AlarmGeneralFault,
               ups27AlarmDiagnosticTestFailed,
               ups27AlarmCommunicationsLost, ups27AlarmShutdownPending,
               and ups27AlarmTestInProgress."

       OBJECT     ups27TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups27TestNoTestsInitiated,
               ups27TestGeneralSystemsTest, and
               ups27TestQuickBatteryTest."

       OBJECT     ups27OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups27FullBypassGroup
           DESCRIPTION
               "The ups27FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups27ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups27Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups27Groups             OBJECT IDENTIFIER ::= { ups27Conformance 2 }

   ups27SubsetGroups       OBJECT IDENTIFIER ::= { ups27Groups 1 }

   ups27SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups27IdentManufacturer, ups27IdentModel,
                 ups27IdentAgentSoftwareVersion, ups27IdentName,
                 ups27IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups27SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups27SubsetGroups 1 }

   ups27SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups27BatteryStatus, ups27SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups27SubsetGroups 2 }

   ups27SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups27InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups27SubsetGroups 3 }

   ups27SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups27OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups27SubsetGroups 4 }


   -- { ups27SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups27SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups27AlarmsPresent, ups27AlarmDescr, ups27AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups27SubsetGroups 6 }

   -- { ups27SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups27SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups27ShutdownType, ups27ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups27SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups27SubsetGroups 8 }

   ups27BasicGroups        OBJECT IDENTIFIER ::= { ups27Groups 2 }

   ups27BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups27IdentManufacturer, ups27IdentModel,
                 ups27IdentUPSSoftwareVersion,
                 ups27IdentAgentSoftwareVersion, ups27IdentName }
       STATUS  current
       DESCRIPTION
               "The ups27BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 1 }

   ups27BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups27BatteryStatus, ups27SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups27BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 2 }

   ups27BasicInputGroup OBJECT-GROUP
       OBJECTS { ups27InputLineBads, ups27InputNumLines,
                 ups27InputFrequency, ups27InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups27BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 3 }

   ups27BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups27OutputSource, ups27OutputFrequency,
                 ups27OutputNumLines, ups27OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups27BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 4 }

   ups27BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups27BypassFrequency, ups27BypassNumLines,
                 ups27BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups27BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 5 }

   ups27BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups27AlarmsPresent, ups27AlarmDescr, ups27AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups27BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 6 }

   ups27BasicTestGroup OBJECT-GROUP
       OBJECTS { ups27TestId, ups27TestSpinLock,
                 ups27TestResultsSummary, ups27TestResultsDetail,
                 ups27TestStartTime, ups27TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups27BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 7 }

   ups27BasicControlGroup OBJECT-GROUP
       OBJECTS { ups27ShutdownType, ups27ShutdownAfterDelay,
                 ups27StartupAfterDelay, ups27RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups27BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups27BasicGroups 8 }

   ups27FullGroups         OBJECT IDENTIFIER ::= { ups27Groups 3 }

   ups27FullIdentGroup OBJECT-GROUP
       OBJECTS { ups27IdentManufacturer, ups27IdentModel,
                 ups27IdentUPSSoftwareVersion,
                 ups27IdentAgentSoftwareVersion, ups27IdentName,
                 ups27IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups27FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups27FullGroups 1 }

   ups27FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups27BatteryStatus, ups27SecondsOnBattery,
                 ups27EstimatedMinutesRemaining,
                 ups27EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups27FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups27FullGroups 2 }

   ups27FullInputGroup OBJECT-GROUP
       OBJECTS { ups27InputLineBads, ups27InputNumLines,
                 ups27InputFrequency, ups27InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups27FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups27FullGroups 3 }

   ups27FullOutputGroup OBJECT-GROUP
       OBJECTS { ups27OutputSource, ups27OutputFrequency,
                 ups27OutputNumLines, ups27OutputVoltage,
                 ups27OutputCurrent, ups27OutputPower,
                 ups27OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups27FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups27FullGroups 4 }

   ups27FullBypassGroup OBJECT-GROUP
       OBJECTS { ups27BypassFrequency, ups27BypassNumLines,
                 ups27BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups27FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups27FullGroups 5 }

   ups27FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups27AlarmsPresent, ups27AlarmDescr, ups27AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups27FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups27FullGroups 6 }

   ups27FullTestGroup OBJECT-GROUP
       OBJECTS { ups27TestId, ups27TestSpinLock,
                 ups27TestResultsSummary, ups27TestResultsDetail,
                 ups27TestStartTime, ups27TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups27FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups27FullGroups 7 }

   ups27FullControlGroup OBJECT-GROUP
       OBJECTS { ups27ShutdownType, ups27ShutdownAfterDelay,
                 ups27StartupAfterDelay, ups27RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups27FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups27FullGroups 8 }


   --*******************************************************************
   --
   -- Module 28 data
   --

   upsModule28           OBJECT IDENTIFIER ::= { upsModular 29 }
   ups28Objects           OBJECT IDENTIFIER ::= { upsModule28 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups28IdentName and
   --      ups28IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups28Ident              OBJECT IDENTIFIER ::= { ups28Objects 1 }

   ups28IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups28Ident 1 }

   ups28IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups28Ident 2 }

   ups28IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups28IdentAgentSoftwareVersion in some implementations."
       ::= { ups28Ident 3 }

   ups28IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups28IdentUPSSoftwareVersion in some implementations."
       ::= { ups28Ident 4 }

   ups28IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups28Ident 5 }

   ups28IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups28Ident 6 }


   --
   -- Battery Group
   --

   ups28Battery            OBJECT IDENTIFIER ::= { ups28Objects 2 }

   ups28BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups28ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups28ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups28Battery 1 }

   ups28SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups28Battery 2 }

   ups28EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups28Battery 3 }

   ups28EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups28Battery 4 }

   ups28BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups28Battery 5 }

   ups28BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups28Battery 6 }

   ups28BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups28Battery 7 }


   --
   -- Input Group
   --

   ups28Input              OBJECT IDENTIFIER ::= { ups28Objects 3 }

   ups28InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups28Input 1 }


   ups28InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups28Input 2 }

   ups28InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups28InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups28InputNumLines."
       ::= { ups28Input 3 }

   ups28InputEntry OBJECT-TYPE
       SYNTAX     Ups28InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups28InputLineIndex }
       ::= { ups28InputTable 1 }

   Ups28InputEntry ::= SEQUENCE {
       ups28InputLineIndex   PositiveInteger,
       ups28InputFrequency   NonNegativeInteger,
       ups28InputVoltage     NonNegativeInteger,
       ups28InputCurrent     NonNegativeInteger,
       ups28InputTruePower   NonNegativeInteger
   }

   ups28InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups28InputEntry 1 }

   ups28InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups28InputEntry 2 }

   ups28InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups28InputEntry 3 }

   ups28InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups28InputEntry 4 }

   ups28InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups28InputEntry 5 }


   --
   -- The Output group.
   --

   ups28Output             OBJECT IDENTIFIER ::= { ups28Objects 4 }

   ups28OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups28Output 1 }

   ups28OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups28Output 2 }

   ups28OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups28Output 3 }

   ups28OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups28OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups28OutputNumLines."
       ::= { ups28Output 4 }

   ups28OutputEntry OBJECT-TYPE
       SYNTAX     Ups28OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups28OutputLineIndex }
       ::= { ups28OutputTable 1 }

   Ups28OutputEntry ::= SEQUENCE {
       ups28OutputLineIndex   PositiveInteger,
       ups28OutputVoltage     NonNegativeInteger,
       ups28OutputCurrent     NonNegativeInteger,
       ups28OutputPower       NonNegativeInteger,
       ups28OutputPercentLoad INTEGER
   }

   ups28OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups28OutputEntry 1 }

   ups28OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups28OutputEntry 2 }

   ups28OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups28OutputEntry 3 }

   ups28OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups28OutputEntry 4 }

   ups28OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups28OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups28Bypass             OBJECT IDENTIFIER ::= { ups28Objects 5 }

   ups28BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups28Bypass 1 }

   ups28BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups28Bypass 2 }

   ups28BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups28BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups28BypassNumLines."
       ::= { ups28Bypass 3 }

   ups28BypassEntry OBJECT-TYPE
       SYNTAX     Ups28BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups28BypassLineIndex }
       ::= { ups28BypassTable 1 }

   Ups28BypassEntry ::= SEQUENCE {
       ups28BypassLineIndex  PositiveInteger,
       ups28BypassVoltage    NonNegativeInteger,
       ups28BypassCurrent    NonNegativeInteger,
       ups28BypassPower      NonNegativeInteger
   }

   ups28BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups28BypassEntry 1 }

   ups28BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups28BypassEntry 2 }

   ups28BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups28BypassEntry 3 }

   ups28BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups28BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups28Alarm              OBJECT IDENTIFIER ::= { ups28Objects 6 }

   ups28AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups28Alarm 1 }

   ups28AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups28AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups28AlarmId equal to 1, and increments the value of
               ups28AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups28AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups28AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups28AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups28AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups28AlarmsPresent."
       ::= { ups28Alarm 2 }

   ups28AlarmEntry OBJECT-TYPE
       SYNTAX     Ups28AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups28AlarmId }
       ::= { ups28AlarmTable 1 }

   Ups28AlarmEntry ::= SEQUENCE {
       ups28AlarmId          PositiveInteger,
       ups28AlarmDescr       AutonomousType,
       ups28AlarmTime        TimeStamp
   }

   ups28AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups28AlarmEntry 1 }

   ups28AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups28AlarmEntry 2 }

   ups28AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups28AlarmTime shall equal
               0."
       ::= { ups28AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups28WellKnownAlarms    OBJECT IDENTIFIER ::= { ups28Alarm 3 }
   ups28AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups28WellKnownAlarms  1 }

   ups28AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups28WellKnownAlarms  2 }

   ups28AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups28ConfigLowBattTime."
       ::= { ups28WellKnownAlarms  3 }


   ups28AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups28WellKnownAlarms  4 }

   ups28AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups28WellKnownAlarms  5 }

   ups28AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups28WellKnownAlarms  6 }

   ups28AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups28WellKnownAlarms  7 }

   ups28AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups28WellKnownAlarms  8 }

   ups28AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups28WellKnownAlarms  9 }

   ups28AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups28WellKnownAlarms 10 }

   ups28AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups28WellKnownAlarms 11 }

   ups28AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups28WellKnownAlarms 12 }

   ups28AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups28WellKnownAlarms 13 }

   ups28AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups28WellKnownAlarms 14 }

   ups28AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups28WellKnownAlarms 15 }

   ups28AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups28WellKnownAlarms 16 }

   ups28AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups28WellKnownAlarms 17 }

   ups28AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups28WellKnownAlarms 18 }

   ups28AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups28WellKnownAlarms 19 }

   ups28AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups28WellKnownAlarms 20 }

   ups28AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups28WellKnownAlarms 21 }

   ups28AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups28ShutdownAfterDelay countdown is underway."
       ::= { ups28WellKnownAlarms 22 }

   ups28AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups28WellKnownAlarms 23 }

   ups28AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups28WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups28Test               OBJECT IDENTIFIER ::= { ups28Objects 7 }

   ups28TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups28TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups28TestResultsSummary. Tests in progress may be
               aborted by setting the ups28TestId variable to
               ups28TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups28TestNoTestsInitiated is returned."
       ::= { ups28Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups28TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups28TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups28TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups28TestResultsSummary */
                     get (upsTestSpinLock, ups28TestResultsSummary,
               ups28TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups28TestResultsSummary,
               ups28TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups28TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups28TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups28Test 2 }

   ups28TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups28TestId to ups28TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups28Test 3 }

   ups28TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups28TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups28Test 4 }

   ups28TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups28TestResultsSummary is noTestsInitiated(6),
               ups28TestStartTime has the value 0."
       ::= { ups28Test 5 }

   ups28TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups28TestResultsSummary is noTestsInitiated(6),
               ups28TestElapsedTime has the value 0."
       ::= { ups28Test 6 }

   --
   -- Well known tests.
   --

   ups28WellKnownTests     OBJECT IDENTIFIER ::= { ups28Test 7 }


   ups28TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups28WellKnownTests  1 }

   ups28TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups28WellKnownTests  2 }

   ups28TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups28WellKnownTests  3 }

   ups28TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups28WellKnownTests  4 }

   ups28TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups28WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups28Control            OBJECT IDENTIFIER ::= { ups28Objects 8 }

   ups28ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups28ShutdownAfterDelay and ups28RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups28Control 1 }

   ups28ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups28ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups28ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups28ShutdownType =
               output and the output is already off.  When read,
               ups28ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups28ShutdownAfterDelay already in effect."
       ::= { ups28Control 2 }

   ups28StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups28StartupAfterDelay
               countdown or ups28RebootWithDuration countdown in
               progress.  When read, ups28StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups28Control 3 }

   ups28RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups28ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups28RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups28Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups28Traps              OBJECT IDENTIFIER ::= { upsModule28 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups28TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups28EstimatedMinutesRemaining, ups28SecondsOnBattery,
                 ups28ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups28Traps 1 }

   ups28TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups28TestId, ups28TestSpinLock,
                 ups28TestResultsSummary, ups28TestResultsDetail,
                 ups28TestStartTime, ups28TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups28Traps 2 }

   ups28TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups28AlarmId, ups28AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups28AlarmOnBattery and
               ups28AlarmTestInProgress."
     ::= { ups28Traps 3 }

   ups28TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups28AlarmId, ups28AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups28AlarmTestInProgress."
     ::= { ups28Traps 4 }


   --
   -- conformance information
   --
   ups28Conformance        OBJECT IDENTIFIER ::= { upsModule28 3 }

   ups28Compliances        OBJECT IDENTIFIER ::= { ups28Conformance 1 }


   --
   -- compliance statements
   --

   ups28SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups28SubsetIdentGroup,
                     ups28SubsetBatteryGroup, ups28SubsetInputGroup,
                     ups28SubsetOutputGroup, ups28SubsetAlarmGroup,
                     ups28SubsetControlGroup }

       OBJECT     ups28BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups28AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups28AlarmOnBattery, ups28AlarmLowBattery,
               ups28AlarmInputBad, ups28AlarmUpsOutputOff,
               ups28AlarmUpsSystemOff, and ups28AlarmTestInProgress."

       OBJECT     ups28OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups28ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups28Compliances 1 }

   ups28BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups28BasicIdentGroup,
                     ups28BasicBatteryGroup, ups28BasicInputGroup,
                     ups28BasicOutputGroup, ups28BasicAlarmGroup,
                     ups28BasicTestGroup, ups28BasicControlGroup }

       OBJECT     ups28AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups28AlarmOnBattery, ups28AlarmLowBattery,
               ups28AlarmDepletedBattery, ups28AlarmTempBad,
               ups28AlarmInputBad, ups28AlarmOutputOverload,
               ups28AlarmOnBypass, ups28AlarmBypassBad,
               ups28AlarmOutputOffAsRequested,
               ups28AlarmUpsOffAsRequested, ups28AlarmUpsOutputOff,
               ups28AlarmUpsSystemOff, ups28AlarmGeneralFault,
               ups28AlarmDiagnosticTestFailed,
               ups28AlarmCommunicationsLost, ups28AlarmShutdownPending,
               and ups28AlarmTestInProgress."

       OBJECT     ups28TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups28TestNoTestsInitiated."

       OBJECT     ups28OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups28BasicBypassGroup
           DESCRIPTION
               "The ups28BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups28ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups28Compliances 2 }

   ups28FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups28FullIdentGroup, ups28FullBatteryGroup,
                     ups28FullInputGroup, ups28FullOutputGroup,
                     ups28FullAlarmGroup, ups28FullTestGroup,
                     ups28FullControlGroup }

       OBJECT     ups28AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups28AlarmBatteryBad, ups28AlarmOnBattery,
               ups28AlarmLowBattery, ups28AlarmDepletedBattery,
               ups28AlarmTempBad, ups28AlarmInputBad, ups28AlarmOnBypass,
               ups28AlarmBypassBad, ups28AlarmOutputOffAsRequested,
               ups28AlarmUpsOffAsRequested, ups28AlarmUpsOutputOff,
               ups28AlarmUpsSystemOff, ups28AlarmGeneralFault,
               ups28AlarmDiagnosticTestFailed,
               ups28AlarmCommunicationsLost, ups28AlarmShutdownPending,
               and ups28AlarmTestInProgress."

       OBJECT     ups28TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups28TestNoTestsInitiated,
               ups28TestGeneralSystemsTest, and
               ups28TestQuickBatteryTest."

       OBJECT     ups28OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups28FullBypassGroup
           DESCRIPTION
               "The ups28FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups28ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups28Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups28Groups             OBJECT IDENTIFIER ::= { ups28Conformance 2 }

   ups28SubsetGroups       OBJECT IDENTIFIER ::= { ups28Groups 1 }

   ups28SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups28IdentManufacturer, ups28IdentModel,
                 ups28IdentAgentSoftwareVersion, ups28IdentName,
                 ups28IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups28SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups28SubsetGroups 1 }

   ups28SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups28BatteryStatus, ups28SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups28SubsetGroups 2 }

   ups28SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups28InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups28SubsetGroups 3 }

   ups28SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups28OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups28SubsetGroups 4 }


   -- { ups28SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups28SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups28AlarmsPresent, ups28AlarmDescr, ups28AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups28SubsetGroups 6 }

   -- { ups28SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups28SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups28ShutdownType, ups28ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups28SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups28SubsetGroups 8 }

   ups28BasicGroups        OBJECT IDENTIFIER ::= { ups28Groups 2 }

   ups28BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups28IdentManufacturer, ups28IdentModel,
                 ups28IdentUPSSoftwareVersion,
                 ups28IdentAgentSoftwareVersion, ups28IdentName }
       STATUS  current
       DESCRIPTION
               "The ups28BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 1 }

   ups28BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups28BatteryStatus, ups28SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups28BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 2 }

   ups28BasicInputGroup OBJECT-GROUP
       OBJECTS { ups28InputLineBads, ups28InputNumLines,
                 ups28InputFrequency, ups28InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups28BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 3 }

   ups28BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups28OutputSource, ups28OutputFrequency,
                 ups28OutputNumLines, ups28OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups28BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 4 }

   ups28BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups28BypassFrequency, ups28BypassNumLines,
                 ups28BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups28BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 5 }

   ups28BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups28AlarmsPresent, ups28AlarmDescr, ups28AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups28BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 6 }

   ups28BasicTestGroup OBJECT-GROUP
       OBJECTS { ups28TestId, ups28TestSpinLock,
                 ups28TestResultsSummary, ups28TestResultsDetail,
                 ups28TestStartTime, ups28TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups28BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 7 }

   ups28BasicControlGroup OBJECT-GROUP
       OBJECTS { ups28ShutdownType, ups28ShutdownAfterDelay,
                 ups28StartupAfterDelay, ups28RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups28BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups28BasicGroups 8 }

   ups28FullGroups         OBJECT IDENTIFIER ::= { ups28Groups 3 }

   ups28FullIdentGroup OBJECT-GROUP
       OBJECTS { ups28IdentManufacturer, ups28IdentModel,
                 ups28IdentUPSSoftwareVersion,
                 ups28IdentAgentSoftwareVersion, ups28IdentName,
                 ups28IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups28FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups28FullGroups 1 }

   ups28FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups28BatteryStatus, ups28SecondsOnBattery,
                 ups28EstimatedMinutesRemaining,
                 ups28EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups28FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups28FullGroups 2 }

   ups28FullInputGroup OBJECT-GROUP
       OBJECTS { ups28InputLineBads, ups28InputNumLines,
                 ups28InputFrequency, ups28InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups28FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups28FullGroups 3 }

   ups28FullOutputGroup OBJECT-GROUP
       OBJECTS { ups28OutputSource, ups28OutputFrequency,
                 ups28OutputNumLines, ups28OutputVoltage,
                 ups28OutputCurrent, ups28OutputPower,
                 ups28OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups28FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups28FullGroups 4 }

   ups28FullBypassGroup OBJECT-GROUP
       OBJECTS { ups28BypassFrequency, ups28BypassNumLines,
                 ups28BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups28FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups28FullGroups 5 }

   ups28FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups28AlarmsPresent, ups28AlarmDescr, ups28AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups28FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups28FullGroups 6 }

   ups28FullTestGroup OBJECT-GROUP
       OBJECTS { ups28TestId, ups28TestSpinLock,
                 ups28TestResultsSummary, ups28TestResultsDetail,
                 ups28TestStartTime, ups28TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups28FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups28FullGroups 7 }

   ups28FullControlGroup OBJECT-GROUP
       OBJECTS { ups28ShutdownType, ups28ShutdownAfterDelay,
                 ups28StartupAfterDelay, ups28RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups28FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups28FullGroups 8 }


   --*******************************************************************
   --
   -- Module 29 data
   --

   upsModule29           OBJECT IDENTIFIER ::= { upsModular 30 }
   ups29Objects           OBJECT IDENTIFIER ::= { upsModule29 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups29IdentName and
   --      ups29IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups29Ident              OBJECT IDENTIFIER ::= { ups29Objects 1 }

   ups29IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups29Ident 1 }

   ups29IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups29Ident 2 }

   ups29IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups29IdentAgentSoftwareVersion in some implementations."
       ::= { ups29Ident 3 }

   ups29IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups29IdentUPSSoftwareVersion in some implementations."
       ::= { ups29Ident 4 }

   ups29IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups29Ident 5 }

   ups29IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups29Ident 6 }


   --
   -- Battery Group
   --

   ups29Battery            OBJECT IDENTIFIER ::= { ups29Objects 2 }

   ups29BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups29ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups29ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups29Battery 1 }

   ups29SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups29Battery 2 }

   ups29EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups29Battery 3 }

   ups29EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups29Battery 4 }

   ups29BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups29Battery 5 }

   ups29BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups29Battery 6 }

   ups29BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups29Battery 7 }


   --
   -- Input Group
   --

   ups29Input              OBJECT IDENTIFIER ::= { ups29Objects 3 }

   ups29InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups29Input 1 }


   ups29InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups29Input 2 }

   ups29InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups29InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups29InputNumLines."
       ::= { ups29Input 3 }

   ups29InputEntry OBJECT-TYPE
       SYNTAX     Ups29InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups29InputLineIndex }
       ::= { ups29InputTable 1 }

   Ups29InputEntry ::= SEQUENCE {
       ups29InputLineIndex   PositiveInteger,
       ups29InputFrequency   NonNegativeInteger,
       ups29InputVoltage     NonNegativeInteger,
       ups29InputCurrent     NonNegativeInteger,
       ups29InputTruePower   NonNegativeInteger
   }

   ups29InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups29InputEntry 1 }

   ups29InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups29InputEntry 2 }

   ups29InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups29InputEntry 3 }

   ups29InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups29InputEntry 4 }

   ups29InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups29InputEntry 5 }


   --
   -- The Output group.
   --

   ups29Output             OBJECT IDENTIFIER ::= { ups29Objects 4 }

   ups29OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups29Output 1 }

   ups29OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups29Output 2 }

   ups29OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups29Output 3 }

   ups29OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups29OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups29OutputNumLines."
       ::= { ups29Output 4 }

   ups29OutputEntry OBJECT-TYPE
       SYNTAX     Ups29OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups29OutputLineIndex }
       ::= { ups29OutputTable 1 }

   Ups29OutputEntry ::= SEQUENCE {
       ups29OutputLineIndex   PositiveInteger,
       ups29OutputVoltage     NonNegativeInteger,
       ups29OutputCurrent     NonNegativeInteger,
       ups29OutputPower       NonNegativeInteger,
       ups29OutputPercentLoad INTEGER
   }

   ups29OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups29OutputEntry 1 }

   ups29OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups29OutputEntry 2 }

   ups29OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups29OutputEntry 3 }

   ups29OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups29OutputEntry 4 }

   ups29OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups29OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups29Bypass             OBJECT IDENTIFIER ::= { ups29Objects 5 }

   ups29BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups29Bypass 1 }

   ups29BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups29Bypass 2 }

   ups29BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups29BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups29BypassNumLines."
       ::= { ups29Bypass 3 }

   ups29BypassEntry OBJECT-TYPE
       SYNTAX     Ups29BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups29BypassLineIndex }
       ::= { ups29BypassTable 1 }

   Ups29BypassEntry ::= SEQUENCE {
       ups29BypassLineIndex  PositiveInteger,
       ups29BypassVoltage    NonNegativeInteger,
       ups29BypassCurrent    NonNegativeInteger,
       ups29BypassPower      NonNegativeInteger
   }

   ups29BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups29BypassEntry 1 }

   ups29BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups29BypassEntry 2 }

   ups29BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups29BypassEntry 3 }

   ups29BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups29BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups29Alarm              OBJECT IDENTIFIER ::= { ups29Objects 6 }

   ups29AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups29Alarm 1 }

   ups29AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups29AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups29AlarmId equal to 1, and increments the value of
               ups29AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups29AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups29AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups29AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups29AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups29AlarmsPresent."
       ::= { ups29Alarm 2 }

   ups29AlarmEntry OBJECT-TYPE
       SYNTAX     Ups29AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups29AlarmId }
       ::= { ups29AlarmTable 1 }

   Ups29AlarmEntry ::= SEQUENCE {
       ups29AlarmId          PositiveInteger,
       ups29AlarmDescr       AutonomousType,
       ups29AlarmTime        TimeStamp
   }

   ups29AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups29AlarmEntry 1 }

   ups29AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups29AlarmEntry 2 }

   ups29AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups29AlarmTime shall equal
               0."
       ::= { ups29AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups29WellKnownAlarms    OBJECT IDENTIFIER ::= { ups29Alarm 3 }
   ups29AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups29WellKnownAlarms  1 }

   ups29AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups29WellKnownAlarms  2 }

   ups29AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups29ConfigLowBattTime."
       ::= { ups29WellKnownAlarms  3 }


   ups29AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups29WellKnownAlarms  4 }

   ups29AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups29WellKnownAlarms  5 }

   ups29AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups29WellKnownAlarms  6 }

   ups29AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups29WellKnownAlarms  7 }

   ups29AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups29WellKnownAlarms  8 }

   ups29AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups29WellKnownAlarms  9 }

   ups29AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups29WellKnownAlarms 10 }

   ups29AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups29WellKnownAlarms 11 }

   ups29AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups29WellKnownAlarms 12 }

   ups29AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups29WellKnownAlarms 13 }

   ups29AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups29WellKnownAlarms 14 }

   ups29AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups29WellKnownAlarms 15 }

   ups29AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups29WellKnownAlarms 16 }

   ups29AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups29WellKnownAlarms 17 }

   ups29AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups29WellKnownAlarms 18 }

   ups29AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups29WellKnownAlarms 19 }

   ups29AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups29WellKnownAlarms 20 }

   ups29AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups29WellKnownAlarms 21 }

   ups29AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups29ShutdownAfterDelay countdown is underway."
       ::= { ups29WellKnownAlarms 22 }

   ups29AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups29WellKnownAlarms 23 }

   ups29AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups29WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups29Test               OBJECT IDENTIFIER ::= { ups29Objects 7 }

   ups29TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups29TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups29TestResultsSummary. Tests in progress may be
               aborted by setting the ups29TestId variable to
               ups29TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups29TestNoTestsInitiated is returned."
       ::= { ups29Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups29TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups29TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups29TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups29TestResultsSummary */
                     get (upsTestSpinLock, ups29TestResultsSummary,
               ups29TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups29TestResultsSummary,
               ups29TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups29TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups29TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups29Test 2 }

   ups29TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups29TestId to ups29TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups29Test 3 }

   ups29TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups29TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups29Test 4 }

   ups29TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups29TestResultsSummary is noTestsInitiated(6),
               ups29TestStartTime has the value 0."
       ::= { ups29Test 5 }

   ups29TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups29TestResultsSummary is noTestsInitiated(6),
               ups29TestElapsedTime has the value 0."
       ::= { ups29Test 6 }

   --
   -- Well known tests.
   --

   ups29WellKnownTests     OBJECT IDENTIFIER ::= { ups29Test 7 }


   ups29TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups29WellKnownTests  1 }

   ups29TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups29WellKnownTests  2 }

   ups29TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups29WellKnownTests  3 }

   ups29TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups29WellKnownTests  4 }

   ups29TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups29WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups29Control            OBJECT IDENTIFIER ::= { ups29Objects 8 }

   ups29ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups29ShutdownAfterDelay and ups29RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups29Control 1 }

   ups29ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups29ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups29ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups29ShutdownType =
               output and the output is already off.  When read,
               ups29ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups29ShutdownAfterDelay already in effect."
       ::= { ups29Control 2 }

   ups29StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups29StartupAfterDelay
               countdown or ups29RebootWithDuration countdown in
               progress.  When read, ups29StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups29Control 3 }

   ups29RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups29ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups29RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups29Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups29Traps              OBJECT IDENTIFIER ::= { upsModule29 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups29TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups29EstimatedMinutesRemaining, ups29SecondsOnBattery,
                 ups29ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups29Traps 1 }

   ups29TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups29TestId, ups29TestSpinLock,
                 ups29TestResultsSummary, ups29TestResultsDetail,
                 ups29TestStartTime, ups29TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups29Traps 2 }

   ups29TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups29AlarmId, ups29AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups29AlarmOnBattery and
               ups29AlarmTestInProgress."
     ::= { ups29Traps 3 }

   ups29TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups29AlarmId, ups29AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups29AlarmTestInProgress."
     ::= { ups29Traps 4 }


   --
   -- conformance information
   --
   ups29Conformance        OBJECT IDENTIFIER ::= { upsModule29 3 }

   ups29Compliances        OBJECT IDENTIFIER ::= { ups29Conformance 1 }


   --
   -- compliance statements
   --

   ups29SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups29SubsetIdentGroup,
                     ups29SubsetBatteryGroup, ups29SubsetInputGroup,
                     ups29SubsetOutputGroup, ups29SubsetAlarmGroup,
                     ups29SubsetControlGroup }

       OBJECT     ups29BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups29AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups29AlarmOnBattery, ups29AlarmLowBattery,
               ups29AlarmInputBad, ups29AlarmUpsOutputOff,
               ups29AlarmUpsSystemOff, and ups29AlarmTestInProgress."

       OBJECT     ups29OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups29ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups29Compliances 1 }

   ups29BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups29BasicIdentGroup,
                     ups29BasicBatteryGroup, ups29BasicInputGroup,
                     ups29BasicOutputGroup, ups29BasicAlarmGroup,
                     ups29BasicTestGroup, ups29BasicControlGroup }

       OBJECT     ups29AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups29AlarmOnBattery, ups29AlarmLowBattery,
               ups29AlarmDepletedBattery, ups29AlarmTempBad,
               ups29AlarmInputBad, ups29AlarmOutputOverload,
               ups29AlarmOnBypass, ups29AlarmBypassBad,
               ups29AlarmOutputOffAsRequested,
               ups29AlarmUpsOffAsRequested, ups29AlarmUpsOutputOff,
               ups29AlarmUpsSystemOff, ups29AlarmGeneralFault,
               ups29AlarmDiagnosticTestFailed,
               ups29AlarmCommunicationsLost, ups29AlarmShutdownPending,
               and ups29AlarmTestInProgress."

       OBJECT     ups29TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups29TestNoTestsInitiated."

       OBJECT     ups29OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups29BasicBypassGroup
           DESCRIPTION
               "The ups29BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups29ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups29Compliances 2 }

   ups29FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups29FullIdentGroup, ups29FullBatteryGroup,
                     ups29FullInputGroup, ups29FullOutputGroup,
                     ups29FullAlarmGroup, ups29FullTestGroup,
                     ups29FullControlGroup }

       OBJECT     ups29AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups29AlarmBatteryBad, ups29AlarmOnBattery,
               ups29AlarmLowBattery, ups29AlarmDepletedBattery,
               ups29AlarmTempBad, ups29AlarmInputBad, ups29AlarmOnBypass,
               ups29AlarmBypassBad, ups29AlarmOutputOffAsRequested,
               ups29AlarmUpsOffAsRequested, ups29AlarmUpsOutputOff,
               ups29AlarmUpsSystemOff, ups29AlarmGeneralFault,
               ups29AlarmDiagnosticTestFailed,
               ups29AlarmCommunicationsLost, ups29AlarmShutdownPending,
               and ups29AlarmTestInProgress."

       OBJECT     ups29TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups29TestNoTestsInitiated,
               ups29TestGeneralSystemsTest, and
               ups29TestQuickBatteryTest."

       OBJECT     ups29OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups29FullBypassGroup
           DESCRIPTION
               "The ups29FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups29ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups29Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups29Groups             OBJECT IDENTIFIER ::= { ups29Conformance 2 }

   ups29SubsetGroups       OBJECT IDENTIFIER ::= { ups29Groups 1 }

   ups29SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups29IdentManufacturer, ups29IdentModel,
                 ups29IdentAgentSoftwareVersion, ups29IdentName,
                 ups29IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups29SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups29SubsetGroups 1 }

   ups29SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups29BatteryStatus, ups29SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups29SubsetGroups 2 }

   ups29SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups29InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups29SubsetGroups 3 }

   ups29SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups29OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups29SubsetGroups 4 }


   -- { ups29SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups29SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups29AlarmsPresent, ups29AlarmDescr, ups29AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups29SubsetGroups 6 }

   -- { ups29SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups29SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups29ShutdownType, ups29ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups29SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups29SubsetGroups 8 }

   ups29BasicGroups        OBJECT IDENTIFIER ::= { ups29Groups 2 }

   ups29BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups29IdentManufacturer, ups29IdentModel,
                 ups29IdentUPSSoftwareVersion,
                 ups29IdentAgentSoftwareVersion, ups29IdentName }
       STATUS  current
       DESCRIPTION
               "The ups29BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 1 }

   ups29BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups29BatteryStatus, ups29SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups29BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 2 }

   ups29BasicInputGroup OBJECT-GROUP
       OBJECTS { ups29InputLineBads, ups29InputNumLines,
                 ups29InputFrequency, ups29InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups29BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 3 }

   ups29BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups29OutputSource, ups29OutputFrequency,
                 ups29OutputNumLines, ups29OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups29BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 4 }

   ups29BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups29BypassFrequency, ups29BypassNumLines,
                 ups29BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups29BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 5 }

   ups29BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups29AlarmsPresent, ups29AlarmDescr, ups29AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups29BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 6 }

   ups29BasicTestGroup OBJECT-GROUP
       OBJECTS { ups29TestId, ups29TestSpinLock,
                 ups29TestResultsSummary, ups29TestResultsDetail,
                 ups29TestStartTime, ups29TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups29BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 7 }

   ups29BasicControlGroup OBJECT-GROUP
       OBJECTS { ups29ShutdownType, ups29ShutdownAfterDelay,
                 ups29StartupAfterDelay, ups29RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups29BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups29BasicGroups 8 }

   ups29FullGroups         OBJECT IDENTIFIER ::= { ups29Groups 3 }

   ups29FullIdentGroup OBJECT-GROUP
       OBJECTS { ups29IdentManufacturer, ups29IdentModel,
                 ups29IdentUPSSoftwareVersion,
                 ups29IdentAgentSoftwareVersion, ups29IdentName,
                 ups29IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups29FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups29FullGroups 1 }

   ups29FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups29BatteryStatus, ups29SecondsOnBattery,
                 ups29EstimatedMinutesRemaining,
                 ups29EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups29FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups29FullGroups 2 }

   ups29FullInputGroup OBJECT-GROUP
       OBJECTS { ups29InputLineBads, ups29InputNumLines,
                 ups29InputFrequency, ups29InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups29FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups29FullGroups 3 }

   ups29FullOutputGroup OBJECT-GROUP
       OBJECTS { ups29OutputSource, ups29OutputFrequency,
                 ups29OutputNumLines, ups29OutputVoltage,
                 ups29OutputCurrent, ups29OutputPower,
                 ups29OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups29FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups29FullGroups 4 }

   ups29FullBypassGroup OBJECT-GROUP
       OBJECTS { ups29BypassFrequency, ups29BypassNumLines,
                 ups29BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups29FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups29FullGroups 5 }

   ups29FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups29AlarmsPresent, ups29AlarmDescr, ups29AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups29FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups29FullGroups 6 }

   ups29FullTestGroup OBJECT-GROUP
       OBJECTS { ups29TestId, ups29TestSpinLock,
                 ups29TestResultsSummary, ups29TestResultsDetail,
                 ups29TestStartTime, ups29TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups29FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups29FullGroups 7 }

   ups29FullControlGroup OBJECT-GROUP
       OBJECTS { ups29ShutdownType, ups29ShutdownAfterDelay,
                 ups29StartupAfterDelay, ups29RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups29FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups29FullGroups 8 }


   --*******************************************************************
   --
   -- Module 30 data
   --

   upsModule30           OBJECT IDENTIFIER ::= { upsModular 31 }
   ups30Objects           OBJECT IDENTIFIER ::= { upsModule30 1 }

   --
   -- The Device Identification group.
   --      All objects in this group except for ups30IdentName and
   --      ups30IdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   ups30Ident              OBJECT IDENTIFIER ::= { ups30Objects 1 }

   ups30IdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The name of the UPS manufacturer."
       ::= { ups30Ident 1 }

   ups30IdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS Model designation."
       ::= { ups30Ident 2 }

   ups30IdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS firmware/software version(s).  This variable
               may or may not have the same value as
               ups30IdentAgentSoftwareVersion in some implementations."
       ::= { ups30Ident 3 }

   ups30IdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The UPS agent software version.  This variable may or
               may not have the same value as
               ups30IdentUPSSoftwareVersion in some implementations."
       ::= { ups30Ident 4 }

   ups30IdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the UPS.  This object should be
               set by the administrator."
       ::= { ups30Ident 5 }

   ups30IdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A string identifying the devices attached to the
               output(s) of the UPS.  This object should be set by
               the administrator."
       ::= { ups30Ident 6 }


   --
   -- Battery Group
   --

   ups30Battery            OBJECT IDENTIFIER ::= { ups30Objects 2 }

   ups30BatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
           unknown(1),
           batteryNormal(2),
           batteryLow(3),
           batteryDepleted(4)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The indication of the capacity remaining in the UPS
               system's batteries.   A value of batteryNormal
               indicates that the remaining run-time is greater than
               ups30ConfigLowBattTime.  A value of batteryLow indicates
               that the remaining battery run-time is less than or
               equal to ups30ConfigLowBattTime.  A value of
               batteryDepleted indicates that the UPS will be unable
               to sustain the present load when and if the utility
               power is lost (including the possibility that the
               utility power is currently absent and the UPS is
               unable to sustain the output)."
       ::= { ups30Battery 1 }

   ups30SecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If the unit is on battery power, the elapsed time
               since the UPS last switched to battery power, or the
               time since the network management subsystem was last
               restarted, whichever is less.  Zero shall be returned
               if the unit is not on battery power."
       ::= { ups30Battery 2 }

   ups30EstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       UNITS      "minutes"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the time to battery charge depletion
               under the present load conditions if the utility power
               is off and remains off, or if it were to be lost and
               remain off."
       ::= { ups30Battery 3 }

   ups30EstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     Integer32 (0..100)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "An estimate of the battery charge remaining expressed
               as a percent of full charge."
       ::= { ups30Battery 4 }

   ups30BatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Volt DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present battery voltage."
       ::= { ups30Battery 5 }

   ups30BatteryCurrent OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "0.1 Amp DC"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present battery current."
       ::= { ups30Battery 6 }

   ups30BatteryTemperature OBJECT-TYPE
       SYNTAX     Integer32
       UNITS      "degrees Centigrade"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The ambient temperature at or near the UPS Battery
               casing."
       ::= { ups30Battery 7 }


   --
   -- Input Group
   --

   ups30Input              OBJECT IDENTIFIER ::= { ups30Objects 3 }

   ups30InputLineBads OBJECT-TYPE
       SYNTAX     Counter32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A count of the number of times the input entered an
               out-of-tolerance condition as defined by the
               manufacturer.  This count is incremented by one each
               time the input transitions from zero out-of-tolerance
               lines to one or more input lines out-of-tolerance."
       ::= { ups30Input 1 }


   ups30InputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of input lines utilized in this device.
               This variable indicates the number of rows in the
               input table."
       ::= { ups30Input 2 }

   ups30InputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups30InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of input table entries.  The number of entries
               is given by the value of ups30InputNumLines."
       ::= { ups30Input 3 }

   ups30InputEntry OBJECT-TYPE
       SYNTAX     Ups30InputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular input line."
       INDEX { ups30InputLineIndex }
       ::= { ups30InputTable 1 }

   Ups30InputEntry ::= SEQUENCE {
       ups30InputLineIndex   PositiveInteger,
       ups30InputFrequency   NonNegativeInteger,
       ups30InputVoltage     NonNegativeInteger,
       ups30InputCurrent     NonNegativeInteger,
       ups30InputTruePower   NonNegativeInteger
   }

   ups30InputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The input line identifier."
       ::= { ups30InputEntry 1 }

   ups30InputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present input frequency."
       ::= { ups30InputEntry 2 }

   ups30InputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input voltage."
       ::= { ups30InputEntry 3 }

   ups30InputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input current."
       ::= { ups30InputEntry 4 }

   ups30InputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The magnitude of the present input true power."
       ::= { ups30InputEntry 5 }


   --
   -- The Output group.
   --

   ups30Output             OBJECT IDENTIFIER ::= { ups30Objects 4 }

   ups30OutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
           other(1),
           none(2),
           normal(3),
           bypass(4),
           battery(5),
           booster(6),
           reducer(7)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present source of output power.  The enumeration
               none(2) indicates that there is no source of output
               power (and therefore no output power), for example,
               the system has opened the output breaker."
       ::= { ups30Output 1 }

   ups30OutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output frequency."
       ::= { ups30Output 2 }

   ups30OutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of output lines utilized in this device.
               This variable indicates the number of rows in the
               output table."
       ::= { ups30Output 3 }

   ups30OutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups30OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of output table entries.  The number of
               entries is given by the value of ups30OutputNumLines."
       ::= { ups30Output 4 }

   ups30OutputEntry OBJECT-TYPE
       SYNTAX     Ups30OutputEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular output line."
       INDEX { ups30OutputLineIndex }
       ::= { ups30OutputTable 1 }

   Ups30OutputEntry ::= SEQUENCE {
       ups30OutputLineIndex   PositiveInteger,
       ups30OutputVoltage     NonNegativeInteger,
       ups30OutputCurrent     NonNegativeInteger,
       ups30OutputPower       NonNegativeInteger,
       ups30OutputPercentLoad INTEGER
   }

   ups30OutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The output line identifier."
       ::= { ups30OutputEntry 1 }

   ups30OutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output voltage."
       ::= { ups30OutputEntry 2 }

   ups30OutputCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output current."
       ::= { ups30OutputEntry 3 }

   ups30OutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present output true power."
       ::= { ups30OutputEntry 4 }

   ups30OutputPercentLoad OBJECT-TYPE
       SYNTAX     Integer32 (0..200)
       UNITS      "percent"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The percentage of the UPS power capacity presently
               being used on this output line, i.e., the greater of
               the percent load of true power capacity and the
               percent load of VA."
       ::= { ups30OutputEntry 5 }

   --
   -- The Bypass group.
   --

   ups30Bypass             OBJECT IDENTIFIER ::= { ups30Objects 5 }

   ups30BypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 Hertz"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass frequency."
       ::= { ups30Bypass 1 }

   ups30BypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The number of bypass lines utilized in this device.
               This entry indicates the number of rows in the bypass
               table."
       ::= { ups30Bypass 2 }

   ups30BypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups30BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of bypass table entries.  The number of
               entries is given by the value of ups30BypassNumLines."
       ::= { ups30Bypass 3 }

   ups30BypassEntry OBJECT-TYPE
       SYNTAX     Ups30BypassEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular bypass input."
       INDEX { ups30BypassLineIndex }
       ::= { ups30BypassTable 1 }

   Ups30BypassEntry ::= SEQUENCE {
       ups30BypassLineIndex  PositiveInteger,
       ups30BypassVoltage    NonNegativeInteger,
       ups30BypassCurrent    NonNegativeInteger,
       ups30BypassPower      NonNegativeInteger
   }

   ups30BypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The bypass line identifier."
       ::= { ups30BypassEntry 1 }

   ups30BypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "RMS Volts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass voltage."
       ::= { ups30BypassEntry 2 }

   ups30BypassCurrent OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "0.1 RMS Amp"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present bypass current."
       ::= { ups30BypassEntry 3 }

   ups30BypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       UNITS      "Watts"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present true power conveyed by the bypass."
       ::= { ups30BypassEntry 4 }


   --
   -- The Alarm group.
   --

   ups30Alarm              OBJECT IDENTIFIER ::= { ups30Objects 6 }

   ups30AlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge32
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The present number of active alarm conditions."
       ::= { ups30Alarm 1 }

   ups30AlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF Ups30AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A list of alarm table entries.  The table contains
               zero, one, or many rows at any moment, depending upon
               the number of alarm conditions in effect.  The table
               is initially empty at agent startup.  The agent
               creates a row in the table each time a condition is
               detected and deletes that row when that condition no
               longer pertains.  The agent creates the first row with
               ups30AlarmId equal to 1, and increments the value of
               ups30AlarmId each time a new row is created, wrapping to
               the first free value greater than or equal to 1 when
               the maximum value of ups30AlarmId would otherwise be
               exceeded.  Consequently, after multiple operations,
               the table may become sparse, e.g., containing entries
               for rows 95, 100, 101, and 203 and the entries should
               not be assumed to be in chronological order because
               ups30AlarmId might have wrapped.

               Alarms are named by an AutonomousType (OBJECT
               IDENTIFIER), ups30AlarmDescr, to allow a single table to
               reflect well known alarms plus alarms defined by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.  No
               two rows will have the same value of ups30AlarmDescr,
               since alarms define conditions.  In order to meet this
               requirement, care should be taken in the definition of
               alarm conditions to insure that a system cannot enter
               the same condition multiple times simultaneously.

               The number of rows in the table at any given time is
               reflected by the value of ups30AlarmsPresent."
       ::= { ups30Alarm 2 }

   ups30AlarmEntry OBJECT-TYPE
       SYNTAX     Ups30AlarmEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry containing information applicable to a
               particular alarm."
       INDEX { ups30AlarmId }
       ::= { ups30AlarmTable 1 }

   Ups30AlarmEntry ::= SEQUENCE {
       ups30AlarmId          PositiveInteger,
       ups30AlarmDescr       AutonomousType,
       ups30AlarmTime        TimeStamp
   }

   ups30AlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "A unique identifier for an alarm condition.  This
               value must remain constant."
       ::= { ups30AlarmEntry 1 }

   ups30AlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A reference to an alarm description object.  The
               object referenced should not be accessible, but rather
               be used to provide a unique description of the alarm
               condition."
       ::= { ups30AlarmEntry 2 }

   ups30AlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime when the alarm condition was
               detected.  If the alarm condition was detected at the
               time of agent startup and presumably existed before
               agent startup, the value of ups30AlarmTime shall equal
               0."
       ::= { ups30AlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   ups30WellKnownAlarms    OBJECT IDENTIFIER ::= { ups30Alarm 3 }
   ups30AlarmBatteryBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "One or more batteries have been determined to require
               replacement."
       ::= { ups30WellKnownAlarms  1 }

   ups30AlarmOnBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS is drawing power from the batteries."
       ::= { ups30WellKnownAlarms  2 }

   ups30AlarmLowBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The remaining battery run-time is less than or equal
               to ups30ConfigLowBattTime."
       ::= { ups30WellKnownAlarms  3 }


   ups30AlarmDepletedBattery OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will be unable to sustain the present load
               when and if the utility power is lost."
       ::= { ups30WellKnownAlarms  4 }

   ups30AlarmTempBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A temperature is out of tolerance."
       ::= { ups30WellKnownAlarms  5 }

   ups30AlarmInputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An input condition is out of tolerance."
       ::= { ups30WellKnownAlarms  6 }

   ups30AlarmOutputBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An output condition (other than OutputOverload) is
               out of tolerance."
       ::= { ups30WellKnownAlarms  7 }

   ups30AlarmOutputOverload OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output load exceeds the UPS output capacity."
       ::= { ups30WellKnownAlarms  8 }

   ups30AlarmOnBypass OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is presently engaged on the UPS."
       ::= { ups30WellKnownAlarms  9 }

   ups30AlarmBypassBad OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The Bypass is out of tolerance."
       ::= { ups30WellKnownAlarms 10 }

   ups30AlarmOutputOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS has shutdown as requested, i.e., the output
               is off."
       ::= { ups30WellKnownAlarms 11 }

   ups30AlarmUpsOffAsRequested OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The entire UPS has shutdown as commanded."
       ::= { ups30WellKnownAlarms 12 }

   ups30AlarmChargerFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "An uncorrected problem has been detected within the
               UPS charger subsystem."
       ::= { ups30WellKnownAlarms 13 }

   ups30AlarmUpsOutputOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The output of the UPS is in the off state."
       ::= { ups30WellKnownAlarms 14 }

   ups30AlarmUpsSystemOff OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS system is in the off state."
       ::= { ups30WellKnownAlarms 15 }

   ups30AlarmFanFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fans in the UPS has been
               detected."
       ::= { ups30WellKnownAlarms 16 }

   ups30AlarmFuseFailure OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The failure of one or more fuses has been detected."
       ::= { ups30WellKnownAlarms 17 }

   ups30AlarmGeneralFault OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A general fault in the UPS has been detected."
       ::= { ups30WellKnownAlarms 18 }

   ups30AlarmDiagnosticTestFailed OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The result of the last diagnostic test indicates a
               failure."
       ::= { ups30WellKnownAlarms 19 }

   ups30AlarmCommunicationsLost OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A problem has been encountered in the communications
               between the agent and the UPS."
       ::= { ups30WellKnownAlarms 20 }

   ups30AlarmAwaitingPower OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS output is off and the UPS is awaiting the
               return of input power."
       ::= { ups30WellKnownAlarms 21 }

   ups30AlarmShutdownPending OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A ups30ShutdownAfterDelay countdown is underway."
       ::= { ups30WellKnownAlarms 22 }

   ups30AlarmShutdownImminent OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The UPS will turn off power to the load in less than
               5 seconds; this may be either a timed shutdown or a
               low battery shutdown."
       ::= { ups30WellKnownAlarms 23 }

   ups30AlarmTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test is in progress, as initiated and indicated by
               the Test Group.  Tests initiated via other
               implementation-specific mechanisms can indicate the
               presence of the testing in the alarm table, if
               desired, via a OBJECT-IDENTITY macro in the MIB
               document specific to that implementation and are
               outside the scope of this OBJECT-IDENTITY."
       ::= { ups30WellKnownAlarms 24 }


   --
   -- The Test Group
   --

   ups30Test               OBJECT IDENTIFIER ::= { ups30Objects 7 }

   ups30TestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The test is named by an OBJECT IDENTIFIER which
               allows a standard mechanism for the initiation of
               tests, including the well known tests identified in
               this document as well as those introduced by a
               particular implementation, i.e., as documented in the
               private enterprise MIB definition for the device.

               Setting this variable initiates the named test. Sets
               to this variable require the presence of
               ups30TestSpinLock in the same SNMP message.

               The set request will be rejected with an appropriate
               error message if the requested test cannot be
               performed, including attempts to start a test when
               another test is already in progress.  The status of
               the current or last test is maintained in
               ups30TestResultsSummary. Tests in progress may be
               aborted by setting the ups30TestId variable to
               ups30TestAbortTestInProgress.

               Read operations return the value of the name of the
               test in progress if a test is in progress or the name
               of the last test performed if no test is in progress,
               unless no test has been run, in which case the well
               known value ups30TestNoTestsInitiated is returned."
       ::= { ups30Test 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   ups30TestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "A spin lock on the test subsystem.  The spinlock is
               used as follows.

               Before starting a test, a manager-station should make
               sure that a test is not in progress as follows:

                   try_again:
                     get (upsTestSpinLock)
                     while (upsTestResultsSummary == inProgress) {
                       /* loop while a test is running for another
               manager */
                       short delay
                       get (upsTestSpinLock)
                     }
                     lock_value = ups30TestSpinLock
                     /* no test in progress, start the test */
                     set (upsTestSpinLock = lock_value, ups30TestId =
               requested_test)
                     if (error_index == 1) { /* (upsTestSpinLock
               failed) */
                       /* if problem is not access control, then
                           some other manager slipped in ahead of us
               */
                       goto try_again
                     }
                     if (error_index == 2) { /* (upsTestId) */
                       /* cannot perform the test */
                       give up
                     }
                     /* test started ok */
                     /* wait for test completion by polling

               ups30TestResultsSummary */
                     get (upsTestSpinLock, ups30TestResultsSummary,
               ups30TestResultsDetail)
                     while (upsTestResultsSummary == inProgress) {
                       short delay
                       get (upsTestSpinLock, ups30TestResultsSummary,
               ups30TestResultsDetail)
                     }
                     /* when test completes, retrieve any additional
               test results */
                     /* if ups30TestSpinLock == lock_value + 1, then
               these are our test */
                     /* results (as opposed to another manager's */
                     The initial value of ups30TestSpinLock at agent
               initialization shall
                     be 1."
       ::= { ups30Test 2 }

   ups30TestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
           donePass(1),
           doneWarning(2),
           doneError(3),
           aborted(4),
           inProgress(5),
           noTestsInitiated(6)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The results of the current or last UPS diagnostics
               test performed.  The values for donePass(1),
               doneWarning(2), and doneError(3) indicate that the
               test completed either successfully, with a warning, or
               with an error, respectively.  The value aborted(4) is
               returned for tests which are aborted by setting the
               value of ups30TestId to ups30TestAbortTestInProgress.
               Tests which have not yet concluded are indicated by
               inProgress(5).  The value noTestsInitiated(6)
               indicates that no previous test results are available,
               such as is the case when no tests have been run since
               the last reinitialization of the network management
               subsystem and the system has no provision for non-
               volatile storage of test results."
       ::= { ups30Test 3 }

   ups30TestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Additional information about ups30TestResultsSummary.
               If no additional information available, a zero length
               string is returned."
       ::= { ups30Test 4 }

   ups30TestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The value of sysUpTime at the time the test in
               progress was initiated, or, if no test is in progress,
               the time the previous test was initiated.  If the
               value of ups30TestResultsSummary is noTestsInitiated(6),
               ups30TestStartTime has the value 0."
       ::= { ups30Test 5 }

   ups30TestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The amount of time, in TimeTicks, since the test in
               progress was initiated, or, if no test is in progress,
               the previous test took to complete.  If the value of
               ups30TestResultsSummary is noTestsInitiated(6),
               ups30TestElapsedTime has the value 0."
       ::= { ups30Test 6 }

   --
   -- Well known tests.
   --

   ups30WellKnownTests     OBJECT IDENTIFIER ::= { ups30Test 7 }


   ups30TestNoTestsInitiated OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "No tests have been initiated and no test is in
               progress."
       ::= { ups30WellKnownTests  1 }

   ups30TestAbortTestInProgress OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The test in progress is to be aborted / the test in
               progress was aborted."
       ::= { ups30WellKnownTests  2 }

   ups30TestGeneralSystemsTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The manufacturer's standard test of UPS device
               systems."
       ::= { ups30WellKnownTests  3 }

   ups30TestQuickBatteryTest OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "A test that is sufficient to determine if the battery
               needs replacement."
       ::= { ups30WellKnownTests  4 }

   ups30TestDeepBatteryCalibration OBJECT-IDENTITY
       STATUS     current
       DESCRIPTION
               "The system is placed on battery to a discharge level,
               set by the manufacturer, sufficient to determine
               battery replacement and battery run-time with a high
               degree of confidence.  WARNING:  this test will leave
               the battery in a low charge state and will require
               time for recharging to a level sufficient to provide
               normal battery duration for the protected load."
       ::= { ups30WellKnownTests  5 }


   --
   -- The Control group.
   --

   ups30Control            OBJECT IDENTIFIER ::= { ups30Objects 8 }

   ups30ShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
           output(1),
           system(2)
       }
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "This object determines the nature of the action to be
               taken at the time when the countdown of the
               ups30ShutdownAfterDelay and ups30RebootWithDuration
               objects reaches zero.

               Setting this object to output(1) indicates that
               shutdown requests should cause only the output of the
               UPS to turn off.  Setting this object to system(2)
               indicates that shutdown requests will cause the entire
               UPS system to turn off."
       ::= { ups30Control 1 }

   ups30ShutdownAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will shutdown (i.e., turn off)
               either the UPS output or the UPS system (as determined
               by the value of ups30ShutdownType at the time of
               shutdown) after the indicated number of seconds, or
               less if the UPS batteries become depleted. Setting
               this object to 0 will cause the shutdown to occur
               immediately.  Setting this object to -1 will abort the
               countdown.  If the system is already in the desired
               state at the time the countdown reaches 0, then
               nothing will happen.  That is, there is no additional
               action at that time if ups30ShutdownType = system and
               the system is already off.  Similarly, there is no
               additional action at that time if ups30ShutdownType =
               output and the output is already off.  When read,
               ups30ShutdownAfterDelay will return the number of
               seconds remaining until shutdown, or -1 if no shutdown
               countdown is in effect.  On some systems, if the agent
               is restarted while a shutdown countdown is in effect,
               the countdown may be aborted.  Sets to this object
               override any ups30ShutdownAfterDelay already in effect."
       ::= { ups30Control 2 }

   ups30StartupAfterDelay OBJECT-TYPE
       SYNTAX     Integer32 (-1..2147483647)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will start the output after the
               indicated number of seconds, including starting the
               UPS, if necessary.  Setting this object to 0 will
               cause the startup to occur immediately.  Setting this
               object to -1 will abort the countdown.  If the output
               is already on at the time the countdown reaches 0,
               then nothing will happen.  Sets to this object
               override the effect of any ups30StartupAfterDelay
               countdown or ups30RebootWithDuration countdown in
               progress.  When read, ups30StartupAfterDelay will return
               the number of seconds until startup, or -1 if no
               startup countdown is in effect.  If the countdown
               expires during a utility failure, the startup shall
               not occur until the utility power is restored.  On
               some systems, if the agent is restarted while a
               startup countdown is in effect, the countdown is
               aborted."
       ::= { ups30Control 3 }

   ups30RebootWithDuration OBJECT-TYPE
       SYNTAX     Integer32 (-1..300)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Setting this object will immediately shutdown (i.e.,
               turn off) either the UPS output or the UPS system (as
               determined by the value of ups30ShutdownType at the time
               of shutdown) for a period equal to the indicated
               number of seconds, after which time the output will be
               started, including starting the UPS, if necessary.  If
               the number of seconds required to perform the request
               is greater than the requested duration, then the
               requested shutdown and startup cycle shall be
               performed in the minimum time possible, but in no case
               shall this require more than the requested duration
               plus 60 seconds.  When read, ups30RebootWithDuration
               shall return the number of seconds remaining in the
               countdown, or -1 if no countdown is in progress.  If
               the startup should occur during a utility failure, the
               startup shall not occur until the utility power is
               restored."
       ::= { ups30Control 4 }


   --
   -- notifications, i.e., traps
   --
   ups30Traps              OBJECT IDENTIFIER ::= { upsModule30 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   ups30TrapOnBattery NOTIFICATION-TYPE
       OBJECTS { ups30EstimatedMinutesRemaining, ups30SecondsOnBattery,
                 ups30ConfigLowBattTime }
       STATUS  current
       DESCRIPTION
               "The UPS is operating on battery power.  This trap is
               persistent and is resent at one minute intervals until
               the UPS either turns off or is no longer running on
               battery."
     ::= { ups30Traps 1 }

   ups30TrapTestCompleted NOTIFICATION-TYPE
       OBJECTS { ups30TestId, ups30TestSpinLock,
                 ups30TestResultsSummary, ups30TestResultsDetail,
                 ups30TestStartTime, ups30TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "This trap is sent upon completion of a UPS diagnostic
               test."
     ::= { ups30Traps 2 }

   ups30TrapAlarmEntryAdded NOTIFICATION-TYPE
       OBJECTS { ups30AlarmId, ups30AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is inserted into
               to the alarm table.  It is sent on the insertion of
               all alarms except for ups30AlarmOnBattery and
               ups30AlarmTestInProgress."
     ::= { ups30Traps 3 }

   ups30TrapAlarmEntryRemoved NOTIFICATION-TYPE
       OBJECTS { ups30AlarmId, ups30AlarmDescr }
       STATUS  current
       DESCRIPTION
               "This trap is sent each time an alarm is removed from
               the alarm table.  It is sent on the removal of all
               alarms except for ups30AlarmTestInProgress."
     ::= { ups30Traps 4 }


   --
   -- conformance information
   --
   ups30Conformance        OBJECT IDENTIFIER ::= { upsModule30 3 }

   ups30Compliances        OBJECT IDENTIFIER ::= { ups30Conformance 1 }


   --
   -- compliance statements
   --

   ups30SubsetCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that only support
               the two-contact communication protocol."
       MODULE -- this module
           MANDATORY-GROUPS  { ups30SubsetIdentGroup,
                     ups30SubsetBatteryGroup, ups30SubsetInputGroup,
                     ups30SubsetOutputGroup, ups30SubsetAlarmGroup,
                     ups30SubsetControlGroup }

       OBJECT     ups30BatteryStatus
       SYNTAX     INTEGER {
           batteryNormal(2),
           batteryLow(3)
       }
       DESCRIPTION
               "Support of the values unknown(1) and
               batteryDepleted(4) is not required."

       OBJECT     ups30AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups30AlarmOnBattery, ups30AlarmLowBattery,
               ups30AlarmInputBad, ups30AlarmUpsOutputOff,
               ups30AlarmUpsSystemOff, and ups30AlarmTestInProgress."

       OBJECT     ups30OutputSource
       SYNTAX     INTEGER {
           normal(3),
           battery(5)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

       OBJECT     ups30ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups30Compliances 1 }

   ups30BasicCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION

               "The compliance statement for UPSs that support
               full-featured functions, such as control."
       MODULE -- this module
           MANDATORY-GROUPS { ups30BasicIdentGroup,
                     ups30BasicBatteryGroup, ups30BasicInputGroup,
                     ups30BasicOutputGroup, ups30BasicAlarmGroup,
                     ups30BasicTestGroup, ups30BasicControlGroup }

       OBJECT     ups30AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups30AlarmOnBattery, ups30AlarmLowBattery,
               ups30AlarmDepletedBattery, ups30AlarmTempBad,
               ups30AlarmInputBad, ups30AlarmOutputOverload,
               ups30AlarmOnBypass, ups30AlarmBypassBad,
               ups30AlarmOutputOffAsRequested,
               ups30AlarmUpsOffAsRequested, ups30AlarmUpsOutputOff,
               ups30AlarmUpsSystemOff, ups30AlarmGeneralFault,
               ups30AlarmDiagnosticTestFailed,
               ups30AlarmCommunicationsLost, ups30AlarmShutdownPending,
               and ups30AlarmTestInProgress."

       OBJECT     ups30TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  If no tests are supported, then the only
               well known test type which must be supported is
               ups30TestNoTestsInitiated."

       OBJECT     ups30OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups30BasicBypassGroup
           DESCRIPTION
               "The ups30BasicBypassGroup is only required for UPSs
               that have a Bypass present."
       OBJECT     ups30ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups30Compliances 2 }

   ups30FullCompliance MODULE-COMPLIANCE
       STATUS     current
       DESCRIPTION
               "The compliance statement for UPSs that support
               advanced full-featured functions."
       MODULE -- this module
           MANDATORY-GROUPS { ups30FullIdentGroup, ups30FullBatteryGroup,
                     ups30FullInputGroup, ups30FullOutputGroup,
                     ups30FullAlarmGroup, ups30FullTestGroup,
                     ups30FullControlGroup }

       OBJECT     ups30AlarmDescr
       DESCRIPTION
               "Support of all `well known' alarm types is not
               required.  The well known alarm types which must be
               supported are: ups30AlarmBatteryBad, ups30AlarmOnBattery,
               ups30AlarmLowBattery, ups30AlarmDepletedBattery,
               ups30AlarmTempBad, ups30AlarmInputBad, ups30AlarmOnBypass,
               ups30AlarmBypassBad, ups30AlarmOutputOffAsRequested,
               ups30AlarmUpsOffAsRequested, ups30AlarmUpsOutputOff,
               ups30AlarmUpsSystemOff, ups30AlarmGeneralFault,
               ups30AlarmDiagnosticTestFailed,
               ups30AlarmCommunicationsLost, ups30AlarmShutdownPending,
               and ups30AlarmTestInProgress."

       OBJECT     ups30TestId
       DESCRIPTION
               "Support of all `well known' test types is not
               required.  The well known test types which must be
               supported are: ups30TestNoTestsInitiated,
               ups30TestGeneralSystemsTest, and
               ups30TestQuickBatteryTest."

       OBJECT     ups30OutputSource
       SYNTAX     INTEGER {
           normal(2),
           battery(4)
       }
       DESCRIPTION
               "Support of the values other(1), none(2), bypass(4),
               booster(6) and reducer(7) is not required."

           GROUP ups30FullBypassGroup
           DESCRIPTION
               "The ups30FullBypassGroup is only required for UPSs that
               have a Bypass present."

       OBJECT     ups30ShutdownType
       MIN-ACCESS read-only
       DESCRIPTION
               "Read-write access is not required, i.e., compliant
               systems need not support more than one shutdown type."

       ::= { ups30Compliances 3 }


   --
   -- units of conformance
   --

   -- summary at a glance:

   --                                      subset  basic   adv
   --upsIdentManufacturer                  x       x       x
   --upsIdentModel                         x       x       x
   --upsIdentUPSSoftwareVersion                    x       x
   --upsIdentAgentSoftwareVersion          x       x       x
   --upsIdentName                          x       x       x
   --upsIdentAttachedDevices               x               x
   --
   --upsBatteryStatus                      x       x       x  notes
   --upsSecondsOnBattery                   x       x       x
   --upsEstimatedMinutesRemaining                          x
   --upsEstimatedChargeRemaining                           x
   --upsBatteryVoltage
   --upsBatteryCurrent
   --upsBatteryTemperature
   --
   --upsInputLineBads                      x       x       x
   --upsInputNumLines                              x       x
   --upsInputFrequency                             x       x
   --upsInputVoltage                               x       x
   --upsInputCurrent
   --
   --upsOutputSource                       x       x       x  notes
   --upsOutputFrequency                            x       x
   --upsOutputNumLines                             x       x
   --upsOutputVoltage                              x       x
   --upsOutputCurrent                                      x
   --upsOutputPower                                        x
   --upsOutputPercentLoad                                  x
   --
   --
   --upsBypassFrequency                            x       x  notes
   --upsBypassNumLines                             x       x
   --upsBypassVoltage                              x       x
   --upsBypassCurrent
   --upsBypassPower
   --
   --
   --upsAlarmsPresent                      x       x       x
   --upsAlarmDescr                         x       x       x  notes
   --upsAlarmTime                          x       x       x
   --
   --upsTestId                                     x       x  notes
   --upsTestSpinLock                               x       x
   --upsTestResultsSummary                         x       x
   --upsTestResultsDetail                          x       x
   --upsTestStartTime                              x       x
   --upsTestElapsedTime                            x       x
   --
   --upsShutdownType                       x       x       x  notes
   --upsShutdownAfterDelay                 x       x       x
   --upsStartupAfterDelay                          x       x
   --upsRebootWithDuration                         x       x


   -- units of conformance
   ups30Groups             OBJECT IDENTIFIER ::= { ups30Conformance 2 }

   ups30SubsetGroups       OBJECT IDENTIFIER ::= { ups30Groups 1 }

   ups30SubsetIdentGroup OBJECT-GROUP
       OBJECTS { ups30IdentManufacturer, ups30IdentModel,
                 ups30IdentAgentSoftwareVersion, ups30IdentName,
                 ups30IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetIdentGroup defines objects which are
               common across all UPSs which meet subset compliance.
               Most devices which conform to the ups30SubsetIdentGroup
               will provide access to these objects via a proxy
               agent.  If the proxy agent is compatible with multiple
               UPS types, configuration of the proxy agent will
               require specifying some of these values, either
               individually, or as a group (perhaps through a table
               lookup mechanism based on the UPS model number)."
       ::= { ups30SubsetGroups 1 }

   ups30SubsetBatteryGroup OBJECT-GROUP
       OBJECTS { ups30BatteryStatus, ups30SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetBatteryGroup defines the objects that
               are common to battery groups of two-contact UPSs."
       ::= { ups30SubsetGroups 2 }

   ups30SubsetInputGroup OBJECT-GROUP
       OBJECTS { ups30InputLineBads }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetInputGroup defines the objects that are
               common to the Input groups of two-contact UPSs."
       ::= { ups30SubsetGroups 3 }

   ups30SubsetOutputGroup OBJECT-GROUP
       OBJECTS { ups30OutputSource }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetOutputGroup defines the objects that are
               common to the Output groups of two-contact UPSs."
       ::= { ups30SubsetGroups 4 }


   -- { ups30SubsetGroups 5 } is reserved for
   -- future use (upsSubsetBypassGroup)

   ups30SubsetAlarmGroup OBJECT-GROUP
       OBJECTS { ups30AlarmsPresent, ups30AlarmDescr, ups30AlarmTime }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetAlarmGroup defines the objects that are
               common to the Alarm groups of two-contact UPSs."
       ::= { ups30SubsetGroups 6 }

   -- { ups30SubsetGroups 7 } is reserved for
   -- future use (upsSubsetTestGroup)

   ups30SubsetControlGroup OBJECT-GROUP
       OBJECTS { ups30ShutdownType, ups30ShutdownAfterDelay }
       STATUS  current
       DESCRIPTION
               "The ups30SubsetControlGroup defines the objects that
               are common to the Control groups of two-contact UPSs."
       ::= { ups30SubsetGroups 8 }

   ups30BasicGroups        OBJECT IDENTIFIER ::= { ups30Groups 2 }

   ups30BasicIdentGroup OBJECT-GROUP
       OBJECTS { ups30IdentManufacturer, ups30IdentModel,
                 ups30IdentUPSSoftwareVersion,
                 ups30IdentAgentSoftwareVersion, ups30IdentName }
       STATUS  current
       DESCRIPTION
               "The ups30BasicIdentGroup defines objects which are
               common to the Ident group of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 1 }

   ups30BasicBatteryGroup OBJECT-GROUP
       OBJECTS { ups30BatteryStatus, ups30SecondsOnBattery }
       STATUS  current
       DESCRIPTION
               "The ups30BasicBatteryGroup defines the objects that are
               common to the battery groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 2 }

   ups30BasicInputGroup OBJECT-GROUP
       OBJECTS { ups30InputLineBads, ups30InputNumLines,
                 ups30InputFrequency, ups30InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups30BasicInputGroup defines the objects that are
               common to the Input groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 3 }

   ups30BasicOutputGroup OBJECT-GROUP
       OBJECTS { ups30OutputSource, ups30OutputFrequency,
                 ups30OutputNumLines, ups30OutputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups30BasicOutputGroup defines the objects that are
               common to the Output groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 4 }

   ups30BasicBypassGroup OBJECT-GROUP
       OBJECTS { ups30BypassFrequency, ups30BypassNumLines,
                 ups30BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups30BasicBypassGroup defines the objects that are
               common to the Bypass groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 5 }

   ups30BasicAlarmGroup OBJECT-GROUP
       OBJECTS { ups30AlarmsPresent, ups30AlarmDescr, ups30AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups30BasicAlarmGroup defines the objects that are
               common to the Alarm  groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 6 }

   ups30BasicTestGroup OBJECT-GROUP
       OBJECTS { ups30TestId, ups30TestSpinLock,
                 ups30TestResultsSummary, ups30TestResultsDetail,
                 ups30TestStartTime, ups30TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups30BasicTestGroup defines the objects that are
               common to the Test groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 7 }

   ups30BasicControlGroup OBJECT-GROUP
       OBJECTS { ups30ShutdownType, ups30ShutdownAfterDelay,
                 ups30StartupAfterDelay, ups30RebootWithDuration }
       STATUS  current
       DESCRIPTION
               "The ups30BasicControlGroup defines the objects that are
               common to the Control groups of compliant UPSs which
               support basic functions."
       ::= { ups30BasicGroups 8 }

   ups30FullGroups         OBJECT IDENTIFIER ::= { ups30Groups 3 }

   ups30FullIdentGroup OBJECT-GROUP
       OBJECTS { ups30IdentManufacturer, ups30IdentModel,
                 ups30IdentUPSSoftwareVersion,
                 ups30IdentAgentSoftwareVersion, ups30IdentName,
                 ups30IdentAttachedDevices }
       STATUS  current
       DESCRIPTION
               "The ups30FullIdentGroup defines objects which are
               common to the Ident group of fully compliant UPSs."
       ::= { ups30FullGroups 1 }

   ups30FullBatteryGroup OBJECT-GROUP
       OBJECTS { ups30BatteryStatus, ups30SecondsOnBattery,
                 ups30EstimatedMinutesRemaining,
                 ups30EstimatedChargeRemaining }
       STATUS  current
       DESCRIPTION
               "The ups30FullBatteryGroup defines the objects that are
               common to the battery groups of fully compliant UPSs."
       ::= { ups30FullGroups 2 }

   ups30FullInputGroup OBJECT-GROUP
       OBJECTS { ups30InputLineBads, ups30InputNumLines,
                 ups30InputFrequency, ups30InputVoltage }
       STATUS  current
       DESCRIPTION
               "The ups30FullInputGroup defines the objects that are
               common to the Input groups of fully compliant UPSs."
       ::= { ups30FullGroups 3 }

   ups30FullOutputGroup OBJECT-GROUP
       OBJECTS { ups30OutputSource, ups30OutputFrequency,
                 ups30OutputNumLines, ups30OutputVoltage,
                 ups30OutputCurrent, ups30OutputPower,
                 ups30OutputPercentLoad }
       STATUS  current
       DESCRIPTION
               "The ups30FullOutputGroup defines the objects that are
               common to the Output groups of fully compliant UPSs."
       ::= { ups30FullGroups 4 }

   ups30FullBypassGroup OBJECT-GROUP
       OBJECTS { ups30BypassFrequency, ups30BypassNumLines,
                 ups30BypassVoltage }
       STATUS  current
       DESCRIPTION
               "The ups30FullBypassGroup defines the objects that are
               common to the Bypass groups of fully compliant UPSs."
       ::= { ups30FullGroups 5 }

   ups30FullAlarmGroup OBJECT-GROUP
       OBJECTS { ups30AlarmsPresent, ups30AlarmDescr, ups30AlarmTime }
       STATUS  current
       DESCRIPTION

               "The ups30FullAlarmGroup defines the objects that are
               common to the Alarm  groups of fully compliant UPSs."
       ::= { ups30FullGroups 6 }

   ups30FullTestGroup OBJECT-GROUP
       OBJECTS { ups30TestId, ups30TestSpinLock,
                 ups30TestResultsSummary, ups30TestResultsDetail,
                 ups30TestStartTime, ups30TestElapsedTime }
       STATUS  current
       DESCRIPTION
               "The ups30FullTestGroup defines the objects that are
               common to the Test groups of fully compliant UPSs."
       ::= { ups30FullGroups 7 }

   ups30FullControlGroup OBJECT-GROUP
       OBJECTS { ups30ShutdownType, ups30ShutdownAfterDelay,
                 ups30StartupAfterDelay, ups30RebootWithDuration }
       STATUS  current
       DESCRIPTION
   "The ups30FullControlGroup defines the objects that are
   common to the Control groups of fully compliant UPSs."
       ::= { ups30FullGroups 8 }

	END
