Выложил обновление файла и класса.
Запись событий в лог выведена в настройку. Теперь по умолчанию пишутся только критические записи, чего при обычной работе вполне достаточно. Можно как и раньше включить запись всех событий, что весьма полезно при отладке, или выключить логирование полностью. В файле megad.php и методе getData класса MegaD для этого есть переменная $reclog, которая может быть установлена как 0-нет, 1-только крит, 2-все.
Добавлена возможность опроса встроенного датчика температуры. Летом в жару шкафы могут сильно нагреваться, а зимой интересно на сколько там холодно. Кроме того, периодический опрос температуры заменяет ping и постоянно проверяет всю цепочку передачи данных. Немного проблематично, что это будет работать только начиная с версии прошивки 3.25 Но Мега отлично прошивается не требуя демонтажа и непосредственного доступа к ней. К тому же в новых версиях прошивки исправляются обнаруженные баги. Если же у вас нет в планах обновлять прошивку, то вариант с заменой пинга на опрос температуры все равно будет работать. Вот только температура не будет писаться в свойство объекта Меги. Но свойство alive все равно будет устанавливаться как 1 на время aliveTimeOut. Все сделано по аналогии с родными классами. Используя свойство alive можно организовать проверку в методе checkState объекта System класса systemStates. Это совершенно не нагрузит его, т.к. будет проверяться только само свойство alive и только. Пример кода в этом методе выложу позже.
Периодический опрос меги, я предлагаю поместить в метод onNewMinute класса Timer. Я думаю будет достаточно проверять каждые 5 минут. А интервал живучести выставить в 10-15 минут.
Код: Выделить всё
// Опрос температуры всех Мегадевайсов
if (!($m%5)) {
$objects = getObjectsByClass('MegaD');
foreach ($objects as $obj) {
if (getGlobal($obj['TITLE'].'.ipAddress')) {
callMethod($obj['TITLE'].'.getData', array('port'=>'tget'));
}
}
}
В этом коде каждые 5 минут будет перебор всех объектов класса MegaD и запуск их методов getData с параметром tget.
В классе представлены 4 объекта MegaD1 - MegaD4 в которых пока практически нет кода, и MegaD99 с примерами и описанием. MegaD99 это шаблон. А MegaD1-MegaD4 это уже объекты реальных Мег с конкретным кодом для каждой. Я оставил их в классе для будущих примеров.
Устранен баг со свойством alive.
Переписан код отлова разных комбинаций нажатий. Работает отлично, но в этом коде я использую свою функцию
registeredEventDetails() чтобы из базы данных получать детали события Event. Вот ссыль на эту тему
http://smartliving.ru/forum/viewtopic.php?f=4&t=1956
Если кто еще не в курсе, предлагаю освоить момент, как писать и добавлять свои функции в МД. Это очень просто. Открываем на диске путь где лежат файлы МД. Забираемся вот сюда ...\majordomo\lib\ Создаем там файлик, например
my.class.php Пишем в него код своей функции
Код: Выделить всё
<?php
/*
* Свои дополнительные функции
*/
// Получить детали события по его имени
function registeredEventDetails($eventName) {
$even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['DETAILS'];
} else {
return false;
}
}
?>
Вот как бы и все. Теперь функция из этого файла будет доступна из любого места. Во вложении в самом начале я прицепил свой файлик
my.class.php В нем есть эта и еще несколько других полезных дополнительных функций. Возможно они будут тоже вам интересны.