Akorolev

 
<<< Back

Интеграция счетчика Энергомера СЕ301

Подробная инструкция по интеграции 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  

Discuss (2) (5)

Усолье-Сибирское, Россия

На форуме: Akorolev