Подключение контроллера MegaD-328

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Dragon
Сообщения: 96
Зарегистрирован: Ср авг 27, 2014 6:14 am
Благодарил (а): 36 раз
Поблагодарили: 0

Re: Подключение контроллера MegaD-328

Сообщение Dragon » Ср янв 21, 2015 1:28 am

Дело не в потреблении, у меня тоже сервер работает уже второй месяц, просто недавно накрылся блок питания, и тогда заметил такую канетель со статусом.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Подключение контроллера MegaD-328

Сообщение Bagir » Ср янв 21, 2015 1:33 am

Понятно, ну бывает, у меня когда то тоже помирал один китайский легкий ПБ. Второй фирменный дул очень теплым ветерком, но так и не отдал душу.
Конечно же в любом случае, всегда, правильнее будет при старте МД разово синхронизировать порты с Мегой. Только надо не полениться, написать этот код, и все протестить. Пример есть. Будет время, сделаю это и у себя на всех Мегах.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Dragon
Сообщения: 96
Зарегистрирован: Ср авг 27, 2014 6:14 am
Благодарил (а): 36 раз
Поблагодарили: 0

Re: Подключение контроллера MegaD-328

Сообщение Dragon » Ср янв 21, 2015 1:29 pm

Bagir: подскажите, делал все по вашему методу но почему то у меня не отображается свойство aliveTimeOut в объекте MegaD, хотя все остальные свойства отображает.
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Подключение контроллера MegaD-328

Сообщение zelevova » Ср янв 21, 2015 1:46 pm

aliveTimeOut - это параметр параметр указывающий время в течении которого считается что мега жива с последней проверки.
По умолчанию он 15*60, т.е. 15 минут.
Можно задать его любым в секундах.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Dragon
Сообщения: 96
Зарегистрирован: Ср авг 27, 2014 6:14 am
Благодарил (а): 36 раз
Поблагодарили: 0

Re: Подключение контроллера MegaD-328

Сообщение Dragon » Ср янв 21, 2015 4:38 pm

я понимаю для чего это свойство, просто не могу понять куда и что прописывать.
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: Подключение контроллера MegaD-328

Сообщение Jager » Ср янв 21, 2015 6:33 pm

Bagir писал(а):Если кто еще не в курсе, предлагаю освоить момент, как писать и добавлять свои функции в МД. Это очень просто. Открываем на диске путь где лежат файлы МД. Забираемся вот сюда ...\majordomo\lib\
Что то я не нашел такой путь, можно подробнее?
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Подключение контроллера MegaD-328

Сообщение Kod.Begemot » Ср янв 21, 2015 6:42 pm

Не так давно Андрей добавил в прошивку МегаД возможность плавного включения и выключения диммируемого порта. Начиная с версии 3.28b6 можно ещё и управлять скоростью нарастания/спада через команды.
Вот такого вида команды: http://192.168.0.14/sec/?pt=12&pwm=100&cnt=10
Что, к примеру, означает изменить значение PWM канала 12 до 100 примерно за 10 секунд.
Я создал метод, реализующий эту возможность. Хотя это и очень просто (сделал на основе метода из набора предложенного Bagir), но всё-же выложу здесь.

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

// Expects 'output', 'value' 'cnt' in $params
$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['cnt']));
$log = getLogger($this);
$log->trace('setOutput method: '.$cmdUrl);
getURL($cmdUrl, 0); 
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Подключение контроллера MegaD-328

Сообщение Bagir » Ср янв 21, 2015 8:23 pm

Увы у меня не на чем попробовать. Так то действительно можно новый метод добавить, чтобы не усложнять настройку имеющегося, раздувая его параметры. Без железки конечно трудно сказать. Еще не приобрел.
Тут баг нашелся. Температура упала до нуля, а в коде if ($dt)... И мега признается неживая. Я это исправил.
Изменения отправил в Connect. Комментарии позже.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Подключение контроллера MegaD-328

Сообщение Bagir » Ср янв 21, 2015 8:46 pm

Jager писал(а):
Bagir писал(а):Если кто еще не в курсе, предлагаю освоить момент, как писать и добавлять свои функции в МД. Это очень просто. Открываем на диске путь где лежат файлы МД. Забираемся вот сюда ...\majordomo\lib\
Что то я не нашел такой путь, можно подробнее?
Ищите просто ...\lib\ в каталоге с файлами МД. Папка majordomo действительно только у меня.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Баг с нулём

Сообщение Bagir » Чт янв 22, 2015 11:04 am

Мега признавалась неживая, если с ее термодатчика приходила температура 0 градусов. Баг исправлен. Смотрите Connect и поправьте у себя.
Ранее температура и свойство alive писались в методе getData в группе case 'tget': Сейчас там просто команда на запуск метода incomingMessage с передачей ему температуры (ответа Меги).

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

$this->callMethod('incomingMessage', array('tget'=>$dt));
А в общей части метода incomingMessage появился код, который записывает свойство температуры и признает Мегу живой. Этот же кусок кода сработает и при получении любого сообщения от Меги. Проверяется нулевая длинна текста ответа !strlen($dt)

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

$reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )

$ot=$this->object_title;      

// Открывает лог если нужно
if ($reclog) { $log = getLogger($this); }

$this->setProperty('alive',1);
$alive_timeout=(int)$this->getProperty('aliveTimeOut');
if (!$alive_timeout) { $alive_timeout=15*60; }
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);


/* Получение сообщения с данными температуры внутреннего датчика */
$dt=$params['tget'];
if (isset($dt)) {
  // Проверить $dt на число и Записать в свойство объекта 
  if (is_numeric($dt)) {  
    $this->setProperty('temperature', $dt);
  } else {
    if ($reclog) { $log->error('Failed to get data internal temperature sensor for object '.$ot); }
  }
  // Сразу установить флаг "не живой" если в $dt ничего нет
  if (!strlen($dt)) {  
    $this->setProperty('alive',0);
  }  
} 
За это сообщение автора Bagir поблагодарил:
zelevova (Пт янв 23, 2015 11:47 pm)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить