Подробная инструкция по интеграции 3-х фазного электросчетчика "Энергомера СЕ301" с системой умного дома "Majordomo" по протоколу RS-485.
Представляю видео о интеграции, жаль что вставка его в блог не реализована: https://www.youtube.com/watch?v=j1cXd8Aio9Q
В видео не учитываю моменты установки драйвера для адаптера RS485, только настройка и интеграция.
Метод readCounter:
/*
Варианты вызова метода:
// если данный метод вызывается в onNewHour раз в месяц
callMethod('ElectroCount.readCounter', array('mode'=>'monthly'));
// если данный метод вызывается в onNewHour раз в сутки
callMethod('ElectroCount.readCounter', array('mode'=>'daily'));
// если данный метод вызывается в onNewHour каждый час
callMethod('ElectroCount.readCounter', array('mode'=>'hourly'));
// метод работы с оплатами
callMethod('ElectroCount.readCounter', array('mode'=>'payment'));
*/
// Выполнение метода в зависимости от его типа
switch ($params['mode']) {
case 'monthly':
// Сохраним значения месячного расхода в историю. История значений используется при построении графиков.
$cmc = $this->getProperty('MonthlyCurrent');
$cmct = $this->getProperty('ET0PE');
$cmc_value = $cmct - $cmc;
$this->setProperty('Monthly', $cmc_value);
$this->setProperty('MonthlyCurrent', $cmct);
break;
case 'daily':
// Сохраним значения суточного расхода в историю. История значений используется при построении графиков.
$cdc = $this->getProperty('DailyCurrent');
$cdct = $this->getProperty('ET0PE');
$cdc_value = $cdct - $cdc;
$this->setProperty('Daily', $cdc_value);
$this->setProperty('DailyCurrent', $cdct);
break;
case 'hourly':
// Пока здесь ничего не требуется
break;
case 'minute':
//вывод показаний до сейчас за день
$cdc = $this->getProperty('DailyCurrent');
$cdct = $this->getProperty('ET0PE');
$cdc_value = round($cdct - $cdc, 2); ;
$this->setProperty('DailyDay', $cdc_value);
//вывод показаний до сейчас за месяц
$cmc = $this->getProperty('MonthlyCurrent');
$cmct = $this->getProperty('ET0PE');
$cmc_value = round($cmct - $cmc, 2); ;
$this->setProperty('MonthlyDay', $cmc_value);
break;
case 'payment':
//вывод суммы всех оплат
$payment_summ = getHistorySum("ElectroCount.Payment", "1509424597", time());
//вычисляем сумму долга за эл. энергию.
$elfull = $this->getProperty('ET0PE');
$payment_value = round($elfull- $payment_summ, 2); ;
$this->setProperty('NoPayment', $payment_value);
break;
default: // Пока здесь ничего не требуется
}
Метод Timer-> onNewMinute:
// возвращает последний дней текущего месяца
function getLastDayOfMonth() {
return date('t', time());
}
// начало вывода метода работы со счетчиками
callMethod('ElectroCount.readCounter', array('mode'=>'minute'));
callMethod('ElectroCount.readCounter', array('mode'=>'payment'));
if($m == '59'){
callMethod('ElectroCount.readCounter', array('mode'=>'hourly'));
say('Сохранение параметров счетчиков за час',0);
if($h == '23') {
callMethod('ElectroCount.readCounter', array('mode'=>'daily'));
say('Сохранение параметров счетчиков за сутки',0);
if(date('d') == getLastDayOfMonth()) {
callMethod('ElectroCount.readCounter', array('mode'=>'monthly'));
say('Сохранение параметров счетчиков за месяц',0);
}
}
}
Сам же класс с объектами и методом выкладываю для скачивания: https://yadi.sk/i/ykcBiUAP9Oa9Og
Сами же значения которые необходимы для модуля энергомера:
Value Ind Object
COS_f() 0 ElectroCount.COS_f0
COS_f() 1 ElectroCount.COS_f1
COS_f() 2 ElectroCount.COS_f2
CURRE() 0 ElectroCount.CURRE0
CURRE() 1 ElectroCount.CURRE1
CURRE() 2 ElectroCount.CURRE2
ET0PE() 0 ElectroCount.ET0PE
FREQU() 0 ElectroCount.FREQU
POWEP() 0 ElectroCount.POWEP
POWPP() 0 ElectroCount.POWPP0
POWPP() 1 ElectroCount.POWPP1
POWPP() 2 ElectroCount.POWPP2
SNUMB() 0 ElectroCount.serialNumber
TIME_() 0 ElectroCount.TIME
VOLTA() 0 ElectroCount.VOLTA0
VOLTA() 1 ElectroCount.VOLTA1
VOLTA() 2 ElectroCount.VOLTA2
Усолье-Сибирское, Россия
На форуме: Akorolev