- Статус подключения: Подключено
- Категория: MegaD
- Фирма: ab-log.ru
- Модель: MegaD-328
- Название: Контроллер ввода/вывода
- Описание: Позволяет решать очень многие задачи в домашней автоматизации и может стать одним из ключевых элементов системы Умный Дом. Устройство ориентировано, прежде всего, на тех людей, которые заинтересованы в создании интеллектуального дома своими руками, однако оно может также представлять интерес и для интеграторов, монтажных организаций.
- Ссылка на сайт каталога производителя: ab-log.ru
- Тип питания: 12V-
- Магазин:ab-log.ru
- Приблизительная цена: 4500 руб (01.10.2014)
- Достоинства: Готовый модуль
- Недостатки: не выявлены
- Инструкция
- MajorDomo
Суть: Есть класс MegaD. В нем объекты всех Мег. Файл megad.php должен быть в корневом каталоге, где лежат файлы сайта. Он запускается Мегами, и получает от них параметры. Код в этом файле ищет объект Меги в Классе MegaD по mdid или IP адресу, и запускает метод incomingMessage объекта Меги с передачей ему параметров. А в этом методе объекта каждой Меги уже указано кому, что и как передать. С управлением немного по другому. Есть общий метод класса. В самих методах объектов ничего нет и не нужно. Общий метод собирает строку на основе переданных параметров и свойств конкретного объекта Меги.
Другими словами, идеология такая: как были у нас объекты датчиков и реле в классах keySensors и Relays, так там и остались. А класс MegaD со своими объектами MegaD1, MegaD2 ... Выступает в роли связующего звена наших объектов с железом. Плюсы - я легко могу переключить датчик с входа MegaD например на 1-Wire или Z-Wave. Да хоть куда. А в МД мне будет достаточно просто поправить его объект. Отвязать от класса MegaD и связать, например, с Z-Wave. Так же и наоборот.
Я не хочу ориентировать этот класс на какие то конкретные задачи, будь то управление освещением или же контроль охранных датчиков. Каждый решит для себя это сам. Задача - завести в систему события от Меги, и сделать управление ее выходами.
Что уже сделано и история изменений:
1. Работа с несколькими Мегами.
2. Получение от Меги сообщения о нажатии кнопки, подключенной к порту, настроенному как вход.
3. Управление выходом. Установка статуса вкл и выкл.
4. Принудительный опрос состояния порта.
4.1 Добавил опрос двух АЦП портов.
5. Реакция на двойное нажатие.
6. Реакция на долгое нажатие.
7. Обработка параметра all.
8. Опрос встроенного датчика температуры.
9. Отлов разных комбинаций нажатий кнопки. Двойное, тройное, долгое, отпускание и т.д. Требуется дополнительно функция registeredEventDetails() - Обсуждение устройства
- megad-328-api
MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Модератор: immortal
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
- Вложения
-
- MegaD_class_ver 3.2.zip
- Класс
- (43.96 КБ) 862 скачивания
-
- my.class.zip
- Функция registeredEventDetails()
- (1.13 КБ) 754 скачивания
-
- megad_file_ver 3.0.zip
- Файл
- (2.39 КБ) 747 скачиваний
- За это сообщение автора Bagir поблагодарили (всего 17):
- vova5049 (Вс окт 12, 2014 11:54 am) • ILGAS (Вс окт 12, 2014 5:14 pm) • dimik (Вс окт 12, 2014 10:46 pm) • Vit (Пт ноя 07, 2014 7:17 pm) • zelevova (Вт дек 02, 2014 3:42 pm) • skysilver (Чт янв 29, 2015 6:06 pm) • AHgpeu (Сб мар 21, 2015 10:51 pm) • mirsum (Вс мар 22, 2015 8:34 am) • lapig (Пн мар 30, 2015 9:34 pm) • du-bass (Вс ноя 08, 2015 8:20 pm) и ещё 7
- Рейтинг: 19.77%
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Выложил обновление файла и класса.
Запись событий в лог выведена в настройку. Теперь по умолчанию пишутся только критические записи, чего при обычной работе вполне достаточно. Можно как и раньше включить запись всех событий, что весьма полезно при отладке, или выключить логирование полностью. В файле megad.php и методе getData класса MegaD для этого есть переменная $reclog, которая может быть установлена как 0-нет, 1-только крит, 2-все.
Добавлена возможность опроса встроенного датчика температуры. Летом в жару шкафы могут сильно нагреваться, а зимой интересно на сколько там холодно. Кроме того, периодический опрос температуры заменяет ping и постоянно проверяет всю цепочку передачи данных. Немного проблематично, что это будет работать только начиная с версии прошивки 3.25 Но Мега отлично прошивается не требуя демонтажа и непосредственного доступа к ней. К тому же в новых версиях прошивки исправляются обнаруженные баги. Если же у вас нет в планах обновлять прошивку, то вариант с заменой пинга на опрос температуры все равно будет работать. Вот только температура не будет писаться в свойство объекта Меги. Но свойство alive все равно будет устанавливаться как 1 на время aliveTimeOut. Все сделано по аналогии с родными классами. Используя свойство alive можно организовать проверку в методе checkState объекта System класса systemStates. Это совершенно не нагрузит его, т.к. будет проверяться только само свойство alive и только. Пример кода в этом методе выложу позже.
Периодический опрос меги, я предлагаю поместить в метод onNewMinute класса Timer. Я думаю будет достаточно проверять каждые 5 минут. А интервал живучести выставить в 10-15 минут.В этом коде каждые 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 Пишем в него код своей функцииВот как бы и все. Теперь функция из этого файла будет доступна из любого места. Во вложении в самом начале я прицепил свой файлик my.class.php В нем есть эта и еще несколько других полезных дополнительных функций. Возможно они будут тоже вам интересны.
Запись событий в лог выведена в настройку. Теперь по умолчанию пишутся только критические записи, чего при обычной работе вполне достаточно. Можно как и раньше включить запись всех событий, что весьма полезно при отладке, или выключить логирование полностью. В файле 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'));
}
}
}
В классе представлены 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;
}
}
?>
- AHgpeu
- Сообщения: 117
- Зарегистрирован: Чт мар 12, 2015 11:46 am
- Благодарил (а): 26 раз
- Поблагодарили: 16 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
если уважаемый Bagir не будет сильно против, чуть дополню его великолепную работу одним методом для класса MegaD
(это просто немного видоизменённая функция setOutput для работы с ШИМ-выходами):
работает начиная с ver 3.28
Название:
Описание:
Код:
может быть, кому-то понадобится
(это просто немного видоизменённая функция setOutput для работы с ШИМ-выходами):
работает начиная с ver 3.28
Название:
Код: Выделить всё
setOutputPWM
Код: Выделить всё
команда на изменение яркости для ШИМ
В качестве параметров требуются $params['port'] (10 или 12 или 13), $params['value'] (0-255) и $params['time'] (время нарастания / спада)
Код: Выделить всё
$reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )
// Открывает лог если нужно
if ($reclog) { $log = getLogger($this); }
$cmdUrl = sprintf('http://%s/%s/?pt=%d&pwm=%d&cnt=%d',
$this->getProperty('IpAddress'), $this->getProperty('Password'),
intval($params['port']), intval($params['value']), intval($params['time']));
// Запись данных в лог
if ($reclog == 2) {
$log->trace('setOutputPWM method: '.$cmdUrl);
}
getURL($cmdUrl, 0);
- Рейтинг: 1.16%
-
- Сообщения: 65
- Зарегистрирован: Вс янв 12, 2014 12:54 pm
- Откуда: Белгород
- Благодарил (а): 110 раз
- Поблагодарили: 1 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
А MegaD случаем самостоятельно из arduino не собирается?
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Собирается еще как. И кто то из наших уже делали, и на форуме ab-log.ru я видел обсуждения. Если есть время и в добавок на ТЫ с паяльником и программатором, то и карты в руки.
-
- Сообщения: 708
- Зарегистрирован: Сб авг 18, 2012 10:21 am
- Благодарил (а): 26 раз
- Поблагодарили: 183 раза
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Легко. У меня так выглядитmirsum писал(а):А MegaD случаем самостоятельно из arduino не собирается?
- Рейтинг: 1.16%
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Да я только за! Сейчас у меня пока нет каналов для использования ШИМ. Но они точно будут. Пробовать было не на чем, а собрать тестовое железо на столе все руки не доходили. Постараюсь вскоре добавить этот метод.AHgpeu писал(а):если уважаемый Bagir не будет сильно против
-
- Сообщения: 87
- Зарегистрирован: Вс фев 01, 2015 10:43 pm
- Откуда: Муром
- Благодарил (а): 16 раз
- Поблагодарили: 7 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Незнаю, бага или фича.AHgpeu писал(а):если уважаемый Bagir не будет сильно против, чуть дополню его великолепную работу одним методом для класса MegaD
(это просто немного видоизменённая функция setOutput для работы с ШИМ-выходами):
работает начиная с ver 3.28
Название:Описание:Код: Выделить всё
setOutputPWM
Код:Код: Выделить всё
команда на изменение яркости для ШИМ В качестве параметров требуются $params['port'] (10 или 12 или 13), $params['value'] (0-255) и $params['time'] (время нарастания / спада)
может быть, кому-то понадобитсяКод: Выделить всё
$reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все ) // Открывает лог если нужно if ($reclog) { $log = getLogger($this); } $cmdUrl = sprintf('http://%s/%s/?pt=%d&pwm=%d&cnt=%d', $this->getProperty('IpAddress'), $this->getProperty('Password'), intval($params['port']), intval($params['value']), intval($params['time'])); // Запись данных в лог if ($reclog == 2) { $log->trace('setOutputPWM method: '.$cmdUrl); } getURL($cmdUrl, 0);
Занимательная вещь получается если в параметр $params['value'] (0-255) отправить любое отрицательное число.
Это не ошибка данного метода, если указывать в URL ?pt=10&pwm=-1&cnt=2 тоже самое получится.
Получи Cashback до 18% с покупок
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
В приведенном коде на первой сроке указано: $reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )
Далее по коду есть условие только для $reclog = 2
Где $reclog = 1 ?
Далее по коду есть условие только для $reclog = 2
Код: Выделить всё
if ($reclog == 2) {
$log->trace('setOutputPWM method: '.$cmdUrl);
}
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 87
- Зарегистрирован: Вс фев 01, 2015 10:43 pm
- Откуда: Муром
- Благодарил (а): 16 раз
- Поблагодарили: 7 раз
Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода
Я подозреваю что тутLutsenkoDenis писал(а):В приведенном коде на первой сроке указано: $reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )
Далее по коду есть условие только для $reclog = 2Где $reclog = 1 ?Код: Выделить всё
if ($reclog == 2) { $log->trace('setOutputPWM method: '.$cmdUrl); }
Код: Выделить всё
// Открывает лог если нужно
if ($reclog) { $log = getLogger($this); }
Получи Cashback до 18% с покупок