[Модуль] MegaD (megad)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

Re: Модуль "MegaD"

Сообщение Ivan_A » Чт авг 03, 2017 10:53 am

Да, забыл написать, там где не требуется, везде ставлю "никогда не вызывать родительский метод"
Вот еще эксперимент с длинным и коротким нажатием. Модифицировал код вот так
СпойлерПоказать
if($_GET['m'] == 2) { // прилетело сообщение о длинном нажатии
$this->setProperty('Long', 1);
return;
}
else
{
if ($_GET['m'] == 1) // прилетело сообщение об отпускании клавиши
{
$lng = $this->getProperty('Long');
if ($lng == 1)
{
file_get_contents("http://192.168.2.210/sec/?cmd=11:2");
}
else
{
$str = "http://192.168.2.203/sec/?pt=11&cmd=get";
$st1=substr(file_get_contents($str),0,2);
if ($st1 == 'ON')
{
file_get_contents("http://192.168.2.210/sec/?cmd=11:0");
} ;
file_get_contents("http://192.168.2.203/sec/?cmd=11:2");
}
}
else // прилетело сообщение о нажатии выключателя
{
$this->setProperty('Long', 0);
return;
}
}
Этот код тоже работает, однако не срабатывают короткие нажатия, навскидку те, что менее 0,5 сек.
Складывается стойкое ощущение, что сервер тормозит именно при работе с объектами (как такое возможно не понимаю). В этом коде не использовать их нельзя, так же как и в коде с ютуба (2 действия на одном выключателе). Что делать пока не знаю...
А если хранить IP мег и номера портов в свойствах, наверняка проблема тормозов тоже может всплыть. Сейчас поэкспериментирую.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Модуль "MegaD"

Сообщение Chainik » Чт авг 03, 2017 11:10 am

Ну хранение IP мег и номеров портов в свойствах, думаю, не поможет избежать тормозов. Здесь причину надо искать где-то еще. Может SQL медленно работает, может трафик где-то тормозит.
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Модуль "MegaD"

Сообщение Amarok » Чт авг 03, 2017 12:17 pm

Ivan_A писал(а):Кстати, попутный вопрос - после изменений на самой меге надо пересохранять конфигурацию в мажордоме?
Желательно - да
За это сообщение автора Amarok поблагодарил:
Ivan_A (Пт авг 04, 2017 11:30 am)
Рейтинг: 1.16%
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
barsmaster
Сообщения: 60
Зарегистрирован: Пн апр 03, 2017 12:21 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение barsmaster » Чт авг 03, 2017 5:45 pm

Вопрос к знатокам, помогите понять почему не работает.
Имеется мега 2561 к ней подключен 14IN
По схеме взятой отсюда на 13й пин посажена белая лента.
https://gyazo.com/1ca04e4b5e12b5137c1cde9f3cdaa858

MD видит это так https://gyazo.com/0f523ced58b2c9efc6931064ce20cc67
создал обьект, https://gyazo.com/3de225d478e99a3a4302895f49fa14de
Всё бы хорошо, но если менять свойство Stairs_LED_PWM.level, мега не реагирует.
Так же, при изменении значения на самой меге, в MD значение обновляется примерно через минуту, тоесть срабатывает srv loop.

Что у меня не так? https://gyazo.com/a9bc36f900cdcef4cba7e648f6169830

UPD. к этой же меге на первый порт повешен 7i7o на котором включается реле через статус 0\1, отрабатывает мгновенно изменение статуса обьекта.
Получается грабли именно из-за PWM?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Модуль "MegaD"

Сообщение Chainik » Чт авг 03, 2017 9:44 pm

barsmaster писал(а):MD видит это так https://gyazo.com/0f523ced58b2c9efc6931064ce20cc67
Бросается в глаза "28 NC". Похоже, порт в Меге вы сконфигурировали, а обновленную конфигурацию модулем MegaD не перечитали (Read config). Порт должен видеться из модуля как Output.
Если не поможет, тогда идем дальше.
barsmaster писал(а):создал обьект, https://gyazo.com/3de225d478e99a3a4302895f49fa14de
Всё бы хорошо, но если менять свойство Stairs_LED_PWM.level, мега не реагирует.
После изменения свойства что-то должно инициировать подачу команд Меге (метод, код PHP, скрипт и т.п.). Не увидел у вас метода/кода PHP/скрипта, который должен передавать команды Меге.
barsmaster писал(а):Так же, при изменении значения на самой меге, в MD значение обновляется примерно через минуту, тоесть срабатывает srv loop.
По поводу целесообразности srv loop уже говорилось в этой ветке. Мега по идеологии должна опрашиваться со стороны сервера (а не сама пытаться сообщать ему что-то). Команды тем более должны подаваться сервером.
В общем, алгоритм, примерно, такой. Из какого-нибудь объекта, например, слайдера, меняется значение вашего свойства. После изменения значения свойства подается команда на Мегу с новым значением для управляемого порта.
Вот работающий пример со слайдером, правда из другой ветки (viewtopic.php?f=14&t=1832&p=56900#p56900).
barsmaster писал(а):UPD. к этой же меге на первый порт повешен 7i7o на котором включается реле через статус 0\1, отрабатывает мгновенно изменение статуса обьекта.
Получается грабли именно из-за PWM?
Нет, дело не в PWM. Первый порт - это ВХОД, а P28 на 14IN - это ВЫХОД. Тут несколько другой, на мой взгляд, подход к настройке.

Попробуйте сделать слайдер, связав его с вашим свойством "Stairs_LED_PWM.level". А в поле "код" поместите примерно то же, что в примере. Все должно получиться.
За это сообщение автора Chainik поблагодарил:
barsmaster (Пт авг 04, 2017 10:47 am)
Рейтинг: 1.16%
Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

Re: Модуль "MegaD"

Сообщение Ivan_A » Пт авг 04, 2017 9:16 am

Всем снова здравствуйте.
Продолжаю разбираться с тормозами.
Написал новый код обработки длинного нажатия (как мне кажется более красивый, и действие при длинном нажатии выполняется не по отпусканию клавиши, а сразу, как только прилетает m=2). Этот код вообще ничего не делает при нажатии. Стало работать быстрее и стабильнее, однако очень короткие нажатия все равно иногда игнорируются. Возможно сервер не может обработать сообщения, идущие друг за другом с малым интервалом времени?
Кому интересно вот код:
СпойлерПоказать
if($_GET['m'] == 2) { // прилетело сообщение о длинном нажатии
file_get_contents("http://192.168.2.210/sec/?cmd=11:2");
$this->setProperty('Long', 1);
}
else
{
if ($_GET['m'] == 1) // прилетело сообщение об отпускании клавиши
{
$lng = $this->getProperty('Long');
if ($lng != 1)
{
$str = "http://192.168.2.203/sec/?pt=11&cmd=get";
$st1=substr(file_get_contents($str),0,2);
if ($st1 == 'ON')
{
file_get_contents("http://192.168.2.210/sec/?cmd=11:0");
file_get_contents("http://192.168.2.203/sec/?cmd=11:0");
}
else
{
file_get_contents("http://192.168.2.203/sec/?cmd=11:1");
};
}
else
{
$this->setProperty('Long', 0);
};
};
};
Аватара пользователя
barsmaster
Сообщения: 60
Зарегистрирован: Пн апр 03, 2017 12:21 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение barsmaster » Пт авг 04, 2017 10:48 am

Chainik писал(а):Бросается в глаза "28 NC". Похоже, порт в Меге вы сконфигурировали, а обновленную конфигурацию модулем MegaD не перечитали (Read config). Порт должен видеться из модуля как Output.
Помогло!!! Спасибо огромное!
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Модуль "MegaD"

Сообщение Chainik » Пт авг 04, 2017 7:52 pm

Ivan_A писал(а):Продолжаю разбираться с тормозами.
...
Возможно сервер не может обработать сообщения, идущие друг за другом с малым интервалом времени?
Может быть попробовать запустить все тоже самое из-под другого железа.
И соединить Мегу с этим новым железом напрямую (без Wi-Fi, свичей и т.п.)...
Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

Re: Модуль "MegaD"

Сообщение Ivan_A » Пн авг 07, 2017 9:12 am

Это если только в качестве эксперимента, и непросто это. Сервачок там настоящий, хоть и древний, нахаляву достался. Мег 15 штук, без коммутатора никак.
Аватара пользователя
barsmaster
Сообщения: 60
Зарегистрирован: Пн апр 03, 2017 12:21 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение barsmaster » Ср авг 09, 2017 3:07 pm

Объясните тупому, почему метод вызывается дважды?
Имеем мегад 14ин и 7и7о, в 14ин подключен датчик протечки
https://gyazo.com/ded29ffdcb3a49dc2b8aff3106f58eaf
который просто замыкает реле если увидел воду, вроде как здесь всё работает.
Решил через MD сделать оповещения о срабатывании разных датчиков,
Создал обьект, создал метод, завязал их на вход меги
https://gyazo.com/6e81e757a8006e3301a8b96b6c6e5e11

метод простейший, тестовый https://gyazo.com/9872a373fe1c0716794e52b931aef1e5
так вот, если поставить return: say("Протечка",1);return; пишет в консоли два раза
если убрать return: say("Протечка",1); говорит бесконечно.

Где я ошибся?
Ответить