MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Модераторы: Bagir, Ivan, Vit, immortal

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

MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение Bagir » Пн окт 06, 2014 8:01 pm

Изображение
  • Статус подключения: Подключено
  • Категория: 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_class_ver 3.2.zip
Класс
(43.96 КБ) 531 скачивание
my.class.zip
Функция registeredEventDetails()
(1.13 КБ) 478 скачиваний
megad_file_ver 3.0.zip
Файл
(2.39 КБ) 499 скачиваний
За это сообщение автора 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
Рейтинг: 23.29%
Windows XP, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1331
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 164 раза
Поблагодарили: 294 раза

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение Bagir » Пн дек 08, 2014 4:30 am

Выложил обновление файла и класса.

Запись событий в лог выведена в настройку. Теперь по умолчанию пишутся только критические записи, чего при обычной работе вполне достаточно. Можно как и раньше включить запись всех событий, что весьма полезно при отладке, или выключить логирование полностью. В файле 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 В нем есть эта и еще несколько других полезных дополнительных функций. Возможно они будут тоже вам интересны.
Windows XP, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
AHgpeu
Сообщения: 112
Зарегистрирован: Чт мар 12, 2015 11:46 am
Благодарил (а): 25 раз
Поблагодарили: 16 раз

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение AHgpeu » Сб мар 21, 2015 10:48 pm

если уважаемый 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); 
может быть, кому-то понадобится
За это сообщение автора AHgpeu поблагодарил:
Bagir (Вс мар 22, 2015 10:36 pm)
Рейтинг: 1.37%
mirsum
Сообщения: 65
Зарегистрирован: Вс янв 12, 2014 12:54 pm
Откуда: Белгород
Благодарил (а): 110 раз
Поблагодарили: 1 раз

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение mirsum » Вс мар 22, 2015 8:33 am

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

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение Bagir » Вс мар 22, 2015 9:41 am

Собирается еще как. И кто то из наших уже делали, и на форуме ab-log.ru я видел обсуждения. Если есть время и в добавок на ТЫ с паяльником и программатором, то и карты в руки.
Windows XP, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Jager
Сообщения: 707
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 172 раза

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение Jager » Вс мар 22, 2015 10:00 pm

mirsum писал(а):А MegaD случаем самостоятельно из arduino не собирается?
Легко. У меня так выглядит
Изображение
За это сообщение автора Jager поблагодарил:
mirsum (Вс мар 22, 2015 10:11 pm)
Рейтинг: 1.37%
Аватара пользователя
Bagir
Сообщения: 1331
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 164 раза
Поблагодарили: 294 раза

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение Bagir » Вс мар 22, 2015 10:45 pm

AHgpeu писал(а):если уважаемый Bagir не будет сильно против
Да я только за! Сейчас у меня пока нет каналов для использования ШИМ. Но они точно будут. Пробовать было не на чем, а собрать тестовое железо на столе все руки не доходили. Постараюсь вскоре добавить этот метод.
Windows XP, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
AirKing
Сообщения: 88
Зарегистрирован: Вс фев 01, 2015 10:43 pm
Откуда: Муром
Благодарил (а): 17 раз
Поблагодарили: 7 раз

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение AirKing » Ср мар 25, 2015 2:22 pm

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% с покупок
LutsenkoDenis
Сообщения: 527
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 57 раз
Контактная информация:

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение LutsenkoDenis » Ср мар 25, 2015 3:11 pm

В приведенном коде на первой сроке указано: $reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )

Далее по коду есть условие только для $reclog = 2

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

if ($reclog == 2) {
  $log->trace('setOutputPWM method: '.$cmdUrl);
} 
Где $reclog = 1 ?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
AirKing
Сообщения: 88
Зарегистрирован: Вс фев 01, 2015 10:43 pm
Откуда: Муром
Благодарил (а): 17 раз
Поблагодарили: 7 раз

Re: MegaD, ab-log.ru, MegaD-328, Контроллер ввода/вывода

Сообщение AirKing » Ср мар 25, 2015 3:46 pm

LutsenkoDenis писал(а):В приведенном коде на первой сроке указано: $reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )

Далее по коду есть условие только для $reclog = 2

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

if ($reclog == 2) {
  $log->trace('setOutputPWM method: '.$cmdUrl);
}
Где $reclog = 1 ?
Я подозреваю что тут

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

// Открывает лог если нужно
if ($reclog) { $log = getLogger($this); } 
Получи Cashback до 18% с покупок
Ответить