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

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

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

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

Сообщение Bagir » Ср авг 17, 2022 6:24 pm

Logrus писал(а):
Ср авг 17, 2022 5:24 pm
принципы реляционных бд, вот такая избыточность для упрощения запросов допускается
Тут, как говориться, пляшем от того что есть.
Logrus писал(а):
Ср авг 17, 2022 5:24 pm
у нас одно и то же в нескольких местах, что б не было ошибок оно должно быть актуальным!
Если это про время, и возможную небольшую разницу во времени свойства объекта UPDATED и колонки UPDATED в SQL у некого свойства. Так я не лазаю своей функцией к объектам, у которых есть штатные свойства UPDATED. Только в те, у которых такого нет. Так что актуальность обеспечена. А если про актуальные данные в колонке PROPERTY_NAME, то на данный момент мы уже знаем ситуацию, при которой там может не быть данных. Поэтому я и оставил длинный альтернативный вариант, если по быстрому не прокатило.
Logrus писал(а):
Ср авг 17, 2022 5:24 pm
цепочка там несколько больше, не только поле пропнейм в пвалюес, но и ключ р: в кеш_валюес
Хм, а я думал, что уже во всём разобрался. Но про кеш даже и не подумал. Посмотрю, спасибо. Но на сколько я понимаю структуру db, id всегда создаются, и альтернативному способу и без кеша можно работать.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Ср авг 17, 2022 6:32 pm

когда все в одном месте разные функции при чтении читая из оного не приведут к ошибкам
когда это продублировано и может отличаться от оригинала, пропнейм или ид в кеш валуес на пропертуес не удалился старый
то разные функции при селектах могут как прочитать ид из пропертуес где оригинал, так и из кеш валуес где копия и она должна соответствовать оригиналу
если разнятся то будут траблы

нарушение принципов о чем говорил ксор сделано для ускорения работы и уменьшении нагрузки на мскл
с одной стороны полезно, но есть и минусы, об одном из них про несоответствие этих данных и куча последних постов
За это сообщение автора Logrus поблагодарил:
Bagir (Ср авг 17, 2022 6:47 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

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

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

Logrus писал(а):
Ср авг 17, 2022 6:32 pm
когда все в одном месте разные функции при чтении читая из оного не приведут к ошибкам
Вчера я всё же решился навести порядок в именах объектов комнат и реле. За эти годы там такой бардак в именах накопился. Просто в начале у меня ещё и никакого стиля не было. Многое попало под переименование. Ну и как следствие полный беспредел в колонке PROPERTY_NAME. Смотрю так:

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

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 ) 
Правлю всё разом так:

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

UPDATE  `pvalues` SET  `PROPERTY_NAME` = CONCAT( (
SELECT title
FROM  `objects` 
WHERE pvalues.OBJECT_ID = objects.id
),  '.', (

SELECT title
FROM  `properties` 
WHERE pvalues.PROPERTY_ID = properties.id
) )
Вроде бы сейчас всё хорошо. Но вот ещё одна причина ошибок. Старайтесь не переименовывать объекты без необходимости. Лучше создать новый. Мне просто было историю свойств жаль терять. Покою теперь только кеш не дает. Я до сих пор не знаю структуру кеша. И какие методы изначально его используют. Как нибудь в непогоду займусь изучением. Что то мне подсказывает, что его можно просто грохнуть. И даже не можно, а нужно. Подскажите что почистить?
Что мне будет за то, если грохну все записи в таблице cached_values? Не саму таблицу разумеется. Или нужно использовать условия? и всё удалять не стоит? Тип таблицы MEMORY, всё равно же очистится при перезагрузке, или это не так?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пт авг 19, 2022 3:21 pm

просто в модулях класс, объект нужно доработать едит.пхп
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

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

Сообщение Bagir » Пт авг 19, 2022 3:25 pm

Logrus писал(а):
Пт авг 19, 2022 3:21 pm
просто в модулях класс, объект нужно доработать едит.пхп
Ничего не понял, но очень интересно. Что за хитрость такая?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пт авг 19, 2022 3:48 pm

Bagir писал(а):
Пт авг 19, 2022 3:25 pm
Logrus писал(а):
Пт авг 19, 2022 3:21 pm
просто в модулях класс, объект нужно доработать едит.пхп
Ничего не понял, но очень интересно. Что за хитрость такая?
https://github.com/sergejey/majordomo/b ... nc.php#L75
ну вот здесь обновление успешное классового свойства

значит надо обновить пропнейм в пвалюес, поменяли если

п.с. чуть выше, проблема до конца не решена ¯\_(ツ)_/¯
За это сообщение автора Logrus поблагодарил:
Bagir (Пт авг 19, 2022 3:58 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
dekort
Сообщения: 13
Зарегистрирован: Ср авг 30, 2017 11:36 am
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение dekort » Ср ноя 02, 2022 8:19 pm

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>'; }
}
Покажи как это сделать не могу понять , тое такой интерфейс нужен
Ответить