[Модуль] Энергомера (energomera)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

sega6549
Сообщения: 479
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 57 раз
Поблагодарили: 73 раза
Контактная информация:

Re: [Модуль] Энергомера (energomera)

Сообщение sega6549 » Пт май 31, 2019 9:46 am

Такой нет
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
ialtuhov
Сообщения: 69
Зарегистрирован: Чт фев 14, 2019 9:50 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: [Модуль] Энергомера (energomera)

Сообщение ialtuhov » Пт май 31, 2019 10:16 am

Кто нибудь может составить такую инструкцию, хотя бы общую скидать?
glonas
Сообщения: 36
Зарегистрирован: Вс сен 22, 2019 5:10 pm
Благодарил (а): 6 раз
Поблагодарили: 0

Re: [Модуль] Энергомера (energomera)

Сообщение glonas » Вс сен 22, 2019 5:13 pm

ialtuhov писал(а):
Пт май 31, 2019 10:16 am
Кто нибудь может составить такую инструкцию, хотя бы общую скидать?
Тоже интересует данная тема , тыкните плииз носом в ощее положение , счетчик подключил , в админтулзе все показывает , поставил модуль в моджор , модуль пишет онлайн , в велью прописал VOLTA() ElectroCount.VOLTA0 , а как это вывести на экран не допру .

P.s

Вопрос еще на рисовался , как обратиться к модулю энергомера из кода ? нужно в параметре счетчика менять значение.
glonas
Сообщения: 36
Зарегистрирован: Вс сен 22, 2019 5:10 pm
Благодарил (а): 6 раз
Поблагодарили: 0

Re: [Модуль] Энергомера (energomera)

Сообщение glonas » Вс окт 06, 2019 12:16 pm

Всем привет , сделал скрипт , вроде рабочий но есть косяк , зависает на чтении из порта при первом подключении но стоит только админ тулом соединить и разъединить то все работает до перезагрузки . Помогите разобраться , косяк в моем скрипте или в Phpserial ?
Мой (точнее доработанный ) :

include_once('C:\energomera\PhpSerial.php');

class iek61107{
public $Serial;
public $debug = false;
public $WaitBeforeRead = 0.5;

function iek61107($device){
$serial = new phpSerial;
$serial->deviceSet($device);

$serial->confBaudRate(9600);
$serial->confParity("even");
$serial->confCharacterLength(7);
$serial->confStopBits(1);
exec ("com4 -icrnl ignbrk -onlcr -echo -isig -F $device");
$this->Serial = $serial;
}

/**
* connect
* Connect the device
* @return bool
*/
function connect(){
if($this->debug) echo date("Y-m-d H:i:s")." Connecting COM\n";

$result = $this->Serial->deviceOpen("w+b");

if ($result === false) {
throw new Exception("serrial.open() failed");
}

if($this->debug) echo date("Y-m-d H:i:s")." Connected\n";

stream_set_timeout($this->Serial->_dHandle, 0, 3500);

return true;
}

/**
* disconnect
* Disconnect the device
*/
function disconnect(){
$this->Serial->sendMessage(hex2bin("0142300375"), $this->WaitBeforeRead);
$this->Serial->deviceClose();
if($this->debug) echo date("Y-m-d H:i:s")." Disconnected\n";
}

function init(){

$result = $this->Serial->sendMessage(hex2bin("2F3F210D0A"), $this->WaitBeforeRead);
if ($result === false)
{
//if($this->debug)
echo date("Y-m-d H:i:s")." Error send init\n";
return $result;
}
if($this->debug) echo date("Y-m-d H:i:s")." Send init #1 \n";

$ch = $this->Serial->readPort(3500);
if (empty($ch))
{
$result = $this->Serial->sendMessage(hex2bin("2F3F210D0A"), $this->WaitBeforeRead);
if ($result === false)
{
//if($this->debug) echo
date("Y-m-d H:i:s")." Error send init #1-2\n";
return $result;
}
if($this->debug) echo date("Y-m-d H:i:s")." Send init #1-2 \n";

$ch = $this->Serial->readPort(3500);
if (empty($ch))
{
if($this->debug) echo date("Y-m-d H:i:s")." Init timeout\n";
return false;
}
}

if ($ch != hex2bin("2F454B543543453130324D7630310D0A"))
{
//if($this->debug)
echo date("Y-m-d H:i:s")." Device not equal: ".$ch."\n";
return false;
}

//=== #2
// .051..
// .P0.(www.energomera.ru).#
$result = $this->Serial->sendMessage(hex2bin("063035310D0A"), $this->WaitBeforeRead);
if ($result === false)
{
//if($this->debug)
echo date("Y-m-d H:i:s")." Error send init #2\n";
return $result;
}
if($this->debug) echo date("Y-m-d H:i:s")." Send init #2 \n";

$ch = $this->Serial->readPort(3500);

// Model
if($this->debug) echo date("Y-m-d H:i:s")." model:".$ch."\n";

return true;
}

function getValue($val, $timeout = 3500)
{
// if($this->debug) echo date("Y-m-d H:i:s")." Read ".$val." ";

$data = "\1R1\2".$val."\3";
$cs = 0;
for ($i=1;$i<strlen($data);$i++)
$cs = $cs + ord($data[$i]);
$cs = $cs % 128;
$data = $data . chr($cs);

$result = $this->Serial->sendMessage($data, $this->WaitBeforeRead);
if ($result === false)
{
//if($this->debug)
echo date("Y-m-d H:i:s")." Error send init #2\n";
return $result;
}

$data = $this->Serial->readPort($timeout);
if (empty($data))
{
//if($this->debug)
echo date("Y-m-d H:i:s")." Time out\n";
return (false);
}

//TODO check CS
$data = substr($data, 1, strlen($data)-3);
$arr = explode("\r\n", $data);

$ret = array();
$lastkey = "";

for ($i=0; $i < count($arr); $i++)
{
$str = trim($arr[$i]);
if ($str == "") continue;

// Get key
$start = strpos($str, "(");
$stop = strpos($str, ")", $start);

$key = substr($str, 0, $start);
$val = substr($str, $start+1, $stop-$start-1);

if ($key != "") $lastkey = $key;

if (!array_key_exists($lastkey, $ret))
$ret[$lastkey] = array();

$arritm = $ret[$lastkey];
$arritm[] = $val;
$ret[$lastkey] = $arritm;
}

return $ret;
}

}


//Raschet

function ShowVal($dev, $val, $timeout = 3500)
{
$arr = $dev->getValue($val, $timeout);
//echo "<pre>$val = ".htmlspecialchars(print_r($arr,true))."</pre><br>\n";
return $arr ;
}


$dev = new iek61107("COM4");
$dev->debug = true;

$ret = $dev->connect();
if ($ret === false)
{
echo "ops1";
die;
}

$ret = $dev->init();
if ($ret === false)
{
echo "ops1";
die;
}

$m = date("m", strtotime("-1 month"));
echo "<br>\n";
$volt = ShowVal($dev, "VOLTA()");
$curre = ShowVal($dev, "CURRE()");
$power = ShowVal($dev, "POWEP()");
$powert = ShowVal($dev, "ET0PE()");
$powerpred = ShowVal($dev, "ENMPE($m.19,2,2)");
sg ('CE102M.generalTariff', $powert['ET0PE'][0]);
sg ('CE102M.Tariff1', $powert['ET0PE'][1]);
sg ('CE102M.Tariff2', $powert['ET0PE'][2]);
sg ('CE102M.PredT1', $powerpred['ENMPE'][0]);
sg ('CE102M.PredT2', $powerpred['ENMPE'][1]);
sg ('CE102M.Curre', $curre['CURRE'][0]);
sg ('CE102M.Volte', round($volt['VOLTA'][0]));
sg ('CE102M.power', round($power['POWEP'][0],2));
$dev->disconnect();


//////////////////////////////////////////////////////////////////////////////

//sleep (10) ;
//setGlobal('cycle_energomeraControl','restart') ;
$razn1 = gg('CE102M.Tariff1') - gg('CE102M.PredT1') ;
$razn2 = gg('CE102M.Tariff2') - gg('CE102M.PredT2') ;
$summ1 = $razn1 * 4.34 ;
$summ2 = $razn2 * 2.04 ;
$summ = round($summ1 + $summ2) ;
sg('CE102M.SummT1T2' , $summ) ;
Ответить