[Модуль] Энергомера (energomera)
Модератор: immortal
-
- Сообщения: 530
- Зарегистрирован: Чт авг 20, 2015 11:32 am
- Откуда: Ярославль
- Благодарил (а): 61 раз
- Поблагодарили: 75 раз
- Контактная информация:
-
- Сообщения: 69
- Зарегистрирован: Чт фев 14, 2019 9:50 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: [Модуль] Энергомера (energomera)
Кто нибудь может составить такую инструкцию, хотя бы общую скидать?
-
- Сообщения: 49
- Зарегистрирован: Вс сен 22, 2019 5:10 pm
- Благодарил (а): 6 раз
- Поблагодарили: 0
Re: [Модуль] Энергомера (energomera)
Тоже интересует данная тема , тыкните плииз носом в ощее положение , счетчик подключил , в админтулзе все показывает , поставил модуль в моджор , модуль пишет онлайн , в велью прописал VOLTA() ElectroCount.VOLTA0 , а как это вывести на экран не допру .
P.s
Вопрос еще на рисовался , как обратиться к модулю энергомера из кода ? нужно в параметре счетчика менять значение.
-
- Сообщения: 49
- Зарегистрирован: Вс сен 22, 2019 5:10 pm
- Благодарил (а): 6 раз
- Поблагодарили: 0
Re: [Модуль] Энергомера (energomera)
Всем привет , сделал скрипт , вроде рабочий но есть косяк , зависает на чтении из порта при первом подключении но стоит только админ тулом соединить и разъединить то все работает до перезагрузки . Помогите разобраться , косяк в моем скрипте или в 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) ;
Мой (точнее доработанный ) :
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) ;
-
- Сообщения: 74
- Зарегистрирован: Вс янв 20, 2013 11:06 pm
- Благодарил (а): 40 раз
- Поблагодарили: 13 раз
Re: [Модуль] Энергомера (energomera)
Добрый день. Имеется в наличии счётчик СЕ102 (без М), он работает по другому протоколу. Будет ли когда нибудь добавлена поддержка данной модели в модуль?
-
- Сообщения: 366
- Зарегистрирован: Пт июл 26, 2013 4:11 pm
- Благодарил (а): 71 раз
- Поблагодарили: 18 раз
Re: [Модуль] Энергомера (energomera)
Добрые люди помогите с ubuntu,
перешел на нее с windows с начало не мог запустить energomera, после оказалось что не было доступа к порту нашел такой выход "sudo chmod 666 /dev/ttyUSB0", после данные приходили по 1 фазе вместо 3х фаз, но что то сделал не знаю что, но все заработало. но после перезагрузки и обновления ubuntu ситуация повторилась, приходят данные только по одной фазе. уже бьюсь 3 день, что делал до этого не знаю. Помогите люди добрые.
перешел на нее с windows с начало не мог запустить energomera, после оказалось что не было доступа к порту нашел такой выход "sudo chmod 666 /dev/ttyUSB0", после данные приходили по 1 фазе вместо 3х фаз, но что то сделал не знаю что, но все заработало. но после перезагрузки и обновления ubuntu ситуация повторилась, приходят данные только по одной фазе. уже бьюсь 3 день, что делал до этого не знаю. Помогите люди добрые.
-
- Сообщения: 72
- Зарегистрирован: Пт янв 13, 2017 11:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Re: [Модуль] Энергомера (energomera)
прочитай 2 сообщение в этой ветке про драйвераILGAS писал(а): ↑Вс янв 12, 2020 10:26 pmДобрые люди помогите с ubuntu,
перешел на нее с windows с начало не мог запустить energomera, после оказалось что не было доступа к порту нашел такой выход "sudo chmod 666 /dev/ttyUSB0", после данные приходили по 1 фазе вместо 3х фаз, но что то сделал не знаю что, но все заработало. но после перезагрузки и обновления ubuntu ситуация повторилась, приходят данные только по одной фазе. уже бьюсь 3 день, что делал до этого не знаю. Помогите люди добрые.
-
- Сообщения: 395
- Зарегистрирован: Вт май 31, 2016 6:56 pm
- Откуда: Россия Карелия Петрозаводск
- Благодарил (а): 95 раз
- Поблагодарили: 57 раз
Re: [Модуль] Энергомера (energomera)
Есть где нибудь пример кода для esp8266/arduino для чтения показаний счетчика 'Энергомера CM102M ?
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
-
- Сообщения: 366
- Зарегистрирован: Пт июл 26, 2013 4:11 pm
- Благодарил (а): 71 раз
- Поблагодарили: 18 раз
Re: [Модуль] Энергомера (energomera)
нашел причину сам, если кому интересно. просно нужно было поменять скорость.ILGAS писал(а): ↑Вс янв 12, 2020 10:26 pmДобрые люди помогите с ubuntu,
перешел на нее с windows с начало не мог запустить energomera, после оказалось что не было доступа к порту нашел такой выход "sudo chmod 666 /dev/ttyUSB0", после данные приходили по 1 фазе вместо 3х фаз, но что то сделал не знаю что, но все заработало. но после перезагрузки и обновления ubuntu ситуация повторилась, приходят данные только по одной фазе. уже бьюсь 3 день, что делал до этого не знаю. Помогите люди добрые.
в терминали нужно написать команду
Код: Выделить всё
stty -F /dev/ttyUSB0 9600 -echo cs8 raw
- За это сообщение автора ILGAS поблагодарили (всего 2):
- Akinak (Вс фев 09, 2020 8:38 pm) • kostya4000 (Пн фев 10, 2020 7:58 pm)
- Рейтинг: 2.33%
-
- Сообщения: 395
- Зарегистрирован: Вт май 31, 2016 6:56 pm
- Откуда: Россия Карелия Петрозаводск
- Благодарил (а): 95 раз
- Поблагодарили: 57 раз
Re: [Модуль] Энергомера (energomera)
Может при первом подключение пароль передавать?glonas писал(а): ↑Вс окт 06, 2019 12:16 pmВсем привет , сделал скрипт , вроде рабочий но есть косяк , зависает на чтении из порта при первом подключении но стоит только админ тулом соединить и разъединить то все работает до перезагрузки . Помогите разобраться , косяк в моем скрипте или в Phpserial ?
Мой (точнее доработанный ) :
include_once('C:\energomera\PhpSerial.php');
Код: Выделить всё
Запрос
06.02.2020 00:14:25.299
01 50 31 02 28 37 37 37 37 37 37 29 03 21 .P1.(777777).!
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE