Logrus

<<< Назад

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

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

Обсуждение (0) (7)

Смотрите так же:
12.05.2020 Баловство с шаблонами 2
07.05.2020 Телеграмм. Полезное
25.12.2019 Телеграмм. Получение, преобразование и отправка изоображения в канал
02.12.2019 Charts
30.11.2019 Шаблон поведения. Отправка сообщения на определенный терминал
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
21.10.2018 Настройки громкости
07.10.2018 Примеры кода
29.09.2018 checkState
25.09.2018 Телеграмм. pChart
24.09.2018 Уход за базой данных
05.08.2018 Управление подсветкой на шлюзе Сяоми
21.06.2018 Каталог ссылок
10.06.2018 Меню
08.07.2018 mail()
04.05.2018 Режим "EnergyTariffMode"
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
22.04.2018 Программы
19.04.2018 Пользовательские функции
11.04.2018 Шаблон отображения в классе "ExchangeRates"
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"
25.02.2018 Бэкап и обслуживание системы

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

На форуме: Logrus