Skip to content
Permalink
Browse files

Update mercury.class.php

  • Loading branch information...
directman66 committed Sep 17, 2018
1 parent 8d05c40 commit 4f671913377eae4188885c879aa881a992bc38ef
Showing with 175 additions and 0 deletions.
  1. +175 −0 modules/mercury/mercury.class.php
@@ -239,6 +239,16 @@ function admin(&$out) {
$this->getpu($this->id);
}
if ($this->view_mode=='turnon') {
$this->turnon($this->id);
}
if ($this->view_mode=='turnoff') {
$this->turnoff($this->id);
}
if ($this->view_mode=='indata_edit') {
@@ -454,6 +464,170 @@ function editdevices(&$out, $id) {
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
function turnoff($id) {
$rec=SQLSelectOne("SELECT * FROM mercury_devices WHERE ID='$id'");
$address=$rec['IPADDR'];
$service_port=$rec['PORT'];
$device=$rec['HEXADR'];
$cachedVoiceDir = ROOT . 'cms/cached/';
$file = $cachedVoiceDir . 'mercurydebug.txt';
// Открываем файл для получения существующего содержимого
$debug = file_get_contents($file);
$debug .= date('d/m/y H:s'). " запущен запрос на выключение счетчика $id<br>\n";
file_put_contents($file, $debug);
/* Создаём сокет TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
if ($socket === false) {
$debug .= "Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "<br>";
file_put_contents($file, $debug);
} else {
$debug .= "OK.<br>";
file_put_contents($file, $debug);
}
$debug .= "Пытаемся соединиться с '$address' на порту '$service_port'...";
file_put_contents($file, $debug);
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
$debug .= "Не удалось выполнить socket_connect().\nПричина: ($result) " . socket_strerror(socket_last_error($socket)) . "<br>";
file_put_contents($file, $debug);
} else {
$debug .= "OK.<br>";
file_put_contents($file, $debug);
}
$ccrc=calcCRC($device,"0102020202020202");
$this->send($socket, $ccrc);
$this->read($socket);
$flimit = "00";
$classname='Mercury';
$objname=$classname.'_'.$id;
if (gg($objname.".state") == 1)
$flimit = "01";
send($socket, $this->calcCRC($device,"032D".$flimit));
$res = $this->read($socket);
$limit = dechex(gg($objname.".LimitValue") * 100);
$this->send($socket, $this->calcCRC($device,"032C".$limit));
$res = $this->read($socket);
$debug .= "Закрываем сокет...";
file_put_contents($file, $debug);
socket_close($socket);
$debug .= "OK.\n\n";
file_put_contents($file, $debug);
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
function turnon($id) {
$rec=SQLSelectOne("SELECT * FROM mercury_devices WHERE ID='$id'");
$address=$rec['IPADDR'];
$service_port=$rec['PORT'];
$device=$rec['HEXADR'];
$cachedVoiceDir = ROOT . 'cms/cached/';
$file = $cachedVoiceDir . 'mercurydebug.txt';
// Открываем файл для получения существующего содержимого
$debug = file_get_contents($file);
$classname='Mercury';
$objname=$classname.'_'.$id;
$debug .= date('d/m/y H:s'). " запущен запрос на включение счетчика $id<br>\n";
file_put_contents($file, $debug);
/* Создаём сокет TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
if ($socket === false) {
$debug .= "Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "<br>";
} else {
$debug .= "OK.<br>";
}
$debug .= "Пытаемся соединиться с '$address' на порту '$service_port'...";
file_put_contents($file, $debug);
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
$debug .= "Не удалось выполнить socket_connect().\nПричина: ($result) " . socket_strerror(socket_last_error($socket)) . "<br>";
file_put_contents($file, $debug);
} else {
$debug .= "OK.<br>";
file_put_contents($file, $debug);
}
$this->send($socket, $this->calcCRC($device,"0101010101010101"));
read($socket);
$res = $this->merc_gd($socket,$this->calcCRC($device,"0819"),0.01);
$debug .= print_r($res);
file_put_contents($file, $debug);
sg($objname.".LimitValue",$res[0]);
$this->send($socket, $this->calcCRC($device,"0818"));
$res = read($socket);
$flimit = hexdec(dd($res[1]).$this->dd($res[2]));
$debug .= $flimit."<br>";
file_put_contents($file, $debug);
if (($flimit & 512) == 512)
sg($objname.".ControlLimit",1);
else
sg($objname.".ControlLimit",0);
$debug .= "Закрываем сокет...";
file_put_contents($file, $debug);
socket_close($socket);
$debug .= "OK.\n\n";
file_put_contents($file, $debug);
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
@@ -815,6 +989,7 @@ function dbInstall($data = '') {
mercury_devices: PASSWORD varchar(100) NOT NULL DEFAULT ''
mercury_devices: LASTPING varchar(100) NOT NULL DEFAULT ''
mercury_devices: ONLINE varchar(100) NOT NULL DEFAULT ''
mercury_devices: STATE varchar(100) NOT NULL DEFAULT ''
mercury_devices: TS varchar(100) NOT NULL DEFAULT ''
mercury_devices: Ia1 varchar(100) NOT NULL DEFAULT ''
mercury_devices: Ia2 varchar(100) NOT NULL DEFAULT ''

0 comments on commit 4f67191

Please sign in to comment.
You can’t perform that action at this time.