note 118946 added to class.snmp
| From: | madjev1990 at gmail dot com | 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