note 118946 added to class.snmp

From: Date: Fri, 04 Mar 2016 10:13:51 +0000
Subject: note 118946 added to class.snmp
Groups: php.notes 
Request: Send a blank email to php-notes+get-205095@lists.php.net to get a copy of this message
Part of my diploma thesis was to create web interface to command device via SNMP. So I create my own level of abstraction over SNMP class: <?php /** * Snmp library which add one level of abstraction to snmp native library. * It adds functionality to work with module PicoIP.With this library you can: * 1.Activate/deactive defined pin; * 2.Get status of all pins. * * When make an instance you should pass to the constructor key word which will * make the library create an object with necessary properetis and access permissions. * * Private properties set some of configurations: * Host is IP address of the divece which we will command. * Two passwords are set for reading and writing. * Version of snmp protocol that we will use is version 1. * * @author Radoslav Madjev * @year 2016 * @version 1.0 beta * * */ class snmp_lib { private $snmpInstance; private $VERSION = SNMP::VERSION_1; private $HOST = '192.168.0.150'; private $passwordRead = '000000000000'; private $passwordWrite = 'private'; private $releys = array(1 => '1.3.6.1.4.1.19865.1.2.1.1.0', 2 => '1.3.6.1.4.1.19865.1.2.1.2.0'); private $allPorts = array('3' => '1.3.6.1.4.1.19865.1.2.1.33.0', '5' => '1.3.6.1.4.1.19865.1.2.2.33.0'); /** * Create instance of SNMP native class, based on actions that we will * perform. * * @param string $action */ public function __construct($action) { if (in_array($action, array('read', 'write'))) { if (strcmp($action, 'read') === 0) { $this->_read(); } else { $this->_write(); } } } /** * Create instance with reading permissions. */ private function _read() { $this->snmpInstance = new SNMP($this->VERSION, $this->HOST, $this->passwordRead); } /** * Create instance with writing permissions. */ private function _write() { $this->snmpInstance = new SNMP($this->VERSION, $this->HOST, $this->passwordWrite); } /** * Close snmp session. * * @return boolean */ public function closeSession() { return $this->snmpInstance->close(); } /** * Set integer 1 as value of defined pin. */ public function activate($relay) { $this->snmpInstance->set($this->releys[$relay], 'i', '1'); } /** * Set integer 0 as value of defined pin. */ public function deactivate($relay) { $this->snmpInstance->set($this->releys[$relay], 'i', '0'); } /** * Get pin status of all ports of the module. * * @return array */ public function getAllPortsStatus() { $allPins = array(); foreach ($this->allPorts as $number => $port) { //get active pins as 8-bit integer of defined port $getbits = $this->snmpInstance->get($port); $bits = str_replace('INTEGER: ', '', $getbits); //get pins status $pinsStatus = $this->_getActivePins($bits); $allPins[$number] = $pinsStatus; } return $allPins; } /** * Make bitwise operation which will determine, * which are active pins. * * @param int $bits * @return array */ private function _getActivePins($bits) { $bitMapping = array( 1 => 1, 2 => 2, 3 => 4, 4 => 8, 5 => 16, 6 => 32, 7 => 64, 8 => 128 ); $pinsStatus = array(); foreach ($bitMapping as $int => $bit) { if (($bits & $bit) == $bit) { $pinsStatus[$int] = true; continue; } $pinsStatus[$int] = false; } return $pinsStatus; } } ?> I have one module that receive SNMP request and send a command to relays. Also these are example scripts that use this lib: Turn on script: <?php require_once 'snmp_lib.php'; $snmp = new snmp_lib('write'); $snmp->activate($getRelayNumber); $snmp->closeSession(); ?> Turn off script: <?php require_once 'snmp_lib.php'; $snmp = new snmp_lib('write'); $snmp->deactivate($getRelayNumber); $snmp->closeSession(); ?> Script that get all ports status: <?php require_once 'snmp_lib.php'; $snmp = new snmp_lib('read'); $getActive = $snmp->getAllPortsStatus(); ?> ---- Server IP: 72.52.91.14 Probable Submitter: 85.187.252.1 ---- Manual Page -- http://php.net/manual/en/class.snmp.php Edit -- https://master.php.net/note/edit/118946 Del: integrated -- https://master.php.net/note/delete/118946/integrated Del: useless -- https://master.php.net/note/delete/118946/useless Del: bad code -- https://master.php.net/note/delete/118946/bad+code Del: spam -- https://master.php.net/note/delete/118946/spam Del: non-english -- https://master.php.net/note/delete/118946/non-english Del: in docs -- https://master.php.net/note/delete/118946/in+docs Del: other reasons-- https://master.php.net/note/delete/118946 Reject -- https://master.php.net/note/reject/118946 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#205095) next »