Время изменения свойства

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Время изменения свойства

Сообщение xor » Вс авг 14, 2022 11:50 pm

функция ggUpd("объект.свойство") возвращает массив. Со временем обновления свойства в кэше, конечно, проще, но у всех этого нету(
а там просто добавить поле UPDATED и по умолчанию поставить current timestamp. Тогда при записи автоматически там время изменения будет фиксироваться средствами mysql без кода php. При этом получение значения и времени вообще одним запросом получается безо всяких getObject & getPropertyByName

Код: Выделить всё

function ggUpd($varname )
{
    $tmp = explode('.', $varname);

    if (isset($tmp[2])) {
        $object_name = $tmp[0] . '.' . $tmp[1];
        $varname = $tmp[2];
    } elseif (isset($tmp[1])) {
        $object_name = $tmp[0];
        $varname = $tmp[1];
    } else {
        $object_name = 'ThisComputer';
    }

/*
// если в таблице cached_values есть время обновления, то всё просто:
    $cached_name = 'MJD:' . $object_name . '.' . $varname;
    $cached_value = checkFromCacheT($cached_name);

    if ($cached_value['VALUE'] !== false) {
        return $cached_value;
    }
 */  
    $obj = getObject($object_name);
    $prop_id = $obj->getPropertyByName($varname, $obj->class_id, $obj->id);
    if ($obj) {
        $value = SQLSelectOne('SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE  FROM pvalues WHERE PROPERTY_ID = ' . (int)$prop_id . ' AND OBJECT_ID  = ' . (int)$obj->id);
        return $value;
    } else {
        return 0;
    }
}

/*
// если в таблице cached_values есть время обновления!
function checkFromCacheT($key)
{
	$rec = SQLSelectOne("SELECT  UNIX_TIMESTAMP(UPDATED) as UPDATED, DATAVALUE as VALUE FROM cached_values WHERE KEYWORD = '" . DBSafe($key) . "'");

    if ($rec['VALUE'] !== false) {
        return $rec;
    } else {
        return false;
    }
}
*/
$res = ggUpd("Cabinet.Temperature");
echo "val=".$res['VALUE']." upd=".$res['UPDATED'];
у меня в кэше так
2022-08-14_23-53-00.png
2022-08-14_23-53-00.png (83.48 КБ) 907 просмотров
За это сообщение автора xor поблагодарил:
Chainik (Пн авг 15, 2022 8:33 am)
Рейтинг: 1.16%
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Время изменения свойства

Сообщение Bagir » Пн авг 15, 2022 11:11 am

У меня была мысль завернуть код в функцию. Раньше я часто так делал. Но как то раз поделился примером тут, совсем забыв что там есть мои функции. Теперь стараюсь штатными средствами обходиться, или SQL в коде. Вообще конечно быстрее было бы смотреть на колонку `PROPERTY_NAME` таблицы `pvalues`, а если там нет, то искать уже по id. Но это всё уже ведет с созданию функции.
Вот пара примеров, где я использую время записи свойства:
Шаблон поведения. Ответ на вопрос "Какая температура на кухне"Показать

Код: Выделить всё

$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));

$obj=getObject('KitchenArea');

$array=[];
if (preg_match('/температур/isu',$ss)) { $array += [ 'Temperature' => ['Температура','°'] ]; }
if (preg_match('/влажност/isu',$ss))   { $array += [ 'Humidity' => ['Влажность','%'] ]; }

foreach( $array as $key => $value ){
 $prop_id = $obj->getPropertyByName($key, $obj->class_id, $obj->id);
 $rec = SQLSelectOne('SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE FROM pvalues 
                      WHERE PROPERTY_ID = ' . (int)$prop_id . ' AND OBJECT_ID  = ' . (int)$obj->id);

 if ($rec['VALUE']) {
  $t = $value[0].' '.$obj->getProperty('inRoomText').' '.str_replace('.',',',$rec['VALUE']).$value[1]; 

  $i=time()-$rec['UPDATED'];
  echo 'updated '.round($i/60).' min<br>';
  if ($i > 60*60*5) { $t .= '. Данные давно не обновлялись, проверьте датчик'; } 
  elseif ($i > 60*60*2) { $t .= ', но данные уже не актуальны'; }
  //else { $t .= ', данные обновлены '. round($i/60) .' мин назад'; }

 } else {
  $t .= $value[0].' '.$obj->getProperty('inRoomText').' не указана. Данные отсутствуют';
 }

  say($t); //echo $t.'<br>';
}

saveToCache('VAR:original'.$from_user_id, '');
Скрипт расчета средней температуры домаПоказать

Код: Выделить всё

/*  Запускается из объектов класса Rooms для расчета средней температуры при её изменении 
    вычисляет среднюю температуру комнат для передачи её объекту термостата котла
*/

$check=array('Bedroom','HallArea','KitchenArea','Livingroom','OfficeRoom');
$t_avg=0;   //средняя температура
$r_count=0; //количество принятых комнат

foreach($check as $r) {
 $prop_id=getValueIdByName($r, 'Temperature');
 $arr_s = SQLSelectOne("SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE FROM `pvalues` WHERE ID=$prop_id");

 if (time()-$arr_s['UPDATED'] < 60*60*3) {
  echo 'температура '.gg("$r.inRoomText").' '.$arr_s['VALUE'].'<br>';
  $r_count++;
  $t_avg=$t_avg+$arr_s['VALUE'];
 } else {
  echo 'данные о температуре '.gg("$r.inRoomText").' не актуальны <br>';
 }
}

if (!$r_count) {
 echo 'Данные не получены. Взять среднее по последним измерениям <br>';
 foreach($check as $r) {
  $r_count++;
  $t_avg=$t_avg+gg("$r.Temperature");
 }
}

$t_avg=round($t_avg/$r_count, 1);
echo "Средняя температура в доме $t_avg <br>";

// передать данные в объект термостата
sg('thrm_alpha.airCurrentTemp', $t_avg);
В ответе у меня сейчас следующее. Как раз батарейка села в одной комнате. Её температура в расчет не принимается.
температура в спальней комнате 26.4
температура в холле 25.7
температура на кухне 26
температура в гостиной комнате 26.8
данные о температуре в кабинете не актуальны
Средняя температура в доме 26.2
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Время изменения свойства

Сообщение Bagir » Пн авг 15, 2022 11:29 am

Кстати сейчас выполнил у себя вот такой запрос
SQL1Показать
SELECT *
FROM pvalues
JOIN objects ON pvalues.OBJECT_ID = objects.id
JOIN properties ON pvalues.PROPERTY_ID = properties.id
WHERE pvalues.PROPERTY_NAME != CONCAT_WS( '.', objects.TITLE, properties.TITLE )
SQL2Показать
SELECT *
FROM `pvalues`
WHERE `PROPERTY_NAME` <> CONCAT( (

SELECT title
FROM `objects`
WHERE pvalues.OBJECT_ID = objects.id
), '.', (

SELECT title
FROM `properties`
WHERE pvalues.PROPERTY_ID = properties.id
) )
в результате пусто, и это хорошо. Весьма давненько были тут трудности. У кого в этой колонке пусто, а у кого вообще левые имена. Получается теперь можно уверенно смотреть на эту колонку, а уж если не нашел, искать способом выше. Очень хороший вариант сделать функцию и предложить Pull Request. Ни разу такого не делал :roll:
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Время изменения свойства

Сообщение Logrus » Пн авг 15, 2022 12:07 pm

Bagir писал(а):
Пн авг 15, 2022 11:11 am
У меня была мысль завернуть код в функцию. Раньше я часто так делал. Но как то раз поделился примером тут, совсем забыв что там есть мои функции. Теперь стараюсь штатными средствами обходиться, или SQL в коде. Вообще конечно быстрее было бы смотреть на колонку `PROPERTY_NAME` таблицы `pvalues`, а если там нет, то искать уже по id. Но это всё уже ведет с созданию функции.
Вот пара примеров, где я использую время записи свойства:
Шаблон поведения. Ответ на вопрос "Какая температура на кухне"Показать

Код: Выделить всё

$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));

$obj=getObject('KitchenArea');

$array=[];
if (preg_match('/температур/isu',$ss)) { $array += [ 'Temperature' => ['Температура','°'] ]; }
if (preg_match('/влажност/isu',$ss))   { $array += [ 'Humidity' => ['Влажность','%'] ]; }

foreach( $array as $key => $value ){
 $prop_id = $obj->getPropertyByName($key, $obj->class_id, $obj->id);
 $rec = SQLSelectOne('SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE FROM pvalues 
                      WHERE PROPERTY_ID = ' . (int)$prop_id . ' AND OBJECT_ID  = ' . (int)$obj->id);

 if ($rec['VALUE']) {
  $t = $value[0].' '.$obj->getProperty('inRoomText').' '.str_replace('.',',',$rec['VALUE']).$value[1]; 

  $i=time()-$rec['UPDATED'];
  echo 'updated '.round($i/60).' min<br>';
  if ($i > 60*60*5) { $t .= '. Данные давно не обновлялись, проверьте датчик'; } 
  elseif ($i > 60*60*2) { $t .= ', но данные уже не актуальны'; }
  //else { $t .= ', данные обновлены '. round($i/60) .' мин назад'; }

 } else {
  $t .= $value[0].' '.$obj->getProperty('inRoomText').' не указана. Данные отсутствуют';
 }

  say($t); //echo $t.'<br>';
}

saveToCache('VAR:original'.$from_user_id, '');
Скрипт расчета средней температуры домаПоказать

Код: Выделить всё

/*  Запускается из объектов класса Rooms для расчета средней температуры при её изменении 
    вычисляет среднюю температуру комнат для передачи её объекту термостата котла
*/

$check=array('Bedroom','HallArea','KitchenArea','Livingroom','OfficeRoom');
$t_avg=0;   //средняя температура
$r_count=0; //количество принятых комнат

foreach($check as $r) {
 $prop_id=getValueIdByName($r, 'Temperature');
 $arr_s = SQLSelectOne("SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE FROM `pvalues` WHERE ID=$prop_id");

 if (time()-$arr_s['UPDATED'] < 60*60*3) {
  echo 'температура '.gg("$r.inRoomText").' '.$arr_s['VALUE'].'<br>';
  $r_count++;
  $t_avg=$t_avg+$arr_s['VALUE'];
 } else {
  echo 'данные о температуре '.gg("$r.inRoomText").' не актуальны <br>';
 }
}

if (!$r_count) {
 echo 'Данные не получены. Взять среднее по последним измерениям <br>';
 foreach($check as $r) {
  $r_count++;
  $t_avg=$t_avg+gg("$r.Temperature");
 }
}

$t_avg=round($t_avg/$r_count, 1);
echo "Средняя температура в доме $t_avg <br>";

// передать данные в объект термостата
sg('thrm_alpha.airCurrentTemp', $t_avg);
В ответе у меня сейчас следующее. Как раз батарейка села в одной комнате. Её температура в расчет не принимается.
температура в спальней комнате 26.4
температура в холле 25.7
температура на кухне 26
температура в гостиной комнате 26.8
данные о температуре в кабинете не актуальны
Средняя температура в доме 26.2
покажь время выпонение данных выше примеров, количество потребляемой памяти, количество запросов при выполнении
а потом сравни это с одним селектом без учета живости правда, но как часто батарейка садиться
ну и вопрос зачем такое городить и использовать часто когда батарейка раз в пару лет?!
а сам расчет не сильно критичен, средняя как показометр юзается и даже если один сенсор сдох, то последняя температура в среднем не сильно и повлияет на время замены батарейки!

а вообще среднюю считаешь по количеству комнат без учета из объема, т.е. это попугаи :roll: ;)
Последний раз редактировалось Logrus Пн авг 15, 2022 12:16 pm, всего редактировалось 2 раза.
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Время изменения свойства

Сообщение Logrus » Пн авг 15, 2022 12:11 pm

Bagir писал(а):
Пн авг 15, 2022 11:29 am
Кстати сейчас выполнил у себя вот такой запрос
SQL1Показать
SELECT *
FROM pvalues
JOIN objects ON pvalues.OBJECT_ID = objects.id
JOIN properties ON pvalues.PROPERTY_ID = properties.id
WHERE pvalues.PROPERTY_NAME != CONCAT_WS( '.', objects.TITLE, properties.TITLE )
SQL2Показать
SELECT *
FROM `pvalues`
WHERE `PROPERTY_NAME` <> CONCAT( (

SELECT title
FROM `objects`
WHERE pvalues.OBJECT_ID = objects.id
), '.', (

SELECT title
FROM `properties`
WHERE pvalues.PROPERTY_ID = properties.id
) )
в результате пусто, и это хорошо. Весьма давненько были тут трудности. У кого в этой колонке пусто, а у кого вообще левые имена. Получается теперь можно уверенно смотреть на эту колонку, а уж если не нашел, искать способом выше. Очень хороший вариант сделать функцию и предложить Pull Request. Ни разу такого не делал :roll:
трудности тут (и такого еще полно в самом ядре мдм) приводили к куче проблем в целом
это поправили не так давно в сетглобал, но правильней писал выше при создании классового сразу у всех объектов создавать записи в пвалюес
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Время изменения свойства

Сообщение AK1 » Пн авг 15, 2022 2:45 pm

Проблема ИМХО не в определении времени последнего изменения, а в контроле работоспособности устройств (длительное отсутствие показаний - один из признаков неисправности). В ПУ время изменения свойства пишется. Можно задавать максимальное время отсутствия получения данных. Это дополнительно нагружает систему, но для критически важных устройств такой подход обоснован.
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Вариант функции для получения времени изменения свойства

Сообщение Bagir » Пн авг 15, 2022 2:52 pm

Полазал в своем коде, где я использую время записанного свойства. А и правда много где. Так почему бы действительно не быть такой функции. Минусы затеи конечно есть. Люди смотрящие CONNECT не поймут код, хоть комментарии каждый раз оставляй. Впрочем, это тоже решение. Вот мой вариант. Написана в стиле функций файла objects.class.php
И ещё есть момент. Свое подобное добро я храню в файле .\lib\my.class.php Но если после обновлений одноименная функция появится, то всё ляжет. Поэтому в начале имени своей функции лучше добавить 'my'

Код: Выделить всё

$v= mygetGlobalWithUpd('KitchenArea.Temperature');
echo $v['VALUE'].' '.$v['UPDATED'];

/**
 * Summary of mygetGlobalWithUpd
 * @param mixed $varname Variable name
 * @return array
 */
function mygetGlobalWithUpd($varname)
{
    $tmp = explode('.', $varname);

    if (isset($tmp[2])) {
        $object_name = $tmp[0] . '.' . $tmp[1];
        $varname = $tmp[2];
    } elseif (isset($tmp[1])) {
        $object_name = $tmp[0];
        $varname = $tmp[1];
    } else {
        $object_name = 'ThisComputer';
    }

    /* 
       Получить значение из таблицы pvalues сразу по имени Объект.Свойство
    */   
    $sqlQuery = "SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE
                 FROM pvalues
                 WHERE PROPERTY_NAME = '" . DBSafe($object_name . '.' . $varname) . "'";
 
    $value = SQLSelectOne($sqlQuery);
    //$value='';

        // Если получить не удалось
        if (!isset($value['UPDATED'])) {
            /*
               Имена объектов находятся в таблице objects и они должны быть уникальными
               Для начала нам нужно получить id нашего объекта и id класса которому принадлежит объект
            */        
            $sqlQuery = "SELECT ID, CLASS_ID
                         FROM objects
                         WHERE TITLE= '" . DBSafe($object_name) . "'";

            $value = SQLSelectOne($sqlQuery);
            $obj_id = $value['ID'];
            $class_id = $value['CLASS_ID'];
            if (!$obj_id) { return 0; }
        
            /* Имена свойств находятся в таблице properties
               с указанием id класса если свойство заданно на уровне класса,
               или id объекта если свойство принадлежит объекту лично.
            */   
            $sqlQuery = "SELECT ID
                         FROM properties
                         WHERE TITLE= '" . DBSafe($varname) . "' AND (CLASS_ID='" . (int)$class_id . "' OR OBJECT_ID='" . (int)$obj_id . "')";
            $value = SQLSelectOne($sqlQuery);
            $prop_id = $value['ID'];
            if (!$prop_id) { return 0; }

            /*
              значения свойств находятся в таблице pvalues
            */
            $sqlQuery = "SELECT UNIX_TIMESTAMP(UPDATED) as UPDATED, VALUE
                         FROM pvalues
                         WHERE PROPERTY_ID = " . (int)$prop_id . " AND OBJECT_ID  = " . (int)$obj_id;
            $value = SQLSelectOne($sqlQuery);
            //echo 'длинный путь ';
        }   

    if (isset($value['UPDATED'])) {
        return $value;
    } else {
        return 0;
    }
}
За это сообщение автора Bagir поблагодарил:
Yevgen16 (Пт сен 16, 2022 5:26 pm)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Время изменения свойства

Сообщение Bagir » Пн авг 15, 2022 3:00 pm

AK1 писал(а):
Пн авг 15, 2022 2:45 pm
Проблема ИМХО не в определении времени последнего изменения, а в контроле работоспособности устройств
Конечно, я для этого использую штатное свойство .alive
А для контроля у меня есть скрипт SearchProblemObjects. Вызывается из домашних страниц с параметром 1 чтобы сделать таблицу. И периодически по времени.

Код: Выделить всё

// флаг вывода списка на экран
if (isset($params['print'])) { $print=$params['print']; } else { $print=0; }
// Массив неполадок
$detals=array();

// if ($print) { echo '<br />'; }

// Перебор неживых датчиков
$globalClassNamesArray=array('keySensors','MegaD','Z-Wave');
foreach($globalClassNamesArray as $globalClassName) {
 
  // if ($print) { echo '<br />'; }
  $objects=getObjectsByClass($globalClassName);
  foreach($objects as $obj) {
    $obj=getObject($obj['TITLE']);
 
    // только для неживых
    if (!$obj->getProperty('alive')) {
      // Нашли неживой объект
      switch ($globalClassName) {
      case 'keySensors':
        $detals['keySensors']="Не все датчики обновляются.";
        break;
      case 'MegaD':
        $detals['MegaD']="Мега не отвечает.";
        break;
      case 'Z-Wave':
        $detals['ZWave']="Z датчик не отвечает.";
        break;
      }
    } 
    
    // В список попадает все объекты, у которых alive <>1 
    if ($obj->getProperty('alive')<>1) {
      // Составить список    
      if ($print) {
        $title=$obj->object_title;
        $s = getClassNameByObject($title);
        if ($ClassName!=$s) {
          // При первом разе открыть начало раздела неживых объектов, иначе закрыть предыдущую таблицу  
          if (!$ClassName) {
           echo '<details open><summary><big><b style="color:#ff0000">Неживые объекты</b></big></summary> <blockquote>';
          } else {
           echo '</table></details><br />'; 
          }
          $ClassName = $s;
          // Открыть новую таблицу. Напечатать имя класса (подкласса)
          echo '<details open><summary><big><b>'.$ClassName.'</b></big></summary>';
          echo '<table border="1">';
        }
      
        // Разный цвет текста
        if ($obj->getProperty('alive')>1) { $cn='<font color="gray">'; $ce='</font>'; } else { $cn=''; $ce=''; }
      
        // Напечатать имена и описание объектов
        echo '<tr>';
        echo '<td>'.$cn.$obj->object_title.$ce.'</td>';
        echo '<td>'.$cn.$obj->description.$ce.'</td>';
        // echo '<td>'.$obj->getProperty('updatedTime').'</td>';
        // echo '<td>'.date("d.m.Y  H:i", strtotime($obj->getProperty('updatedTime'))).'</td>';
        if ($obj->getProperty('updated')) { 
         echo '<td>'.$cn.date("d.m.Y  H:i", $obj->getProperty('updated')).$ce.'</td>';
        } 
        //echo '<td>'.$cn.$no.$ce.'</td>';
        echo '</tr>';
      }
    }
  }
}
// закрыть последнюю таблицу и раздел неживых
if ($print && $s) { echo '<!--  --> </table></details> </blockquote> </details>'; }
$ClassName='';
$s='';


// Поиск датчиков с севшей батарейкой
$objects=getObjectsByClass('Z-Wave');
foreach($objects as $obj) {
  $obj=getObject($obj['TITLE']);
  $Battery = $obj->getProperty('Battery');
    
  if (is_numeric($Battery) && $Battery < 20) {
    $detals['battery']='У радио датчика села батарейка.';

    if ($print) {
      // При первом найденном открываем таблицу (раздел)
      if (!$s) { 
        echo '<br /><details open><summary><big><b  style="color:#ff0000">Радиодатчики</b></big></summary> <blockquote>';
        echo '<table border="1">';
        $s=1;
      }
      // Напечатать имена и описание объектов
      echo '<tr>';
      echo '<td>'.$obj->object_title.'</td>';
      echo '<td>'.$obj->description.'</td>';
      if ($obj->getProperty('updated')) { 
       echo '<td>'.date("d.m.Y  H:i", $obj->getProperty('updated')).'</td>';
      } 
      echo '<td>'.$Battery.'%'.'</td>';
      echo '</tr>';
    }  
  }
}
// Закрываем таблицу 
if ($print && $s) { echo '</table></blockquote></details>'; }
$s='';


// Соединить все неполадки в одну строку
$s=implode(' ',$detals);
// зарегистрировать событие
if ($s) { 
  registerEvent('problems_objects', $details=$s, $expire_in=10);
} else {
  registerEvent('problems_objects', $details='', $expire_in=1); // или просто удалить
  if ($print) { echo '<big><b>Все пучком !</b></big>'; }
}
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Время изменения свойства

Сообщение AK1 » Пн авг 15, 2022 3:17 pm

Все сделано хорошо. Значит надо организовать правильную реакцию на неисправное устройство (оповестить, исключить из подсчета средней температуры.....). Похожие проблемы. Последнее время стал задуваться газовый котел. Вывел в телеграм оповещение о снижении ниже критичного порога температуры котла.
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Время изменения свойства

Сообщение Logrus » Пн авг 15, 2022 6:08 pm

AK1 писал(а):
Пн авг 15, 2022 3:17 pm
Все сделано хорошо.
ты сейчас пошутил?
куча нафиг не нужных запросов, поллингом а не реакция по изменению свойства

ужасная реализация ;)
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить