Logrus

<<< Back

Модификация. ПУ - счетчик

1

  • остальные методы излишни (из базовых)

2

  • заменяем здесь кодом ниже, история в свойстве value не нужна (решаем на свое усмотрение - у меня отключена)
$ot = $params['ORIGINAL_OBJECT_TITLE'];
$new_value = (float)$params['NEW_VALUE'];
$old_value = (float)$params['OLD_VALUE'];

$this->callMethodSafe('statusUpdated');

$history_values = array(
 'valueHour'=>date('Y-m-d H:00:00'),
 'valueDay'=>date('Y-m-d 00:00:00'),
 'valueMonth'=>date('Y-m-01 00:00:00')
);

foreach ($history_values as $history_value=>$time) {
 $value_id = (int)getHistoryValueId($ot . '.' . $history_value);
 if (defined('SEPARATE_HISTORY_STORAGE') && SEPARATE_HISTORY_STORAGE == 1) {
  $table_name = createHistoryTable($value_id);
 } else {
  $table_name = 'phistory';
 }
 $val1 = SQLSelectOne("SELECT ID, VALUE FROM $table_name WHERE VALUE_ID='" . $value_id . "' AND ADDED>=('" . $time . "') ORDER BY ADDED LIMIT 1");
 if ($val1['ID']) {
  $set_value = $new_value - (float)$this->getProperty($history_value . 'old');
  $set_value = round($set_value, 2);
  $this->setProperty($history_value, $set_value);
  SQLExec("DELETE FROM $table_name WHERE VALUE_ID=$value_id AND ADDED>=('" . $time . "')");
 } else {
  $this->setProperty($history_value . 'old', $old_value);
  $set_value = $new_value - $old_value;
  //DebMes($time . ' ' . $history_value . ' new = ' . $set_value . ' old = ' . $old_value, $ot);
  $set_value = round($set_value, 2);
  $this->setProperty($history_value, $set_value);
 }
}

return;
/* begin injection of {SDevices} */
require(DIR_MODULES.'devices/SCounters_valueUpdated.php');
/* end injection of {SDevices} */
  • оптимизировано, решена проблема с пропуском значений при переходе в интервалах, проблема при частой записи (удалило, но еще не создало значение), обратить внимание на вспомогательные свойства (ниже) при переезде с текущей на данную реализацию (создать вручную свойства с значениями за предыдущий период (час, день, месяц), если счетчик новый этого не требуется

3

  • проблема с правильным отображением решена ранее (благодарим xor за помощь и поддержку, ночные диалоги и вообще как хорошего человека) и имеем информативный и не раздувающий базу данных способ хранения и отображения данных на длительном историческом периоде
    4

Discuss (0) (7)

See also:
2020-05-12 Баловство с шаблонами 2
2020-05-07 Телеграмм. Полезное
2019-12-25 Телеграмм. Получение, преобразование и отправка изоображения в канал
2019-12-02 Charts
2019-11-30 Шаблон поведения. Отправка сообщения на определенный терминал
2019-06-30 Телеграмм. Меню - управление группами ПУ
2019-06-29 Телеграмм. Меню - запуск скриптов (сценариев)
2018-10-21 Настройки громкости
2018-10-07 Примеры кода
2018-09-29 checkState
2018-09-25 Телеграмм. pChart
2018-09-24 Уход за базой данных
2018-08-05 Управление подсветкой на шлюзе Сяоми
2018-06-21 Каталог ссылок
2018-06-10 Меню
2018-07-08 mail()
2018-05-04 Режим "EnergyTariffMode"
2018-05-02 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
2018-04-22 Программы
2018-04-19 Пользовательские функции
2018-04-11 Шаблон отображения в классе "ExchangeRates"
2018-04-05 Шаблон отображения в классе "Users"
2018-12-02 Режим "Никого нет дома"
2018-02-25 Бэкап и обслуживание системы

Нижний Тагил, Россия

На форуме: Logrus