PDU-MIB DEFINITIONS ::= BEGIN

IMPORTS
	MODULE-IDENTITY,OBJECT-TYPE,enterprises	FROM SNMPv2-SMI
	Integer32, NOTIFICATION-TYPE, IpAddress	FROM SNMPv2-SMI
	DisplayString,DateAndTime,MacAddress  		FROM SNMPv2-TC
	MODULE-COMPLIANCE, OBJECT-GROUP  		FROM SNMPv2-CONF;

aphel MODULE-IDENTITY
    LAST-UPDATED "200702140000Z"
    ORGANIZATION "Aphel Ltd"
    CONTACT-INFO "
                  Author:	Aphel Ltd
                  postal:    	Aphel Ltd
                               Wayside Business Park
                               Wilsons Lane
                               Coventry
                               West Midlands
                               CV6 6NY
                               United Kingdom
                  email:      	info@aphel.co.uk
                  phone:      	+44 (0) 870 754 1880
                 "
    DESCRIPTION  "This mib describes the SNMP functions of the
                  Power Distribution Unit by Aphel Ltd."
		::= { enterprises 13742 }

pdu	OBJECT IDENTIFIER ::= { aphel 2 }

board		OBJECT IDENTIFIER ::= { pdu 1 }
traps		OBJECT IDENTIFIER ::= { pdu 2 }

info		OBJECT IDENTIFIER ::= { board 1 }
outlets		OBJECT IDENTIFIER ::= { board 2 }
sensors		OBJECT IDENTIFIER ::= { board 3 }

-- the info group

firmwareVersion	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The current firmware version"
		::= { info 1 }

serialNumber	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The serial number."
		::= { info 2 }

ipAddress		OBJECT-TYPE
			SYNTAX		IpAddress
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The current IP address. A value of 0.0.0.0 indicates an error
				or an unset option."
		::= { info 3 }

netmask		OBJECT-TYPE
			SYNTAX		IpAddress
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The current Netmask. A value of 0.0.0.0 indicates an error
				or an unset option."

		::= { info 4 }

gateway		OBJECT-TYPE
			SYNTAX		IpAddress
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The current Gateway. A value of 0.0.0.0 indicates an error
				or an unset option."
		::= { info 5 }

mac		OBJECT-TYPE
			SYNTAX		MacAddress
			MAX-ACCESS	read-only
			STATUS		current
		DESCRIPTION
				"The current MAC address."
		::= { info 6 }

hardwareRev	OBJECT-TYPE
			SYNTAX		Integer32(0..255)
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The hardware revision number."
		::= { info 7 }

userName	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The login of a user."
		::= { info 10 }

objectName     OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The model type of the device"
		::= { info 12 }

objectInstance	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The device name"
		::= { info 13}

targetUser	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The user record being operated on"
		::= { info 14}

groupName	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The group record being operated on"
		::= { info 15 }

imageVersion	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The version of the Upgrade image"
		::= { info 18 }		   

status		OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The success status of an operation"
		::= { info 19 }		   

outletName	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The power outlet being operated on"
		::= { info 20 }

outletState	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The state of a power outlet"
		::= { info 22 }

sensorNumber	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The sensor number."
		::= { info 23 }

sensorEvent	OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"The sensor event."
		::= { info 24 }


-- the outlets group

-- Implementation for managing the outlets

outletCount		OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The number of outlets (regardless of
				their current state) present on this pdu."
		::= { outlets 1 }


-- the outlets table

-- The outlets table contains information on the pdu's outlets.
-- It further provides functions for managing them.

outletTable		OBJECT-TYPE
			SYNTAX		SEQUENCE OF OutletEntryStruct
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"A list of outlet entries. The number of
				entries is given by the value of ifNumber."
		::= { outlets 2 }

outletEntry		OBJECT-TYPE
			SYNTAX		OutletEntryStruct
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"An outlet entry containing objects at the
				for a particular outlet."
			INDEX		{ outletIndex }
		::= { outletTable 1 }

OutletEntryStruct ::=
	SEQUENCE	{
			outletIndex				INTEGER,
			outletLabel				DisplayString,
			outletOperationalState			INTEGER,
			outletSendorNumberRMSCurrent		INTEGER,
			outletSendorNumberRMSPhase		INTEGER,
			outletSendorNumberMaxRMSCurrent		INTEGER,
			outletSendorNumberTrueRMSPower		INTEGER,
			outletSendorNumberApparentRMSPower	INTEGER,
			outletSendorNumberMaxTrueRMSPower	INTEGER,
			outletSendorNumberAverageRealRMSPower	INTEGER,
			outletSendorNumberRMSVoltage		INTEGER,
			outletSendorNumberFrequency		INTEGER
			}

outletIndex		OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for each outlet. Its value
				ranges between 1 and the value of outletNumber."
		::= { outletEntry 1 }

outletLabel		OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A textual string containing information
				about the outlet."
		::= { outletEntry 2 }

outletOperationalState	OBJECT-TYPE
			SYNTAX		INTEGER { error(-1), off(0), on(1), cycling(2) }
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"A value for each outlet which describes the
				operational state of the outlet. It is also
				used to set the operational state of the outlet"
		::= { outletEntry 3 }

outletSensorNumberRMSCurrent	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the RMS current sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 4 }

outletSensorNumberRMSPhase	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the RMS phase sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 5 }

outletSensorNumberMaxRMSCurrent	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the max. RMS current sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 6 }

outletSensorNumberTrueRMSPower	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the true RMS power sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 7 }


outletSensorNumberApparentRMSPower	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the apparent RMS power sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 8 }

outletSensorNumberMaxTrueRMSPower	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the max. true RMS power sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 9 }

outletSensorNumberAverageRealRMSPower	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the average real RMS power sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 10 }

outletSensorNumberRMSVoltage	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the RMS voltage sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 11 }

outletSensorNumberFrequency	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the frequency sensor
				attached to the outlet. This is also an index
				into the sensors table sensorTable."
		::= { outletEntry 12 }

-- the sensors group

-- Implementation for managing the sensors

sensorCount		OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The number of sensors (regardless of
				their current state) present on this pdu."
		::= { sensors 1 }


-- the sensors table

-- The sensors table contains information on the sensors atteched to the pdu's outlets.

sensorTable		OBJECT-TYPE
			SYNTAX		SEQUENCE OF SensorEntryStruct
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"A list of sensors of the pdu. The number of
				entries is given by the value of sensorNumber."
		::= { sensors 2 }

sensorEntry		OBJECT-TYPE
			SYNTAX		SensorEntryStruct
			MAX-ACCESS	not-accessible
			STATUS		current
			DESCRIPTION
				"An sensor entry containing objects at the
				for a particular sensor."
			INDEX		{ sensorIndex }
		::= { sensorTable 1 }

SensorEntryStruct ::=
	SEQUENCE	{
			sensorIndex				INTEGER,
			sensorLabel				DisplayString,
			sensorType				INTEGER,
			sensorValue				Opaque,
			sensorUnit				DisplayString,
			sensorState				INTEGER,
			sensorAssociatedOutlet			INTEGER,
			sensorLowerNonCriticalThreshold		Opaque,
			sensorUpperNonCriticalThreshold		Opaque,
			sensorLowerCriticalThreshold		Opaque,
			sensorUpperCriticalThreshold		Opaque,
			sensorLowerNonRecoverableThreshold	Opaque,
			sensorUpperNonRecoverableThreshold	Opaque
			}

sensorIndex		OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for each sensor. Its value
				ranges between 1 and may exceed the value
				of sensorNumber."
		::= { sensorEntry 1 }

sensorLabel		OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A textual string containing information
				about the sensor."
		::= { sensorEntry 2 }

sensorType		OBJECT-TYPE
			SYNTAX		INTEGER	{
						receptacle-rms-current(0),
						receptacle-rms-phase(1),
						receptacle-max-rms-current(2),
						receptacle-true-rms-power(3),
						receptacle-apparent-rms-power(4),
						receptacle-max-true-rms-power(5),
						receptacle-average-real-rms-power(6),
						power-branch-rms-voltage(192),
						power-branch-frequency(193),
						power-branch-temperature(194),
						power-branch-rms-current(195),
                                                environmental-temp-3(197),
                                                environmental-temp-2(198),
                                                environmental-temp-1(199),
                                                environmental-humidity-2(206),
                                                environmental-humidity-1(207),
						unit-circuit-break-0(240),
						unit-circuit-break-1(241),
						unit-rms-current(242),
						unit-max-rms-current(243),
						unit-temp(244),
						unit-true-power(245),
						unit-apparent-power(246),
						unit-rms-voltage(247)
						}
 			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The type of the sensor."
		::= { sensorEntry 3 }

sensorValue		OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"The value the sensor delivers. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned"
		::= { sensorEntry 4 }

sensorUnit		OBJECT-TYPE
			SYNTAX		DisplayString
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A string that containes the unit of the value."
		::= { sensorEntry 5 }

sensorState		OBJECT-TYPE
			SYNTAX		INTEGER	{
						unavailable(-1),
						ok(0),
						below-lower-non-critical(1),
						above-upper-non-critical(2),
						below-lower-critical(3),
						above-upper-critical(4),
						below-lower-non-recoverable(5),
						above-upper-non-recoverable(6)}
 			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"To state of the sensor."
		::= { sensorEntry 6 }

sensorAssociatedOutlet	OBJECT-TYPE
			SYNTAX		INTEGER
			MAX-ACCESS	read-only
			STATUS		current
			DESCRIPTION
				"A unique value for the outlet the sensor
				is associated to, if any. This is also an
				index into the outlets table outletTable.
				An value of 0 indicates no associated outlet."
		::= { sensorEntry 7 }

sensorLowerNonCriticalThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the lower non-critical
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 8 }

sensorUpperNonCriticalThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the upper non-critical
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 9 }

sensorLowerCriticalThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the lower critical
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 10 }

sensorUpperCriticalThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the upper critical
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 11 }

sensorLowerNonRecoverableThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the lower non-recoverable
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 12 }

sensorUpperNonRecoverableThreshold	OBJECT-TYPE
			SYNTAX		Opaque
			MAX-ACCESS	read-write
			STATUS		current
			DESCRIPTION
				"The value for the upper non-recoverable
				threshold of the sensor. This value is
				provided as ASN_OPAQUE_FLOAT type. In case of
				an error or unavailability NaN is returned.
				Setting this value is possible via:
				ASN_INTEGER, ASN_OCTET_STR, ASN_OPAQUE_FLOAT
				or ASN_OPAQUE_DOUBLE."
		::= { sensorEntry 13 }

-- Start the traps 

rebootStarted NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName		
    }
    STATUS	current
    DESCRIPTION
		    "The reboot process has started"
    ::= { traps 1 }

rebootCompleted NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance
    }
    STATUS current
    DESCRIPTION
	"The reboot process is complete"
    ::= { traps 2 }

userLogin NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current	 
    DESCRIPTION
	"A user logged in"
    ::= { traps 3 }

userLogout NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current
    DESCRIPTION
	"A user logged out"
    ::= { traps 4 }

userAuthenticationFailure NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current
    DESCRIPTION
	"A user authentication attempt failed"
    ::= { traps 5 }

userSessionTimeout NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current
    DESCRIPTION	
	"A user timed out from the device"
    ::= { traps 8 }

userAdded NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName, 
	targetUser
    }
    STATUS current
    DESCRIPTION
	"A user was added to the system"
    ::= { traps 11 }

userModified NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	targetUser
    }
    STATUS current		 
    DESCRIPTION
	"A user account was modified"
    ::= { traps 12 }

userDeleted NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	targetUser
    }
    STATUS current
    DESCRIPTION
	"A user was deleted from the system"
    ::= { traps 13 }

groupAdded NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	groupName
    }
    STATUS current
    DESCRIPTION
	"A group was added to the system"
    ::= { traps 14 }


groupModified NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	groupName
    }
    STATUS current		 
    DESCRIPTION
	"A group was modified"
    ::= { traps 15 }


groupDeleted NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	groupName
    }
    STATUS current
    DESCRIPTION
	"A group was deleted from the system"
    ::= { traps 16 }

deviceUpdateStarted NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress,
	imageVersion
    }
    STATUS current
    DESCRIPTION
	"The device update has started"
    ::= { traps 20 }

userBlocked NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current	 
    DESCRIPTION
	"A blocked user tried to log in"
    ::= { traps 22 }

powerControl NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress,
	outletName,
        outletState
    }
    STATUS current	 
    DESCRIPTION
	"An outlet has been switched"
    ::= { traps 23 }

userPasswordChanged NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName, 
	targetUser,
	ipAddress
    }
    STATUS current
    DESCRIPTION
	"A user password was changed" 
    ::= { traps 24 }

powerSensors NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	sensorNumber,
        sensorEvent
    }
    STATUS current	 
    DESCRIPTION
	"An sensor event has been triggered"
    ::= { traps 27 }

passwordSettingsChanged NOTIFICATION-TYPE
     OBJECTS {
       objectName,
       objectInstance,
       userName,
       status
     }
     STATUS current
     DESCRIPTION
         " Strong password settings changed "
     ::= { traps 28 }


-- Start new event to support RP products

firmwareFileDiscarded NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName
    }
    STATUS current
    DESCRIPTION	
	"A firmware file discarded "
    ::= { traps 36 }

firmwareValidationFailed NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName
    }
    STATUS current
    DESCRIPTION	
	"A firmware validation failed "
    ::= { traps 38 }

securityViolation NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName,
	ipAddress
    }
    STATUS current
    DESCRIPTION
        "Security violation."
    ::= { traps 39 }

deviceUpdateFailed NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName
    }
    STATUS current
    DESCRIPTION
        "Device update has failed."
    ::= { traps 40 }

logFileCleared NOTIFICATION-TYPE
    OBJECTS {
	objectName,
	objectInstance,
	userName
    }
    STATUS current
    DESCRIPTION
        "The log file has been cleared."
    ::= { traps 41 }


END

