
BACHMANN-BNPRO-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, NOTIFICATION-TYPE, OBJECT-IDENTITY, OBJECT-TYPE,
    Integer32, Unsigned32, Counter64, TimeTicks
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE, NOTIFICATION-GROUP, OBJECT-GROUP
        FROM SNMPv2-CONF
    DateAndTime, DisplayString, TruthValue, TEXTUAL-CONVENTION
        FROM SNMPv2-TC
    bachmann
        FROM BACHMANN-SMI-MIB;

bnPro MODULE-IDENTITY
    LAST-UPDATED    "202606170000Z"
    ORGANIZATION    "Bachmann GmbH"
    CONTACT-INFO    "Bachmann GmbH"
    DESCRIPTION     "BN-PRO MIB."
    REVISION        "202606170000Z"
    DESCRIPTION     "Restrctured Bachmann MIB"
    ::= { bachmann 10 }

bnProObjects              OBJECT IDENTIFIER ::= { bnPro 1 }
bnProConformance          OBJECT IDENTIFIER ::= { bnPro 2 }
bnProProductIdentities    OBJECT IDENTIFIER ::= { bnPro 3 }

bnProNotification         OBJECT IDENTIFIER ::= { bnPro 6 }
bnProNotifications        OBJECT IDENTIFIER ::= { bnProNotification 0 }
bnProNotificationObjects  OBJECT IDENTIFIER ::= { bnProNotification 1 }
bnProTraps                OBJECT IDENTIFIER ::= { bnProNotification 2 }

bnProIdentification       OBJECT IDENTIFIER ::= { bnProObjects 1 }
bnProInformation          OBJECT IDENTIFIER ::= { bnProObjects 2 }
bnProCluster              OBJECT IDENTIFIER ::= { bnProObjects 3 }
bnProDevice               OBJECT IDENTIFIER ::= { bnProObjects 4 }
bnProInlet                OBJECT IDENTIFIER ::= { bnProObjects 5 }
bnProPhase                OBJECT IDENTIFIER ::= { bnProObjects 6 }
bnProMcb                  OBJECT IDENTIFIER ::= { bnProObjects 7 }
bnProOutlet               OBJECT IDENTIFIER ::= { bnProObjects 8 }
bnProRcm                  OBJECT IDENTIFIER ::= { bnProObjects 9 }
bnProSpd                  OBJECT IDENTIFIER ::= { bnProObjects 10 }
bnProExternalSensor       OBJECT IDENTIFIER ::= { bnProObjects 11 }
bnProGpio                 OBJECT IDENTIFIER ::= { bnProObjects 12 }
bnProOutletGroup          OBJECT IDENTIFIER ::= { bnProObjects 13 }

BnProStatus ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Common status state; values follow the BlueNetGen2 entity-status model as
                 emitted by the agent."
    SYNTAX      INTEGER {
                    expected(0),
                    undefined(1),
                    ok(2),
                    errorHigh(3),
                    errorLow(4),
                    warningHigh(5),
                    warningLow(6),
                    lost(7),
                    deactivated(8),
                    onAlarmIdentify(9),
                    offAlarmIdentify(10),
                    onAlarm(11),
                    offAlarm(12),
                    onWarningIdentify(13),
                    offWarningIdentify(14),
                    onWarning(15),
                    offWarning(16),
                    onIdentify(17),
                    offIdentify(18),
                    on(19),
                    off(20),
                    onChildAlarm(21),
                    offChildAlarm(22),
                    onChildWarning(23),
                    offChildWarning(24),
                    childAlarm(25),
                    childWarning(26),
                    lostChild(27),
                    updateInProgress(36),
                    updateError(37),
                    onGoingSwitch(38),
                    high(39),
                    low(40),
                    alarm(41),
                    warning(42),
                    okAlt(43),
                    disabled(44),
                    fwVersionTooNew(45)
                }

BnProOperState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Common operational status."
    SYNTAX      INTEGER { unknown(0), inactive(1), active(2), unavailable(3) }

BnProCommunicationState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Communication state and role of the exposed BN-PRO device or cluster member."
    SYNTAX      INTEGER {
                    unknown(0),
                    single(1),
                    main(2),
                    singleLinkCandidate(3),
                    link(4),
                    bridged(5),
                    powerOnly(6)
                }

BnProClusterMode ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Configured cluster mode (role) of a PDU.

                 Values 1-5 are a 1:1 mirror of the camodels cluster.Mode enum, in its
                 declaration order: the CLI and web frontend carry this setting as the
                 string 'main' / 'link' / 'scan-main' / 'power-only' / 'bridged', and
                 these labels are the same values spelled in camelCase, since SMI
                 enumeration labels cannot contain hyphens.

                 unknown(0) has no camodels counterpart and exists only because SNMP,
                 unlike the other management surfaces, must return some value for every
                 row of a walk: it means the agent could not resolve this PDU's mode,
                 not that the PDU has a sixth mode. Managers should treat it as 'no
                 data', not as a role.

                 This is a configured mode, so it is a distinct type from
                 BnProCommunicationState (the observed live state) and is numbered
                 independently: the shared labels do NOT carry the same enumeration
                 values in the two types. Decode each object through its own type
                 rather than comparing the raw integers."
    SYNTAX      INTEGER {
                    unknown(0),
                    main(1),
                    link(2),
                    scanMain(3),
                    powerOnly(4),
                    bridged(5)
                }

BnProGpioMode ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "GPIO direction and capability mode."
    SYNTAX      INTEGER { unknown(0), input(1), output(2), inout(3) }

BnProGpioSwitchState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "GPIO output switch command state."
    SYNTAX      INTEGER { unknown(0), off(1), on(2) }

BnProGpioStatus ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "GPIO runtime state."
    SYNTAX      INTEGER { unknown(0), off(1), on(2), low(3), high(4) }

BnProOutletGroupControlState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Requested or configured control state for an outlet group."
    SYNTAX      INTEGER { unknown(0), off(1), on(2), restart(3), unsupported(4) }

BnProOutletGroupEffectiveState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Effective aggregated runtime state of an outlet group."
    SYNTAX      INTEGER { unknown(0), off(1), on(2), mixed(3), unsupported(4) }

BnProOutletMode ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Outlet runtime mode."
    SYNTAX      INTEGER { unknown(0), off(1), on(2), unsupported(3) }

BnProOutletControlAction ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Requested outlet or outlet-group control action."
    SYNTAX      INTEGER { unknown(0), off(1), on(2), powerCycle(3) }

BnProOutletIdentifyCommand ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Requested identify command for an outlet or outlet group."
    SYNTAX      INTEGER { off(1), on(2) }

BnProTrapElementType ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Element type identifier used in BN-PRO notifications and traps."
    SYNTAX      INTEGER { unknown(0), pdu(1), inlet(2), phase(3), mcb(4), outlet(5), rcm(6), spd(7), externalSensor(8), gpio(9), outletGroup(10) }

BnProCurrentMilliAmpere ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Current value in milliampere. Example: 850 means 850 mA."
    SYNTAX      Integer32

BnProPowerFactorMilli ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-3"
    STATUS      current
    DESCRIPTION "Power factor value with 0.001 base resolution. Example: 980 means 0.980."
    SYNTAX      Integer32 (-1000..1000)

BnProFrequencyTenthHz ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-1"
    STATUS      current
    DESCRIPTION "Frequency value with 0.1 Hz base resolution. Example: 500 means 50.0 Hz."
    SYNTAX      Integer32

BnProPercentTenth ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-1"
    STATUS      current
    DESCRIPTION "Percent value with 0.1 percent base resolution. Example: 455 means 45.5 percent."
    SYNTAX      Integer32

BnProTemperatureTenthCelsius ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-1"
    STATUS      current
    DESCRIPTION "Temperature value with 0.1 degree Celsius base resolution. Example: 235 means 23.5 degrees Celsius."
    SYNTAX      Integer32

BnProVoltageVolt ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Voltage value in volts."
    SYNTAX      Integer32

BnProWatt ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Active power in watts (whole numbers). Example: 1200 means 1200 W."
    SYNTAX      Integer32

BnProVoltAmpere ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Apparent power in volt-amperes (whole numbers). Example: 1500 means 1500 VA."
    SYNTAX      Integer32

BnProVar ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Reactive power in volt-amperes reactive (whole numbers). Example: 300 means 300 var."
    SYNTAX      Integer32

BnProWattHour ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-3"
    STATUS      current
    DESCRIPTION "Active energy counter in watt-hours stored as integer Wh. A compliant MIB browser
                 divides by 1000 and appends UNITS to display e.g. 4567 renders as 4.567 kWh.
                 Wraps at 2^63-1 Wh."
    SYNTAX      Counter64

BnProVoltAmpereHour ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-3"
    STATUS      current
    DESCRIPTION "Apparent energy counter in volt-ampere-hours stored as integer VAh.
                 Divide by 1000 for kVAh display. Example: 2500 renders as 2.500 kVAh."
    SYNTAX      Counter64

BnProVarHour ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-3"
    STATUS      current
    DESCRIPTION "Reactive energy counter in var-hours stored as integer varh.
                 Divide by 1000 for kVArh display. Example: 800 renders as 0.800 kVArh."
    SYNTAX      Counter64

BnProHysteresisPerMille ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Hysteresis expressed as tenths of a percent of the threshold range.
                 Example: 50 means 5.0 percent hysteresis."
    SYNTAX      Integer32 (0..1000)

BnProSeconds ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Duration in whole seconds. Example: 10 means 10 seconds."
    SYNTAX      Unsigned32

BnProOperatingHours ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION "Cumulative operating time in whole hours."
    SYNTAX      Unsigned32

BnProRcmSelfTestCommand ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "RCM self-test command, optionally selecting which notifications the
                 self-test emits. Writing triggers a self-test for the addressed RCM."
    SYNTAX      INTEGER {
                    selfTestWithoutAnyNotification     (0),
                    selfTestWithAlarmNotifyOnly        (1),
                    selfTestWithSelfTestNotifyOnly     (2),
                    selfTestWithAlarmAndSelfTestNotify (3),
                    selfTestCommand                    (4)
                }

BnProRcmSelfTestResult ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION "Result of the most recent RCM self-test."
    SYNTAX      INTEGER {
                    notRun         (0),
                    notReachable   (1),
                    success        (2),
                    failure        (3),
                    partialSuccess (4),
                    cancelled      (5),
                    notApplicable  (255)
                }



bnProProductMetered OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO metered product class. bnProIdentProductName returns 'Metered'."
    ::= { bnProProductIdentities 1 }

bnProProductMeteredPlus OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO metered+ product class. bnProIdentProductName returns 'Metered+'."
    ::= { bnProProductIdentities 2 }

bnProProductSwitched OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO switched product class. bnProIdentProductName returns 'Switched'."
    ::= { bnProProductIdentities 3 }

bnProProductSwitchedPlus OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO switched+ product class. bnProIdentProductName returns 'Switched+'."
    ::= { bnProProductIdentities 4 }

bnProProductSecureSwitched OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO secure switched product class. bnProIdentProductName returns 'SecureSwitched'."
    ::= { bnProProductIdentities 5 }

bnProProductSecureSwitchedPlus OBJECT-IDENTITY
    STATUS current
    DESCRIPTION "BN-PRO secure switched+ product class. bnProIdentProductName returns 'SecureSwitched+'."
    ::= { bnProProductIdentities 6 }


bnProIdentVendor OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Vendor name."
    ::= { bnProIdentification 1 }

bnProIdentProductName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Product name string identifying the BN-PRO product class. The returned value maps to the product identity OIDs defined under bnProProductIdentities as follows:
                   Metered          -> bnProProductMetered       (1.3.6.1.4.1.31770.10.3.1)
                   Metered+         -> bnProProductMeteredPlus   (1.3.6.1.4.1.31770.10.3.2)
                   Switched         -> bnProProductSwitched      (1.3.6.1.4.1.31770.10.3.3)
                   Switched+        -> bnProProductSwitchedPlus  (1.3.6.1.4.1.31770.10.3.4)
                   SecureSwitched   -> bnProProductSecureSwitched     (1.3.6.1.4.1.31770.10.3.5)
                   SecureSwitched+  -> bnProProductSecureSwitchedPlus (1.3.6.1.4.1.31770.10.3.6)
                 NMS tools can use sysObjectID or this object to identify the product variant and enable or disable variant-specific monitoring features."
    ::= { bnProIdentification 2 }

bnProIdentModelConfig OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Product model configuration name. Matches the value returned by bnProDeviceModelConfig in the PDU properties table."
    ::= { bnProIdentification 3 }

bnProIdentSerialNumber OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Serial number of the SNMP agent/main device."
    ::= { bnProIdentification 4 }

bnProIdentOrderNumber OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Order number of the SNMP agent/main device."
    ::= { bnProIdentification 5 }

bnProIdentHardwareRevision OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Hardware revision for this device, covering control unit (CU), power supply unit (PSU), MCB monitor, and outlet board revisions. Example format: 01.04.05.03."
    ::= { bnProIdentification 6 }

bnProIdentSoftwareVersion OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Software version."
    ::= { bnProIdentification 7 }

bnProIdentMacAddress OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Primary MAC address."
    ::= { bnProIdentification 8 }


bnProInfoUptime OBJECT-TYPE
    SYNTAX      TimeTicks
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "SNMP agent/system uptime."
    ::= { bnProInformation 1 }

bnProInfoTotalOperatingHours OBJECT-TYPE
    SYNTAX      BnProOperatingHours
    UNITS       "hours"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Total operating hours of the PDU."
    ::= { bnProInformation 2 }

bnProInfoSystemTime OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Current system date and time. Configuration/write access belongs to the config MIB NTP/time branch."
    ::= { bnProInformation 3 }

bnProInfoCommunicationState OBJECT-TYPE
    SYNTAX      BnProCommunicationState
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Overall communication state of the SNMP agent/exposed cluster."
    ::= { bnProInformation 4 }

bnProInfoStatusMessage OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..255))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable overall status message."
    ::= { bnProInformation 5 }

bnProInfoLastChange OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Timestamp of the last significant system state or configuration change."
    ::= { bnProInformation 6 }

bnProInfoAccumulatedStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Worst accumulated system status since boot or last reset."
    ::= { bnProInformation 7 }

bnProInfoAccumulatedStatusReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear bnProInfoAccumulatedStatus back to ok(2). Has no effect if the current system status is not ok."
    ::= { bnProInformation 8 }


bnProClusterTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProClusterEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Cluster table with one row per exposed PDU."
    ::= { bnProCluster 1 }

bnProClusterEntry OBJECT-TYPE
    SYNTAX      BnProClusterEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "One cluster PDU row."
    INDEX       { bnProClusterPduIndex }
    ::= { bnProClusterTable 1 }

BnProClusterEntry ::= SEQUENCE {
    bnProClusterPduIndex      Unsigned32,
    bnProClusterPduLabel       DisplayString,
    bnProClusterPduMode       BnProClusterMode
}

bnProClusterPduIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..20)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "PDU index within the cluster table."
    ::= { bnProClusterEntry 1 }

bnProClusterPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Label of this cluster PDU: its configured name, defaulting to the PDU's
                 hostname when unset.

                 This is the writable source of the label that the read-only PduLabel
                 column of every element table reports for rows owned by this PDU.
                 Setting it here renames the PDU everywhere; writing an empty string
                 clears the configured name and reverts the label to the hostname."
    DEFVAL      { "" }
    ::= { bnProClusterEntry 2 }

bnProClusterPduMode OBJECT-TYPE
    SYNTAX      BnProClusterMode
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Configured cluster mode (role) of this PDU.

                 This is the persisted mode of the cluster member, not its live
                 connection health: a PDU configured as link(2) reports link(2)
                 whether or not it is currently reachable. For the live state of
                 the PDU serving this agent, including link maintenance, see
                 bnProInfoCommunicationState.

                 If the mode cannot be resolved for a row (for example an unreachable
                 cluster member, or firmware without the per-PDU cluster-mode API) this
                 object reports unknown(0) rather than failing the request, so one
                 unresolvable PDU does not truncate a walk of the table."
    ::= { bnProClusterEntry 3 }


-- PDU properties table
bnProDevicePropertiesTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProDevicePropertiesEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of PDU properties exposed by this SNMP agent. In cluster mode this includes the Main PDU and visible Link PDUs."
    ::= { bnProDevice 1 }

bnProDevicePropertiesEntry OBJECT-TYPE
    SYNTAX      BnProDevicePropertiesEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "One PDU entry."
    INDEX       { bnProDeviceIndex }
    ::= { bnProDevicePropertiesTable 1 }

BnProDevicePropertiesEntry ::= SEQUENCE {
    bnProDeviceIndex                            Unsigned32,
    bnProDeviceName                             DisplayString,
    bnProDeviceFriendlyName                     DisplayString,
    bnProDeviceLocation                         DisplayString,
    bnProDeviceModelConfig                      DisplayString,
    bnProDeviceSerialNumber                     DisplayString,
    bnProDeviceItemNumber                       DisplayString,
    bnProDeviceHardwareRevision                 DisplayString,
    bnProDeviceSoftwareVersion                  DisplayString,
    bnProDeviceEth1MacAddress                   DisplayString,
    bnProDeviceEth2MacAddress                   DisplayString,
    bnProDeviceBr0MacAddress                    DisplayString,
    bnProDeviceProductVariant                   INTEGER,
    bnProDevicePhaseVariant                     INTEGER,
    bnProDeviceRatingVariant              INTEGER,
    bnProDeviceOutletSwitchingSupported         TruthValue,
    bnProDeviceOutletMeasurementSupported       TruthValue,
    bnProDeviceOutletMeasurementEnabled         TruthValue,
    bnProDeviceRcmSupported                     TruthValue,
    bnProDeviceMcbSupported                     TruthValue,
    bnProDeviceInletCount                       Unsigned32,
    bnProDevicePhaseCount                       Unsigned32,
    bnProDeviceOutletCount                      Unsigned32,
    bnProDeviceMcbCount                         Unsigned32,
    bnProDeviceRcmCount                         Unsigned32,
    bnProDeviceExternalSensorCount              Unsigned32,
    bnProDeviceGpioCount                        Unsigned32
}

bnProDeviceIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..20)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "PDU index within the exposed system. Value 1 normally represents the Main PDU."
    ::= { bnProDevicePropertiesEntry 1 }

bnProDeviceName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable PDU name or hostname."
    ::= { bnProDevicePropertiesEntry 2 }

bnProDeviceFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this PDU."
    DEFVAL      { "" }
    ::= { bnProDevicePropertiesEntry 3 }

bnProDeviceLocation OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable location of this PDU."
    DEFVAL      { "" }
    ::= { bnProDevicePropertiesEntry 4 }

bnProDeviceModelConfig OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Product model configuration name."
    ::= { bnProDevicePropertiesEntry 5 }

bnProDeviceSerialNumber OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Serial number of this PDU."
    ::= { bnProDevicePropertiesEntry 6 }

bnProDeviceItemNumber OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Item number of this PDU."
    ::= { bnProDevicePropertiesEntry 7 }

bnProDeviceHardwareRevision OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Hardware revision of this PDU, covering control unit (CU), power supply unit (PSU), MCB monitor, and outlet board revisions. Example format: 01.04.05.03."
    ::= { bnProDevicePropertiesEntry 8 }

bnProDeviceSoftwareVersion OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Software version of this PDU."
    ::= { bnProDevicePropertiesEntry 9 }

bnProDeviceEth1MacAddress OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Ethernet 1 MAC address for this PDU."
    ::= { bnProDevicePropertiesEntry 10 }

bnProDeviceEth2MacAddress OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Ethernet 2 MAC address for this PDU."
    ::= { bnProDevicePropertiesEntry 11 }

bnProDeviceBr0MacAddress OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Bridge 0 MAC address for this PDU."
    ::= { bnProDevicePropertiesEntry 12 }

bnProDeviceProductVariant OBJECT-TYPE
    SYNTAX      INTEGER { unknown(0), metered(1), meteredPlus(2), switched(3), switchedPlus(4) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Product class of this PDU."
    ::= { bnProDevicePropertiesEntry 13 }

bnProDevicePhaseVariant OBJECT-TYPE
    SYNTAX      INTEGER { unknown(0), onePhase(1), threePhase(3) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Electrical phase variant of this PDU."
    ::= { bnProDevicePropertiesEntry 14 }

bnProDeviceRatingVariant OBJECT-TYPE
    SYNTAX      INTEGER { unknown(0), amp16(16), amp32(32), amp63(63) }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Device rating variant of this PDU."
    ::= { bnProDevicePropertiesEntry 15 }

bnProDeviceOutletSwitchingSupported OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether outlet switching is supported."
    ::= { bnProDevicePropertiesEntry 16 }

bnProDeviceOutletMeasurementSupported OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether outlet measurement is supported."
    ::= { bnProDevicePropertiesEntry 17 }

bnProDeviceOutletMeasurementEnabled OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether outlet measurement is enabled."
    ::= { bnProDevicePropertiesEntry 18 }

bnProDeviceRcmSupported OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether this PDU supports RCM."
    ::= { bnProDevicePropertiesEntry 19 }

bnProDeviceMcbSupported OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether this PDU supports MCB/fuse monitoring."
    ::= { bnProDevicePropertiesEntry 20 }

bnProDeviceInletCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of inlets available on this PDU."
    ::= { bnProDevicePropertiesEntry 21 }

bnProDevicePhaseCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of phases available on this PDU."
    ::= { bnProDevicePropertiesEntry 22 }

bnProDeviceOutletCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of outlets available on this PDU."
    ::= { bnProDevicePropertiesEntry 23 }

bnProDeviceMcbCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of MCB/fuse entries available on this PDU."
    ::= { bnProDevicePropertiesEntry 24 }

bnProDeviceRcmCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of RCM entries available on this PDU."
    ::= { bnProDevicePropertiesEntry 25 }

bnProDeviceExternalSensorCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of external sensor entries available on this PDU."
    ::= { bnProDevicePropertiesEntry 26 }

bnProDeviceGpioCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of GPIO entries available on this PDU."
    ::= { bnProDevicePropertiesEntry 27 }

-- PDU measurements table
bnProDeviceMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProDeviceMeasurementsEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Per-PDU electrical measurements. This subtable sits under the PDU branch, similar to element measurement tables."
    ::= { bnProDevice 2 }

bnProDeviceMeasurementsEntry OBJECT-TYPE
    SYNTAX      BnProDeviceMeasurementsEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex }
    ::= { bnProDeviceMeasurementsTable 1 }

BnProDeviceMeasurementsEntry ::= SEQUENCE {
    bnProDeviceMeasurementsPduLabel    DisplayString,
    bnProDeviceCurrent                Integer32,
    bnProDeviceCurrentMax             Integer32,
    bnProDevicePowerActive            Integer32,
    bnProDevicePowerActiveMax         Integer32,
    bnProDevicePowerApparent          Integer32,
    bnProDevicePowerReactive          Integer32,
    bnProDevicePowerFactor            Integer32,
    bnProDevicePowerFactorSuffix      DisplayString,
    bnProDeviceEnergyActive           Counter64,
    bnProDeviceEnergyActive2          Counter64,
    bnProDeviceEnergyApparent         Counter64,
    bnProDeviceEnergyReactive         Counter64,
    bnProDeviceFrequency              Integer32,
    bnProDeviceStatus                  BnProStatus
}

bnProDeviceMeasurementsPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProDeviceMeasurementsEntry 1 }

bnProDeviceCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Total PDU input current."
    ::= { bnProDeviceMeasurementsEntry 2 }

bnProDeviceCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum observed PDU input current."
    ::= { bnProDeviceMeasurementsEntry 3 }

bnProDevicePowerActive OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Total active power of this PDU."
    ::= { bnProDeviceMeasurementsEntry 4 }

bnProDevicePowerActiveMax OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum observed active power of this PDU."
    ::= { bnProDeviceMeasurementsEntry 5 }

bnProDevicePowerApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpere
    UNITS       "VA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Total apparent power of this PDU."
    ::= { bnProDeviceMeasurementsEntry 6 }

bnProDevicePowerReactive OBJECT-TYPE
    SYNTAX      BnProVar
    UNITS       "var"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Total reactive power of this PDU."
    ::= { bnProDeviceMeasurementsEntry 7 }

bnProDevicePowerFactor OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "PDU power factor. Example: 1000 means 1.000."
    ::= { bnProDeviceMeasurementsEntry 8 }

bnProDevicePowerFactorSuffix OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..8))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Power factor suffix, for example LA or LE."
    ::= { bnProDeviceMeasurementsEntry 9 }

bnProDeviceEnergyActive OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Accumulated active energy in Wh. For kWh, divide by 1000."
    ::= { bnProDeviceMeasurementsEntry 10 }

bnProDeviceEnergyActive2 OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Second accumulated active energy counter in Wh. For kWh, divide by 1000."
    ::= { bnProDeviceMeasurementsEntry 11 }

bnProDeviceEnergyApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpereHour
    UNITS       "VAh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Accumulated apparent energy in VAh. For kVAh, divide by 1000."
    ::= { bnProDeviceMeasurementsEntry 12 }

bnProDeviceEnergyReactive OBJECT-TYPE
    SYNTAX      BnProVarHour
    UNITS       "varh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Accumulated reactive energy in varh. For kvarh, divide by 1000."
    ::= { bnProDeviceMeasurementsEntry 13 }

bnProDeviceFrequency OBJECT-TYPE
    SYNTAX      BnProFrequencyTenthHz
    UNITS       "Hz"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Input frequency"
    ::= { bnProDeviceMeasurementsEntry 14 }

bnProDeviceStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Overall status of this PDU."
    ::= { bnProDeviceMeasurementsEntry 15 }

-- Inlet table
bnProInletMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProInletEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of PDU inlets. Inlet is a peer branch; phase/outlet relations are expressed by columns in their own tables."
    ::= { bnProInlet 1 }

bnProInletEntry OBJECT-TYPE
    SYNTAX      BnProInletEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProInletIndex }
    ::= { bnProInletMeasurementsTable 1 }

BnProInletEntry ::= SEQUENCE {
    bnProInletPduLabel             DisplayString,
    bnProInletIndex                Unsigned32,
    bnProInletName                 DisplayString,
    bnProInletFriendlyName         DisplayString,
    bnProInletCurrent              Integer32,
    bnProInletCurrentMax           Integer32,
    bnProInletNeutralCurrent       Integer32,
    bnProInletNeutralCurrentMax    Integer32,
    bnProInletPowerActive          Integer32,
    bnProInletPowerActiveMax       Integer32,
    bnProInletPowerApparent        Integer32,
    bnProInletPowerReactive        Integer32,
    bnProInletEnergyActive         Counter64,
    bnProInletEnergyActive2        Counter64,
    bnProInletEnergyApparent       Counter64,
    bnProInletEnergyReactive       Counter64,
    bnProInletFrequency            Integer32,
    bnProInletStatus               BnProStatus
}

bnProInletPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProInletEntry 1 }

bnProInletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Inlet index within one PDU."
    ::= { bnProInletEntry 2 }

bnProInletName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable inlet name."
    ::= { bnProInletEntry 3 }

bnProInletFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this inlet."
    ::= { bnProInletEntry 4 }

bnProInletCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Inlet current."
    ::= { bnProInletEntry 5 }

bnProInletCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum inlet current."
    ::= { bnProInletEntry 6 }

bnProInletNeutralCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Neutral current."
    ::= { bnProInletEntry 7 }

bnProInletNeutralCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum neutral current."
    ::= { bnProInletEntry 8 }

bnProInletPowerActive OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active inlet power."
    ::= { bnProInletEntry 9 }

bnProInletPowerActiveMax OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum active inlet power."
    ::= { bnProInletEntry 10 }

bnProInletPowerApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpere
    UNITS       "VA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent inlet power."
    ::= { bnProInletEntry 11 }

bnProInletPowerReactive OBJECT-TYPE
    SYNTAX      BnProVar
    UNITS       "var"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive inlet power."
    ::= { bnProInletEntry 12 }

bnProInletEnergyActive OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active inlet energy in Wh. For kWh, divide by 1000."
    ::= { bnProInletEntry 13 }

bnProInletEnergyActive2 OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Second active inlet energy counter in Wh. For kWh, divide by 1000."
    ::= { bnProInletEntry 14 }

bnProInletEnergyApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpereHour
    UNITS       "VAh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent inlet energy in VAh. For kVAh, divide by 1000."
    ::= { bnProInletEntry 15 }

bnProInletEnergyReactive OBJECT-TYPE
    SYNTAX      BnProVarHour
    UNITS       "varh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive inlet energy in varh. For kvarh, divide by 1000."
    ::= { bnProInletEntry 16 }

bnProInletFrequency OBJECT-TYPE
    SYNTAX      BnProFrequencyTenthHz
    UNITS       "Hz"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Input frequency. Example: 500 means 50.0 Hz."
    ::= { bnProInletEntry 17 }

bnProInletStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Inlet status."
    ::= { bnProInletEntry 18 }


bnProInletResetTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProInletResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Reset control table for inlet measurements."
    ::= { bnProInlet 3 }

bnProInletResetEntry OBJECT-TYPE
    SYNTAX      BnProInletResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProInletIndex }
    ::= { bnProInletResetTable 1 }

BnProInletResetEntry ::= SEQUENCE {
    bnProInletResetPduLabel        DisplayString,
    bnProInletResetInletIndex      Unsigned32,
    bnProInletCurrentMaxReset      INTEGER,
    bnProInletPowerActiveMaxReset  INTEGER,
    bnProInletEnergyActive2Reset   INTEGER
}

bnProInletResetPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProInletResetEntry 1 }

bnProInletResetInletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the inlet this row belongs to, mirroring the INDEX value so the owning inlet is visible as a readable column."
    ::= { bnProInletResetEntry 2 }

bnProInletCurrentMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum inlet current value."
    ::= { bnProInletResetEntry 3 }

bnProInletPowerActiveMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum active inlet power value."
    ::= { bnProInletResetEntry 4 }

bnProInletEnergyActive2Reset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the second active inlet energy counter."
    ::= { bnProInletResetEntry 5 }

bnProInletThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProInletThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for inlet measurements. One row represents all supported threshold parameters of one inlet."
    ::= { bnProInlet 2 }

bnProInletThresholdEntry OBJECT-TYPE
    SYNTAX      BnProInletThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProInletIndex }
    ::= { bnProInletThresholdTable 1 }

BnProInletThresholdEntry ::= SEQUENCE {
    bnProInletThresholdPduLabel                   DisplayString,
    bnProInletThresholdInletIndex                 Unsigned32,
    bnProInletThresholdCurrentLowAlarm            Integer32,
    bnProInletThresholdCurrentHighAlarm           Integer32,
    bnProInletThresholdCurrentLowWarning          Integer32,
    bnProInletThresholdCurrentHighWarning         Integer32,
    bnProInletThresholdCurrentHysteresis          Integer32,
    bnProInletThresholdNeutralCurrentLowAlarm     Integer32,
    bnProInletThresholdNeutralCurrentHighAlarm    Integer32,
    bnProInletThresholdNeutralCurrentLowWarning   Integer32,
    bnProInletThresholdNeutralCurrentHighWarning  Integer32,
    bnProInletThresholdNeutralCurrentHysteresis   Integer32
}

bnProInletThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProInletThresholdEntry 1 }

bnProInletThresholdInletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the inlet this row belongs to, mirroring the INDEX value so the owning inlet is visible as a readable column."
    ::= { bnProInletThresholdEntry 2 }

bnProInletThresholdCurrentLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for inlet current."
    ::= { bnProInletThresholdEntry 3 }

bnProInletThresholdCurrentHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for inlet current."
    ::= { bnProInletThresholdEntry 4 }

bnProInletThresholdCurrentLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for inlet current."
    ::= { bnProInletThresholdEntry 5 }

bnProInletThresholdCurrentHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for inlet current."
    ::= { bnProInletThresholdEntry 6 }

bnProInletThresholdCurrentHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for inlet current thresholds."
    ::= { bnProInletThresholdEntry 7 }

bnProInletThresholdNeutralCurrentLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for inlet neutral current."
    ::= { bnProInletThresholdEntry 8 }

bnProInletThresholdNeutralCurrentHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for inlet neutral current."
    ::= { bnProInletThresholdEntry 9 }

bnProInletThresholdNeutralCurrentLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for inlet neutral current."
    ::= { bnProInletThresholdEntry 10 }

bnProInletThresholdNeutralCurrentHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for inlet neutral current."
    ::= { bnProInletThresholdEntry 11 }

bnProInletThresholdNeutralCurrentHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for inlet neutral current thresholds."
    ::= { bnProInletThresholdEntry 12 }

-- Phase table
bnProPhaseMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProPhaseEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of electrical phases. Phase is a peer branch, not nested below inlet."
    ::= { bnProPhase 1 }

bnProPhaseEntry OBJECT-TYPE
    SYNTAX      BnProPhaseEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProPhaseIndex }
    ::= { bnProPhaseMeasurementsTable 1 }

BnProPhaseEntry ::= SEQUENCE {
    bnProPhasePduLabel            DisplayString,
    bnProPhaseIndex               Integer32,
    bnProPhaseName                DisplayString,
    bnProPhaseFriendlyName        DisplayString,
    bnProPhaseCurrent             Integer32,
    bnProPhaseCurrentMax          Integer32,
    bnProPhaseVoltage             Integer32,
    bnProPhasePowerFactor         Integer32,
    bnProPhasePowerFactorSuffix   DisplayString,
    bnProPhasePowerActive         Integer32,
    bnProPhasePowerActiveMax      Integer32,
    bnProPhasePowerApparent       Integer32,
    bnProPhasePowerReactive       Integer32,
    bnProPhaseEnergyActive        Counter64,
    bnProPhaseEnergyActive2       Counter64,
    bnProPhaseEnergyApparent      Counter64,
    bnProPhaseEnergyReactive      Counter64,
    bnProPhaseStatus              BnProStatus
}

bnProPhasePduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProPhaseEntry 1 }

bnProPhaseIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Phase index within one PDU."
    ::= { bnProPhaseEntry 2 }

bnProPhaseName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable phase name."
    ::= { bnProPhaseEntry 3 }

bnProPhaseFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this phase."
    ::= { bnProPhaseEntry 4 }


bnProPhaseCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Phase current."
    ::= { bnProPhaseEntry 5 }

bnProPhaseCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum phase current."
    ::= { bnProPhaseEntry 6 }

bnProPhaseVoltage OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Phase voltage."
    ::= { bnProPhaseEntry 7 }

bnProPhasePowerFactor OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Phase power factor. Example: 1000 means 1.000."
    ::= { bnProPhaseEntry 8 }

bnProPhasePowerFactorSuffix OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..8))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Power factor suffix, for example LA or LE."
    ::= { bnProPhaseEntry 9 }

bnProPhasePowerActive OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active phase power."
    ::= { bnProPhaseEntry 10 }

bnProPhasePowerActiveMax OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum active phase power."
    ::= { bnProPhaseEntry 11 }

bnProPhasePowerApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpere
    UNITS       "VA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent phase power."
    ::= { bnProPhaseEntry 12 }

bnProPhasePowerReactive OBJECT-TYPE
    SYNTAX      BnProVar
    UNITS       "var"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive phase power."
    ::= { bnProPhaseEntry 13 }

bnProPhaseEnergyActive OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active phase energy in Wh. For kWh, divide by 1000."
    ::= { bnProPhaseEntry 14 }

bnProPhaseEnergyActive2 OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Second active phase energy counter in Wh. For kWh, divide by 1000."
    ::= { bnProPhaseEntry 15 }

bnProPhaseEnergyApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpereHour
    UNITS       "VAh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent phase energy in VAh. For kVAh, divide by 1000."
    ::= { bnProPhaseEntry 16 }

bnProPhaseEnergyReactive OBJECT-TYPE
    SYNTAX      BnProVarHour
    UNITS       "varh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive phase energy in varh. For kvarh, divide by 1000."
    ::= { bnProPhaseEntry 17 }

bnProPhaseStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Phase status."
    ::= { bnProPhaseEntry 18 }


bnProPhaseResetTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProPhaseResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Reset control table for phase measurements."
    ::= { bnProPhase 3 }

bnProPhaseResetEntry OBJECT-TYPE
    SYNTAX      BnProPhaseResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProPhaseIndex }
    ::= { bnProPhaseResetTable 1 }

BnProPhaseResetEntry ::= SEQUENCE {
    bnProPhaseResetPduLabel       DisplayString,
    bnProPhaseResetPhaseIndex     Unsigned32,
    bnProPhaseCurrentMaxReset     INTEGER,
    bnProPhasePowerActiveMaxReset INTEGER,
    bnProPhaseEnergyActive2Reset  INTEGER
}

bnProPhaseResetPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProPhaseResetEntry 1 }

bnProPhaseResetPhaseIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the phase this row belongs to, mirroring the INDEX value so the owning phase is visible as a readable column."
    ::= { bnProPhaseResetEntry 2 }

bnProPhaseCurrentMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum phase current value."
    ::= { bnProPhaseResetEntry 3 }

bnProPhasePowerActiveMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum active phase power value."
    ::= { bnProPhaseResetEntry 4 }

bnProPhaseEnergyActive2Reset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the second active phase energy counter."
    ::= { bnProPhaseResetEntry 5 }

bnProPhaseThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProPhaseThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for phase measurements. One row represents all supported threshold parameters of one phase."
    ::= { bnProPhase 2 }

bnProPhaseThresholdEntry OBJECT-TYPE
    SYNTAX      BnProPhaseThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProPhaseIndex }
    ::= { bnProPhaseThresholdTable 1 }

BnProPhaseThresholdEntry ::= SEQUENCE {
    bnProPhaseThresholdPduLabel                   DisplayString,
    bnProPhaseThresholdPhaseIndex                 Unsigned32,
    bnProPhaseThresholdCurrentLowAlarm            Integer32,
    bnProPhaseThresholdCurrentHighAlarm           Integer32,
    bnProPhaseThresholdCurrentLowWarning          Integer32,
    bnProPhaseThresholdCurrentHighWarning         Integer32,
    bnProPhaseThresholdCurrentHysteresis          Integer32,
    bnProPhaseThresholdVoltageLowAlarm            Integer32,
    bnProPhaseThresholdVoltageHighAlarm           Integer32,
    bnProPhaseThresholdVoltageLowWarning          Integer32,
    bnProPhaseThresholdVoltageHighWarning         Integer32,
    bnProPhaseThresholdVoltageHysteresis          Integer32,
    bnProPhaseThresholdPowerFactorLowAlarm        Integer32,
    bnProPhaseThresholdPowerFactorHighAlarm       Integer32,
    bnProPhaseThresholdPowerFactorLowWarning      Integer32,
    bnProPhaseThresholdPowerFactorHighWarning     Integer32,
    bnProPhaseThresholdPowerFactorHysteresis      Integer32
}

bnProPhaseThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProPhaseThresholdEntry 1 }

bnProPhaseThresholdPhaseIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the phase this row belongs to, mirroring the INDEX value so the owning phase is visible as a readable column."
    ::= { bnProPhaseThresholdEntry 2 }

bnProPhaseThresholdCurrentLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for phase current."
    ::= { bnProPhaseThresholdEntry 3 }

bnProPhaseThresholdCurrentHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for phase current."
    ::= { bnProPhaseThresholdEntry 4 }

bnProPhaseThresholdCurrentLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for phase current."
    ::= { bnProPhaseThresholdEntry 5 }

bnProPhaseThresholdCurrentHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for phase current."
    ::= { bnProPhaseThresholdEntry 6 }

bnProPhaseThresholdCurrentHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for phase current thresholds."
    ::= { bnProPhaseThresholdEntry 7 }

bnProPhaseThresholdVoltageLowAlarm OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for phase voltage."
    ::= { bnProPhaseThresholdEntry 8 }

bnProPhaseThresholdVoltageHighAlarm OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for phase voltage."
    ::= { bnProPhaseThresholdEntry 9 }

bnProPhaseThresholdVoltageLowWarning OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for phase voltage."
    ::= { bnProPhaseThresholdEntry 10 }

bnProPhaseThresholdVoltageHighWarning OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for phase voltage."
    ::= { bnProPhaseThresholdEntry 11 }

bnProPhaseThresholdVoltageHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for phase voltage thresholds."
    ::= { bnProPhaseThresholdEntry 12 }

bnProPhaseThresholdPowerFactorLowAlarm OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for phase power factor."
    ::= { bnProPhaseThresholdEntry 13 }

bnProPhaseThresholdPowerFactorHighAlarm OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for phase power factor."
    ::= { bnProPhaseThresholdEntry 14 }

bnProPhaseThresholdPowerFactorLowWarning OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for phase power factor."
    ::= { bnProPhaseThresholdEntry 15 }

bnProPhaseThresholdPowerFactorHighWarning OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for phase power factor."
    ::= { bnProPhaseThresholdEntry 16 }

bnProPhaseThresholdPowerFactorHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for phase power factor thresholds."
    ::= { bnProPhaseThresholdEntry 17 }

-- MCB table
bnProMcbMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProMcbEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of MCB/fuse monitoring entries."
    ::= { bnProMcb 1 }

bnProMcbEntry OBJECT-TYPE
    SYNTAX      BnProMcbEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProMcbIndex }
    ::= { bnProMcbMeasurementsTable 1 }

BnProMcbEntry ::= SEQUENCE {
    bnProMcbPduLabel        DisplayString,
    bnProMcbIndex          Unsigned32,
    bnProMcbName           DisplayString,
    bnProMcbFriendlyName   DisplayString,
    bnProMcbCurrent        Integer32,
    bnProMcbCurrentMax     Integer32,
    bnProMcbCurrentMaxReset INTEGER,
    bnProMcbStatus         BnProStatus
}

bnProMcbPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProMcbEntry 1 }

bnProMcbIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "MCB/fuse index within one PDU."
    ::= { bnProMcbEntry 2 }

bnProMcbName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable MCB/fuse name."
    ::= { bnProMcbEntry 3 }

bnProMcbFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this MCB/fuse."
    ::= { bnProMcbEntry 4 }

bnProMcbCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "MCB/fuse current."
    ::= { bnProMcbEntry 5 }

bnProMcbCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum MCB/fuse current."
    ::= { bnProMcbEntry 6 }

bnProMcbCurrentMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum MCB/fuse current value."
    ::= { bnProMcbEntry 7 }

bnProMcbStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "MCB/fuse alarm state."
    ::= { bnProMcbEntry 8 }


-- MCB threshold table
bnProMcbThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProMcbThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for MCB measurements. One row represents all supported threshold parameters of one MCB."
    ::= { bnProMcb 2 }

bnProMcbThresholdEntry OBJECT-TYPE
    SYNTAX      BnProMcbThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProMcbIndex }
    ::= { bnProMcbThresholdTable 1 }

BnProMcbThresholdEntry ::= SEQUENCE {
    bnProMcbThresholdPduLabel              DisplayString,
    bnProMcbThresholdMcbIndex              Unsigned32,
    bnProMcbThresholdCurrentLowAlarm       Integer32,
    bnProMcbThresholdCurrentHighAlarm      Integer32,
    bnProMcbThresholdCurrentLowWarning     Integer32,
    bnProMcbThresholdCurrentHighWarning    Integer32,
    bnProMcbThresholdCurrentHysteresis     Integer32
}

bnProMcbThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProMcbThresholdEntry 1 }

bnProMcbThresholdMcbIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the MCB this row belongs to, mirroring the INDEX value so the owning MCB is visible as a readable column."
    ::= { bnProMcbThresholdEntry 2 }

bnProMcbThresholdCurrentLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for MCB current."
    ::= { bnProMcbThresholdEntry 3 }

bnProMcbThresholdCurrentHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for MCB current."
    ::= { bnProMcbThresholdEntry 4 }

bnProMcbThresholdCurrentLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for MCB current."
    ::= { bnProMcbThresholdEntry 5 }

bnProMcbThresholdCurrentHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for MCB current."
    ::= { bnProMcbThresholdEntry 6 }

bnProMcbThresholdCurrentHysteresis OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis applied to the MCB current alarm and warning thresholds."
    ::= { bnProMcbThresholdEntry 7 }

-- Outlet table
bnProOutletMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of outlets. Outlet is a peer branch, not nested below phase."
    ::= { bnProOutlet 1 }

bnProOutletResetTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Reset control table for outlet measurements."
    ::= { bnProOutlet 4 }

bnProOutletEntry OBJECT-TYPE
    SYNTAX      BnProOutletEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletIndex }
    ::= { bnProOutletMeasurementsTable 1 }

BnProOutletEntry ::= SEQUENCE {
    bnProOutletPduLabel           DisplayString,
    bnProOutletIndex              Unsigned32,
    bnProOutletName               DisplayString,
    bnProOutletFriendlyName       DisplayString,
    bnProOutletMode               BnProOutletMode,
    bnProOutletCurrent            Integer32,
    bnProOutletCurrentMax         Integer32,
    bnProOutletVoltage            Integer32,
    bnProOutletPowerFactor        Integer32,
    bnProOutletPowerFactorSuffix  DisplayString,
    bnProOutletPowerActive        Integer32,
    bnProOutletPowerActiveMax     Integer32,
    bnProOutletPowerApparent      Integer32,
    bnProOutletPowerReactive      Integer32,
    bnProOutletEnergyActive       Counter64,
    bnProOutletEnergyActive2      Counter64,
    bnProOutletEnergyApparent     Counter64,
    bnProOutletEnergyReactive     Counter64,
    bnProOutletStatus             BnProStatus,
    bnProOutletIdentifySupported  TruthValue
}

bnProOutletPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletEntry 1 }

bnProOutletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet index within one PDU."
    ::= { bnProOutletEntry 2 }

bnProOutletName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable outlet name."
    ::= { bnProOutletEntry 3 }

bnProOutletFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this outlet."
    ::= { bnProOutletEntry 4 }


bnProOutletMode OBJECT-TYPE
    SYNTAX      BnProOutletMode
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet mode."
    ::= { bnProOutletEntry 5 }

bnProOutletCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet current."
    ::= { bnProOutletEntry 6 }

bnProOutletCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum outlet current."
    ::= { bnProOutletEntry 7 }

bnProOutletVoltage OBJECT-TYPE
    SYNTAX      BnProVoltageVolt
    UNITS       "V"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet voltage."
    ::= { bnProOutletEntry 8 }

bnProOutletPowerFactor OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet power factor. Example: 1000 means 1.000."
    ::= { bnProOutletEntry 9 }

bnProOutletPowerFactorSuffix OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..8))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Power factor suffix, for example LA or LE."
    ::= { bnProOutletEntry 10 }

bnProOutletPowerActive OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active outlet power."
    ::= { bnProOutletEntry 11 }

bnProOutletPowerActiveMax OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum active outlet power."
    ::= { bnProOutletEntry 12 }

bnProOutletPowerApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpere
    UNITS       "VA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent outlet power."
    ::= { bnProOutletEntry 13 }

bnProOutletPowerReactive OBJECT-TYPE
    SYNTAX      BnProVar
    UNITS       "var"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive outlet power."
    ::= { bnProOutletEntry 14 }

bnProOutletEnergyActive OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Active outlet energy in Wh. For kWh, divide by 1000."
    ::= { bnProOutletEntry 15 }

bnProOutletEnergyActive2 OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Second active outlet energy counter in Wh. For kWh, divide by 1000."
    ::= { bnProOutletEntry 16 }

bnProOutletEnergyApparent OBJECT-TYPE
    SYNTAX      BnProVoltAmpereHour
    UNITS       "VAh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Apparent outlet energy in VAh. For kVAh, divide by 1000."
    ::= { bnProOutletEntry 17 }

bnProOutletEnergyReactive OBJECT-TYPE
    SYNTAX      BnProVarHour
    UNITS       "varh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Reactive outlet energy in varh. For kvarh, divide by 1000."
    ::= { bnProOutletEntry 18 }

bnProOutletStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet status."
    ::= { bnProOutletEntry 19 }

bnProOutletIdentifySupported OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Indicates whether identify control (off/on) is supported for this outlet."
    ::= { bnProOutletEntry 20 }


bnProOutletResetEntry OBJECT-TYPE
    SYNTAX      BnProOutletResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletIndex }
    ::= { bnProOutletResetTable 1 }

BnProOutletResetEntry ::= SEQUENCE {
    bnProOutletResetPduLabel       DisplayString,
    bnProOutletResetOutletIndex    Unsigned32,
    bnProOutletCurrentMaxReset    INTEGER,
    bnProOutletPowerActiveMaxReset INTEGER,
    bnProOutletEnergyActive2Reset  INTEGER
}

bnProOutletResetPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletResetEntry 1 }

bnProOutletResetOutletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the outlet this row belongs to, mirroring the INDEX value so the owning outlet is visible as a readable column."
    ::= { bnProOutletResetEntry 2 }

bnProOutletCurrentMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum outlet current value."
    ::= { bnProOutletResetEntry 3 }

bnProOutletPowerActiveMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum active outlet power value."
    ::= { bnProOutletResetEntry 4 }

bnProOutletEnergyActive2Reset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the second active outlet energy counter."
    ::= { bnProOutletResetEntry 5 }

bnProOutletThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for outlet measurements. One row represents all supported threshold parameters of one outlet."
    ::= { bnProOutlet 2 }

bnProOutletThresholdEntry OBJECT-TYPE
    SYNTAX      BnProOutletThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletIndex }
    ::= { bnProOutletThresholdTable 1 }

BnProOutletThresholdEntry ::= SEQUENCE {
    bnProOutletThresholdPduLabel                  DisplayString,
    bnProOutletThresholdOutletIndex               Unsigned32,
    bnProOutletThresholdCurrentLowAlarm           Integer32,
    bnProOutletThresholdCurrentHighAlarm          Integer32,
    bnProOutletThresholdCurrentLowWarning         Integer32,
    bnProOutletThresholdCurrentHighWarning        Integer32,
    bnProOutletThresholdCurrentHysteresis         Integer32,
    bnProOutletThresholdPowerFactorLowAlarm       Integer32,
    bnProOutletThresholdPowerFactorHighAlarm      Integer32,
    bnProOutletThresholdPowerFactorLowWarning     Integer32,
    bnProOutletThresholdPowerFactorHighWarning    Integer32,
    bnProOutletThresholdPowerFactorHysteresis     Integer32
}

bnProOutletThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletThresholdEntry 1 }

bnProOutletThresholdOutletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the outlet this row belongs to, mirroring the INDEX value so the owning outlet is visible as a readable column."
    ::= { bnProOutletThresholdEntry 2 }

bnProOutletThresholdCurrentLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for outlet current."
    ::= { bnProOutletThresholdEntry 3 }

bnProOutletThresholdCurrentHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for outlet current."
    ::= { bnProOutletThresholdEntry 4 }

bnProOutletThresholdCurrentLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for outlet current."
    ::= { bnProOutletThresholdEntry 5 }

bnProOutletThresholdCurrentHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for outlet current."
    ::= { bnProOutletThresholdEntry 6 }

bnProOutletThresholdCurrentHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for outlet current thresholds."
    ::= { bnProOutletThresholdEntry 7 }

bnProOutletThresholdPowerFactorLowAlarm OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for outlet power factor."
    ::= { bnProOutletThresholdEntry 8 }

bnProOutletThresholdPowerFactorHighAlarm OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for outlet power factor."
    ::= { bnProOutletThresholdEntry 9 }

bnProOutletThresholdPowerFactorLowWarning OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for outlet power factor."
    ::= { bnProOutletThresholdEntry 10 }

bnProOutletThresholdPowerFactorHighWarning OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for outlet power factor."
    ::= { bnProOutletThresholdEntry 11 }

bnProOutletThresholdPowerFactorHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for outlet power factor thresholds."
    ::= { bnProOutletThresholdEntry 12 }

bnProOutletControlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletControlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Control table for outlet switching commands. One row represents the writable control command settings of one outlet."
    ::= { bnProOutlet 3 }

bnProOutletControlEntry OBJECT-TYPE
    SYNTAX      BnProOutletControlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletIndex }
    ::= { bnProOutletControlTable 1 }

BnProOutletControlEntry ::= SEQUENCE {
    bnProOutletControlPduLabel         DisplayString,
    bnProOutletControlOutletIndex      Unsigned32,
    bnProOutletControlAction           BnProOutletControlAction,
    bnProOutletPowerCycleTime          Unsigned32,
    bnProOutletIdentify                BnProOutletIdentifyCommand
}

bnProOutletControlPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletControlEntry 1 }

bnProOutletControlOutletIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the outlet this row belongs to, mirroring the INDEX value so the owning outlet is visible as a readable column."
    ::= { bnProOutletControlEntry 2 }

bnProOutletControlAction OBJECT-TYPE
    SYNTAX      BnProOutletControlAction
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Requested control action for the outlet. Use powerCycle together with bnProOutletPowerCycleTime. If bnProOutletMode is unsupported, control actions are not supported for this outlet."
    ::= { bnProOutletControlEntry 3 }

bnProOutletPowerCycleTime OBJECT-TYPE
    SYNTAX      BnProSeconds
    UNITS       "seconds"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Power-cycle duration for the outlet in seconds. Value 0 means immediate off/on without extra delay. Used only when bnProOutletControlAction is powerCycle and bnProOutletMode is not unsupported."
    DEFVAL      { 0 }
    ::= { bnProOutletControlEntry 4 }

bnProOutletIdentify OBJECT-TYPE
    SYNTAX      BnProOutletIdentifyCommand
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Requested identify command for the outlet. Valid only when bnProOutletIdentifySupported is true. Use on to enable the identification indication and off to disable it."
    ::= { bnProOutletControlEntry 5 }

-- RCM table
bnProRcmMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProRcmEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of residual current monitoring entries. RCM is a peer branch."
    ::= { bnProRcm 1 }

bnProRcmEntry OBJECT-TYPE
    SYNTAX      BnProRcmEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProRcmIndex }
    ::= { bnProRcmMeasurementsTable 1 }

BnProRcmEntry ::= SEQUENCE {
    bnProRcmPduLabel       DisplayString,
    bnProRcmIndex          Unsigned32,
    bnProRcmName           DisplayString,
    bnProRcmFriendlyName   DisplayString,
    bnProRcmAcCurrent      Integer32,
    bnProRcmAcCurrentMax   Integer32,
    bnProRcmDcCurrent      Integer32,
    bnProRcmDcCurrentMax   Integer32,
    bnProRcmStatus         BnProStatus
}

bnProRcmPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProRcmEntry 1 }

bnProRcmIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "RCM index within one PDU."
    ::= { bnProRcmEntry 2 }

bnProRcmName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable RCM name."
    ::= { bnProRcmEntry 3 }

bnProRcmFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this RCM entry."
    ::= { bnProRcmEntry 4 }


bnProRcmAcCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "AC residual current."
    ::= { bnProRcmEntry 5 }

bnProRcmAcCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum AC residual current."
    ::= { bnProRcmEntry 6 }

bnProRcmDcCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "DC residual current."
    ::= { bnProRcmEntry 7 }

bnProRcmDcCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum DC residual current."
    ::= { bnProRcmEntry 8 }

bnProRcmStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "RCM status."
    ::= { bnProRcmEntry 9 }


bnProRcmThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProRcmThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for residual current monitoring. One row represents all supported threshold parameters of one RCM."
    ::= { bnProRcm 2 }

bnProRcmThresholdEntry OBJECT-TYPE
    SYNTAX      BnProRcmThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProRcmIndex }
    ::= { bnProRcmThresholdTable 1 }

BnProRcmThresholdEntry ::= SEQUENCE {
    bnProRcmThresholdPduLabel            DisplayString,
    bnProRcmThresholdRcmIndex            Unsigned32,
    bnProRcmThresholdAcLowAlarm          Integer32,
    bnProRcmThresholdAcHighAlarm         Integer32,
    bnProRcmThresholdAcLowWarning        Integer32,
    bnProRcmThresholdAcHighWarning       Integer32,
    bnProRcmThresholdAcHysteresis        Integer32,
    bnProRcmThresholdDcLowAlarm          Integer32,
    bnProRcmThresholdDcHighAlarm         Integer32,
    bnProRcmThresholdDcLowWarning        Integer32,
    bnProRcmThresholdDcHighWarning       Integer32,
    bnProRcmThresholdDcHysteresis        Integer32
}

bnProRcmThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProRcmThresholdEntry 1 }

bnProRcmThresholdRcmIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the RCM this row belongs to, mirroring the INDEX value so the owning RCM is visible as a readable column."
    ::= { bnProRcmThresholdEntry 2 }

bnProRcmThresholdAcLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for RCM AC residual current."
    ::= { bnProRcmThresholdEntry 3 }

bnProRcmThresholdAcHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for RCM AC residual current."
    ::= { bnProRcmThresholdEntry 4 }

bnProRcmThresholdAcLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for RCM AC residual current."
    ::= { bnProRcmThresholdEntry 5 }

bnProRcmThresholdAcHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for RCM AC residual current."
    ::= { bnProRcmThresholdEntry 6 }

bnProRcmThresholdAcHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for RCM AC residual current thresholds."
    ::= { bnProRcmThresholdEntry 7 }

bnProRcmThresholdDcLowAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low alarm threshold for RCM DC residual current."
    ::= { bnProRcmThresholdEntry 8 }

bnProRcmThresholdDcHighAlarm OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High alarm threshold for RCM DC residual current."
    ::= { bnProRcmThresholdEntry 9 }

bnProRcmThresholdDcLowWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Low warning threshold for RCM DC residual current."
    ::= { bnProRcmThresholdEntry 10 }

bnProRcmThresholdDcHighWarning OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "High warning threshold for RCM DC residual current."
    ::= { bnProRcmThresholdEntry 11 }

bnProRcmThresholdDcHysteresis OBJECT-TYPE
    SYNTAX      BnProHysteresisPerMille
    UNITS       "%"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Hysteresis for RCM DC residual current thresholds."
    ::= { bnProRcmThresholdEntry 12 }

-- RCM self-test table
bnProRcmSelfTestTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProRcmSelfTestEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Per-RCM self-test control and last-result table."
    ::= { bnProRcm 3 }

bnProRcmSelfTestEntry OBJECT-TYPE
    SYNTAX      BnProRcmSelfTestEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Self-test entry for a single RCM."
    INDEX       { bnProDeviceIndex, bnProRcmIndex }
    ::= { bnProRcmSelfTestTable 1 }

BnProRcmSelfTestEntry ::= SEQUENCE {
    bnProRcmSelfTestPduLabel     DisplayString,
    bnProRcmSelfTestRcmIndex     Unsigned32,
    bnProRcmSelfTestCommand      BnProRcmSelfTestCommand,
    bnProRcmSelfTestResult       BnProRcmSelfTestResult,
    bnProRcmSelfTestResultAc     BnProRcmSelfTestResult,
    bnProRcmSelfTestResultDc     BnProRcmSelfTestResult,
    bnProRcmSelfTestTimestamp    DateAndTime,
    bnProRcmSelfTestResultString DisplayString
}

bnProRcmSelfTestPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProRcmSelfTestEntry 1 }

bnProRcmSelfTestRcmIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the RCM this row belongs to, mirroring the INDEX value so the owning RCM is visible as a readable column."
    ::= { bnProRcmSelfTestEntry 2 }

bnProRcmSelfTestCommand OBJECT-TYPE
    SYNTAX      BnProRcmSelfTestCommand
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write to trigger an RCM self-test. The value selects which notifications
                 the self-test emits."
    ::= { bnProRcmSelfTestEntry 3 }

bnProRcmSelfTestResult OBJECT-TYPE
    SYNTAX      BnProRcmSelfTestResult
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Overall result of the most recent RCM self-test."
    ::= { bnProRcmSelfTestEntry 4 }

bnProRcmSelfTestResultAc OBJECT-TYPE
    SYNTAX      BnProRcmSelfTestResult
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "AC-path result of the most recent RCM self-test."
    ::= { bnProRcmSelfTestEntry 5 }

bnProRcmSelfTestResultDc OBJECT-TYPE
    SYNTAX      BnProRcmSelfTestResult
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "DC-path result of the most recent RCM self-test."
    ::= { bnProRcmSelfTestEntry 6 }

bnProRcmSelfTestTimestamp OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Timestamp of the most recent RCM self-test."
    ::= { bnProRcmSelfTestEntry 7 }

bnProRcmSelfTestResultString OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..255))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable result of the most recent RCM self-test."
    ::= { bnProRcmSelfTestEntry 8 }

-- SPD table
bnProSpdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProSpdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of surge protection device entries."
    ::= { bnProSpd 1 }

bnProSpdEntry OBJECT-TYPE
    SYNTAX      BnProSpdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProSpdIndex }
    ::= { bnProSpdTable 1 }

BnProSpdEntry ::= SEQUENCE {
    bnProSpdPduLabel     DisplayString,
    bnProSpdIndex       Unsigned32,
    bnProSpdName        DisplayString,
    bnProSpdFriendlyName DisplayString,
    bnProSpdStatus      BnProStatus
}

bnProSpdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProSpdEntry 1 }

bnProSpdIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "SPD index within one PDU."
    ::= { bnProSpdEntry 2 }

bnProSpdName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable SPD name."
    ::= { bnProSpdEntry 3 }

bnProSpdFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this SPD entry."
    ::= { bnProSpdEntry 4 }

bnProSpdStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "SPD status."
    ::= { bnProSpdEntry 5 }


-- External sensor table
bnProExternalSensorMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProExternalSensorEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of external sensors such as temperature and humidity sensors."
    ::= { bnProExternalSensor 1 }

bnProExternalSensorEntry OBJECT-TYPE
    SYNTAX      BnProExternalSensorEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProExternalSensorIndex }
    ::= { bnProExternalSensorMeasurementsTable 1 }

BnProExternalSensorEntry ::= SEQUENCE {
    bnProExternalSensorPduLabel     DisplayString,
    bnProExternalSensorIndex        Unsigned32,
    bnProExternalSensorName         DisplayString,
    bnProExternalSensorFriendlyName DisplayString,
    bnProExternalSensorTemperature  Integer32,
    bnProExternalSensorHumidity     Integer32,
    bnProExternalSensorStatus       BnProStatus
}

bnProExternalSensorPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProExternalSensorEntry 1 }

bnProExternalSensorIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "External sensor index within one PDU."
    ::= { bnProExternalSensorEntry 2 }

bnProExternalSensorName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable external sensor name."
    ::= { bnProExternalSensorEntry 3 }

bnProExternalSensorFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this external sensor."
    ::= { bnProExternalSensorEntry 4 }

bnProExternalSensorTemperature OBJECT-TYPE
    SYNTAX      BnProTemperatureTenthCelsius
    UNITS       "°C"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Temperature value. Example: 235 means 23.5 degrees Celsius."
    ::= { bnProExternalSensorEntry 5 }

bnProExternalSensorHumidity OBJECT-TYPE
    SYNTAX      BnProPercentTenth
    UNITS       "%"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Relative humidity. Example: 455 means 45.5 percent."
    ::= { bnProExternalSensorEntry 6 }

bnProExternalSensorStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "External sensor status."
    ::= { bnProExternalSensorEntry 7 }


bnProExternalSensorThresholdTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProExternalSensorThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Threshold table for external sensor temperature offset. One row represents the temperature offset setting of one external sensor."
    ::= { bnProExternalSensor 2 }

bnProExternalSensorThresholdEntry OBJECT-TYPE
    SYNTAX      BnProExternalSensorThresholdEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProExternalSensorIndex }
    ::= { bnProExternalSensorThresholdTable 1 }

BnProExternalSensorThresholdEntry ::= SEQUENCE {
    bnProExternalSensorThresholdPduLabel          DisplayString,
    bnProExternalSensorThresholdSensorIndex       Unsigned32,
    bnProExternalSensorThresholdTemperatureOffset Integer32
}

bnProExternalSensorThresholdPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProExternalSensorThresholdEntry 1 }

bnProExternalSensorThresholdSensorIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the external sensor this row belongs to, mirroring the INDEX value so the owning external sensor is visible as a readable column."
    ::= { bnProExternalSensorThresholdEntry 2 }

bnProExternalSensorThresholdTemperatureOffset OBJECT-TYPE
    SYNTAX      BnProTemperatureTenthCelsius
    UNITS       "0.1 degree Celsius"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Temperature offset applied to the external sensor reading."
    ::= { bnProExternalSensorThresholdEntry 3 }

-- GPIO table
bnProGpioTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProGpioEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of GPIO entries."
    ::= { bnProGpio 1 }

bnProGpioEntry OBJECT-TYPE
    SYNTAX      BnProGpioEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProGpioIndex }
    ::= { bnProGpioTable 1 }

BnProGpioEntry ::= SEQUENCE {
    bnProGpioPduLabel     DisplayString,
    bnProGpioIndex       Unsigned32,
    bnProGpioName        DisplayString,
    bnProGpioFriendlyName DisplayString,
    bnProGpioMode        BnProGpioMode,
    bnProGpioSwitch      BnProGpioSwitchState,
    bnProGpioStatus      BnProGpioStatus
}

bnProGpioPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProGpioEntry 1 }

bnProGpioIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "GPIO index within one PDU."
    ::= { bnProGpioEntry 2 }

bnProGpioName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable GPIO name."
    ::= { bnProGpioEntry 3 }

bnProGpioFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this GPIO."
    ::= { bnProGpioEntry 4 }

bnProGpioMode OBJECT-TYPE
    SYNTAX      BnProGpioMode
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "GPIO mode."
    ::= { bnProGpioEntry 5 }

bnProGpioSwitch OBJECT-TYPE
    SYNTAX      BnProGpioSwitchState
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "GPIO output switch command. Valid for output-capable GPIOs."
    ::= { bnProGpioEntry 6 }

bnProGpioStatus OBJECT-TYPE
    SYNTAX      BnProGpioStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "GPIO runtime status."
    ::= { bnProGpioEntry 7 }


-- Outlet group status table
bnProOutletGroupMeasurementsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletGroupEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of outlet-group status and measurements."
    ::= { bnProOutletGroup 1 }

bnProOutletGroupEntry OBJECT-TYPE
    SYNTAX      BnProOutletGroupEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletGroupIndex }
    ::= { bnProOutletGroupMeasurementsTable 1 }

BnProOutletGroupEntry ::= SEQUENCE {
    bnProOutletGroupPduLabel              DisplayString,
    bnProOutletGroupIndex                 Unsigned32,
    bnProOutletGroupName                  DisplayString,
    bnProOutletGroupFriendlyName          DisplayString,
    bnProOutletGroupControlState          BnProOutletGroupControlState,
    bnProOutletGroupEffectiveState        BnProOutletGroupEffectiveState,
    bnProOutletGroupOutletCount           Unsigned32,
    bnProOutletGroupCurrent               Integer32,
    bnProOutletGroupCurrentMax            Integer32,
    bnProOutletGroupPowerActive           Integer32,
    bnProOutletGroupPowerActiveMax        Integer32,
    bnProOutletGroupPowerFactor           Integer32,
    bnProOutletGroupEnergyActive          Counter64,
    bnProOutletGroupEnergyActive2         Counter64,
    bnProOutletGroupStatus                BnProStatus
}

bnProOutletGroupPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletGroupEntry 1 }

bnProOutletGroupIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet group index within one PDU."
    ::= { bnProOutletGroupEntry 2 }

bnProOutletGroupName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..64))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Human-readable outlet group name."
    ::= { bnProOutletGroupEntry 3 }

bnProOutletGroupFriendlyName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "User-configurable friendly name of this outlet group."
    ::= { bnProOutletGroupEntry 4 }

bnProOutletGroupControlState OBJECT-TYPE
    SYNTAX      BnProOutletGroupControlState
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Requested or configured control state for the outlet group."
    ::= { bnProOutletGroupEntry 5 }

bnProOutletGroupEffectiveState OBJECT-TYPE
    SYNTAX      BnProOutletGroupEffectiveState
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Effective aggregated runtime state of the outlet group. Returns unsupported if outlet-group switching is not supported."
    ::= { bnProOutletGroupEntry 6 }

bnProOutletGroupOutletCount OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of outlets in this outlet group."
    ::= { bnProOutletGroupEntry 7 }

bnProOutletGroupCurrent OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet-group current."
    ::= { bnProOutletGroupEntry 8 }

bnProOutletGroupCurrentMax OBJECT-TYPE
    SYNTAX      BnProCurrentMilliAmpere
    UNITS       "mA"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum outlet-group current."
    ::= { bnProOutletGroupEntry 9 }

bnProOutletGroupPowerActive OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet-group active power."
    ::= { bnProOutletGroupEntry 10 }

bnProOutletGroupPowerActiveMax OBJECT-TYPE
    SYNTAX      BnProWatt
    UNITS       "W"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Maximum outlet-group active power."
    ::= { bnProOutletGroupEntry 11 }

bnProOutletGroupPowerFactor OBJECT-TYPE
    SYNTAX      BnProPowerFactorMilli
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet-group power factor. Example: 1000 means 1.000."
    ::= { bnProOutletGroupEntry 12 }

bnProOutletGroupEnergyActive OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet-group active energy in Wh. For kWh, divide by 1000."
    ::= { bnProOutletGroupEntry 13 }

bnProOutletGroupEnergyActive2 OBJECT-TYPE
    SYNTAX      BnProWattHour
    UNITS       "Wh"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet-group second active energy counter in Wh. For kWh, divide by 1000."
    ::= { bnProOutletGroupEntry 14 }

bnProOutletGroupStatus OBJECT-TYPE
    SYNTAX      BnProStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Outlet group status."
    ::= { bnProOutletGroupEntry 15 }


bnProOutletGroupResetTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletGroupResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Reset control table for outlet-group measurements."
    ::= { bnProOutletGroup 3 }

bnProOutletGroupResetEntry OBJECT-TYPE
    SYNTAX      BnProOutletGroupResetEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletGroupIndex }
    ::= { bnProOutletGroupResetTable 1 }

BnProOutletGroupResetEntry ::= SEQUENCE {
    bnProOutletGroupResetPduLabel        DisplayString,
    bnProOutletGroupResetOutletGroupIndex Unsigned32,
    bnProOutletGroupCurrentMaxReset      INTEGER,
    bnProOutletGroupPowerActiveMaxReset  INTEGER,
    bnProOutletGroupEnergyActive2Reset   INTEGER
}

bnProOutletGroupResetPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletGroupResetEntry 1 }

bnProOutletGroupResetOutletGroupIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the outlet group this row belongs to, mirroring the INDEX value so the owning outlet group is visible as a readable column."
    ::= { bnProOutletGroupResetEntry 2 }

bnProOutletGroupCurrentMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum outlet-group current value."
    ::= { bnProOutletGroupResetEntry 3 }

bnProOutletGroupPowerActiveMaxReset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the maximum outlet-group active power value."
    ::= { bnProOutletGroupResetEntry 4 }

bnProOutletGroupEnergyActive2Reset OBJECT-TYPE
    SYNTAX      INTEGER { reset(1) }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Write reset(1) to clear the second outlet-group active energy counter."
    ::= { bnProOutletGroupResetEntry 5 }

bnProOutletGroupControlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF BnProOutletGroupControlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Control table for outlet-group switching commands. One row represents the writable control command settings of one outlet group."
    ::= { bnProOutletGroup 2 }

bnProOutletGroupControlEntry OBJECT-TYPE
    SYNTAX      BnProOutletGroupControlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    INDEX       { bnProDeviceIndex, bnProOutletGroupIndex }
    ::= { bnProOutletGroupControlTable 1 }

BnProOutletGroupControlEntry ::= SEQUENCE {
    bnProOutletGroupControlPduLabel    DisplayString,
    bnProOutletGroupControlOutletGroupIndex Unsigned32,
    bnProOutletGroupControlAction      BnProOutletControlAction,
    bnProOutletGroupPowerCycleTime     Unsigned32,
    bnProOutletGroupIdentify           BnProOutletIdentifyCommand
}

bnProOutletGroupControlPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Label of the PDU this row belongs to: the PDU's configured name, defaulting to its hostname when unset. Identifies the owning PDU without a lookup in the device table; the PDU's numeric index remains the first INDEX sub-identifier of the row."
    ::= { bnProOutletGroupControlEntry 1 }

bnProOutletGroupControlOutletGroupIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Index of the outlet group this row belongs to, mirroring the INDEX value so the owning outlet group is visible as a readable column."
    ::= { bnProOutletGroupControlEntry 2 }

bnProOutletGroupControlAction OBJECT-TYPE
    SYNTAX      BnProOutletControlAction
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Requested control action for the outlet group. Use powerCycle together with bnProOutletGroupPowerCycleTime."
    ::= { bnProOutletGroupControlEntry 3 }

bnProOutletGroupPowerCycleTime OBJECT-TYPE
    SYNTAX      BnProSeconds
    UNITS       "seconds"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Power-cycle duration for the outlet group in seconds. Value 0 means immediate off/on without extra delay. Used only when bnProOutletGroupControlAction is powerCycle and switching is supported."
    DEFVAL      { 0 }
    ::= { bnProOutletGroupControlEntry 4 }

bnProOutletGroupIdentify OBJECT-TYPE
    SYNTAX      BnProOutletIdentifyCommand
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Requested identify command for the outlet group. Use on to enable the identification indication and off to disable it."
    ::= { bnProOutletGroupControlEntry 5 }

bnProTrapPduIndex OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "PDU index related to the notification. Zero if not applicable."
    ::= { bnProNotificationObjects 1 }

bnProTrapElementType OBJECT-TYPE
    SYNTAX      BnProTrapElementType
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Element type related to the notification."
    ::= { bnProNotificationObjects 2 }

bnProTrapElementIndex OBJECT-TYPE
    SYNTAX      Unsigned32
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Element index related to the notification. Zero if not applicable."
    ::= { bnProNotificationObjects 3 }

bnProTrapText OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..255))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Human-readable notification text."
    ::= { bnProNotificationObjects 4 }

bnProTrapPduLabel OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Label of the PDU related to the notification. Empty if not applicable."
    ::= { bnProNotificationObjects 5 }

bnProTrapElementName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..128))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Name of the element related to the notification. Empty if not applicable."
    ::= { bnProNotificationObjects 6 }

bnProTrapValue OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Current measured value related to the notification."
    ::= { bnProNotificationObjects 7 }

bnProTrapLimit OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Threshold value crossed to trigger the notification, formatted as a decimal string in the unit given by bnProTrapUnit. Empty if not applicable, for example on a device status change or an Okay measurement report with no single crossed threshold."
    ::= { bnProNotificationObjects 8 }

bnProTrapUnit OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..8))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION "Unit of bnProTrapValue and bnProTrapLimit, for example mA or V. Empty if not applicable."
    ::= { bnProNotificationObjects 9 }

bnProStatusOkNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to ok."
    ::= { bnProNotifications 1 }

bnProStatusWarningNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to warning."
    ::= { bnProNotifications 2 }

bnProStatusAlarmNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to alarm."
    ::= { bnProNotifications 3 }

bnProLowerWarningNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO lower warning threshold reached."
    ::= { bnProNotifications 4 }

bnProUpperWarningNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO upper warning threshold reached."
    ::= { bnProNotifications 5 }

bnProLowerAlarmNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO lower alarm threshold reached."
    ::= { bnProNotifications 6 }

bnProUpperAlarmNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO upper alarm threshold reached."
    ::= { bnProNotifications 7 }

bnProReconfigAgentNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO agent configuration changed."
    ::= { bnProNotifications 98 }

bnProShutdownAgentNotification NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO agent shutdown event."
    ::= { bnProNotifications 99 }

bnProStatusOkTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to ok. SNMPv1 compatibility alias for bnProStatusOkNotification. NMS receiving both this trap and the v2 notification from the same event should deduplicate on OID."
    ::= { bnProTraps 1 }

bnProStatusWarningTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to warning. SNMPv1 compatibility alias for bnProStatusWarningNotification."
    ::= { bnProTraps 2 }

bnProStatusAlarmTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO status changed to alarm. SNMPv1 compatibility alias for bnProStatusAlarmNotification."
    ::= { bnProTraps 3 }

bnProLowerWarningTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO lower warning threshold reached. SNMPv1 compatibility alias for bnProLowerWarningNotification."
    ::= { bnProTraps 4 }

bnProUpperWarningTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO upper warning threshold reached. SNMPv1 compatibility alias for bnProUpperWarningNotification."
    ::= { bnProTraps 5 }

bnProLowerAlarmTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO lower alarm threshold reached. SNMPv1 compatibility alias for bnProLowerAlarmNotification."
    ::= { bnProTraps 6 }

bnProUpperAlarmTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO upper alarm threshold reached. SNMPv1 compatibility alias for bnProUpperAlarmNotification."
    ::= { bnProTraps 7 }

bnProReconfigAgentTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO agent configuration changed. SNMPv1 compatibility alias for bnProReconfigAgentNotification."
    ::= { bnProTraps 98 }

bnProShutdownAgentTrap NOTIFICATION-TYPE
    OBJECTS { bnProTrapPduIndex, bnProTrapElementType, bnProTrapElementIndex, bnProTrapPduLabel, bnProTrapElementName, bnProTrapValue, bnProTrapLimit, bnProTrapUnit, bnProTrapText }
    STATUS  current
    DESCRIPTION "BN-PRO agent shutdown event. SNMPv1 compatibility alias for bnProShutdownAgentNotification."
    ::= { bnProTraps 99 }


bnProCompliances OBJECT IDENTIFIER ::= { bnProConformance 1 }
bnProGroups      OBJECT IDENTIFIER ::= { bnProConformance 2 }

bnProObjectGroup OBJECT-GROUP
    OBJECTS {
        bnProClusterPduLabel, bnProClusterPduMode,
        bnProDeviceName, bnProDeviceModelConfig, bnProDeviceItemNumber, bnProInfoTotalOperatingHours,
        bnProDeviceEth1MacAddress, bnProDeviceEth2MacAddress, bnProDeviceBr0MacAddress,
        bnProDeviceStatus,
        bnProDeviceCurrent, bnProDevicePowerActive,
        bnProInletCurrent, bnProPhaseCurrent, bnProOutletCurrent,
        bnProRcmAcCurrent, bnProExternalSensorStatus, bnProExternalSensorTemperature,
        bnProInfoAccumulatedStatusReset
    }
    STATUS current
    DESCRIPTION "Core BN-PRO object group for review."
    ::= { bnProGroups 1 }

bnProTrapObjectGroup OBJECT-GROUP
    OBJECTS {
        bnProTrapPduIndex,
        bnProTrapElementType,
        bnProTrapElementIndex,
        bnProTrapPduLabel,
        bnProTrapElementName,
        bnProTrapValue,
        bnProTrapLimit,
        bnProTrapUnit,
        bnProTrapText
    }
    STATUS current
    DESCRIPTION "Shared varbind objects used by BN-PRO notifications (SNMPv2c/v3) and trap compatibility events (SNMPv1)."
    ::= { bnProGroups 2 }

bnProNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS {
        bnProStatusOkNotification,
        bnProStatusWarningNotification,
        bnProStatusAlarmNotification,
        bnProLowerWarningNotification,
        bnProUpperWarningNotification,
        bnProLowerAlarmNotification,
        bnProUpperAlarmNotification,
        bnProReconfigAgentNotification,
        bnProShutdownAgentNotification,

        bnProStatusOkTrap,
        bnProStatusWarningTrap,
        bnProStatusAlarmTrap,
        bnProLowerWarningTrap,
        bnProUpperWarningTrap,
        bnProLowerAlarmTrap,
        bnProUpperAlarmTrap,
        bnProReconfigAgentTrap,
        bnProShutdownAgentTrap
    }
    STATUS current
    DESCRIPTION "BN-PRO notification group."
    ::= { bnProGroups 3 }

bnProCompliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION "BN-PRO compliance statement for review draft."
    MODULE
        MANDATORY-GROUPS { bnProObjectGroup, bnProTrapObjectGroup, bnProNotificationGroup }
    ::= { bnProCompliances 1 }

END
