Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
filippovsky
Сообщения: 75
Зарегистрирован: 30 авг 2015, 21:44

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение filippovsky » 29 янв 2017, 17:36

Andrey_B, спасибо за быстрый ответ.
Пока не удалось решить проблему, но могу чуть подробнее описать поведение Меги при разных настройках srv-loop и Act.

При установленном srv-loop наблюдается описанная выше ситуация.

При снятом srv-loop - каждое нажатие на кнопку успешно замечается сервером, но при этом результат аналогичный: порт 7 включается и тут же отключается, т.е. похоже что все-таки 7:2 обрабатывается при нажатии дважды, один раз самой Мегой по полю Act, а второй раз - прилетевшей командой "7:2" от сервера.

Сделал поле Act пустым при снятом srv-loop.
Первое нажатие на кнопку ни к чему не приводит, каждое последующее - переключает порт 7, т.е. в этом случае работает только "7:2"" от сервера.

Сделал поле Act пустым при установленном srv-loop.
Любое нажатие на кнопку работает нормально - переключает порт 7, т.е. в этом случае работает только "7:2"" от сервера.
Т.е. это нормально работающий режим, но в этом случае когда сервер отключен - порт 7, естественно, не переключается.

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Alex_Jet » 29 янв 2017, 18:17

При допиливании плагина MegaD для iH. Обратили внимание на следующее:
- если от контроллера на сервер прилетает request типа mod_megad.php?pt=16, то сервер обрабатывает команду и возвращает ответ, контроллер производит действие:

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

29.01 20:54:43.0650 192.168.12.21 => localhost:10021 HTTP GET /mod_megad.php?pt=16&cnt=1
29.01 20:54:43.0652 MG3?23=TG&
29.01 20:54:43.0653 192.168.12.21 <= localhost:10021 23:2
29.01 20:54:46.0124 192.168.12.21 => localhost:10021 HTTP GET /mod_megad.php?pt=17&cnt=1
29.01 20:54:46.0125 MG3?24=TG&
29.01 20:54:46.0126 192.168.12.21 <= localhost:10021 24:2
- если от контроллера на сервер прилетает request типа mod_megad.php?st=1, то сервер обрабатывает команду и возвращает ответ, однако контроллер не производит действие:

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

29.01 11:31:39.0545 192.168.12.21 => localhost:10021 HTTP GET /mod_megad.php?st=1
29.01 11:31:39.0553 MG3?22=1&
29.01 11:31:39.0554 192.168.12.21 <= localhost:10021 22:1
В чем может быть проблема?

Еще интересен такой момент - когда контроллеру даем команду по 80-му порту, то он непременно возвращает Done (см.лог ниже), в других случаях нет (см. выше):

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

29.01 11:39:24.0895 192.168.12.21 => localhost:10021 HTTP GET /mod_megad.php?st=1
29.01 11:39:24.0900 192.168.12.21 <= localhost:10021 
29.01 11:39:24.0911 Redirect to MG3
29.01 11:39:24.0913 localhost => 192.168.12.21:80 HTTP GET /sec/?cmd=22:1
29.01 11:39:24.0915 MG3?22=1&
29.01 11:39:24.0935 localhost <= 192.168.12.21:80 HTTP Done

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 29 янв 2017, 21:04

Alex_Jet, контроллер действительно не выполняет команды сервера по "событию" st=1. Так запрограммировано.
Эту логику можно изменить. Не помню чем именно я руководствовался, когда сделал именно так.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 29 янв 2017, 21:14

filippovsky, в вашем случае явно имеют место какие-то локальные нюансы сетевых настроек (вы пишете, что используете PPTP, то есть сервер где-то не рядом.).
Ничего из описанного вами у меня не проявляется.

Устройство выполняет Act по таймауту. Вы описываете ситуацию, похожую на то, что пакет от сервера приходит с большой задержкой. Поэтому выполняется и Act и команда сервера.
Вопрос к вашей конфигурации - почему пакет приходит на устройство с задержкой? Нужно смотреть дамп трафика.

filippovsky
Сообщения: 75
Зарегистрирован: 30 авг 2015, 21:44

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение filippovsky » 29 янв 2017, 21:35

Andrey_B, спасибо, буду исследовать.

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Alex_Jet » 30 янв 2017, 06:30

Andrey_B писал(а):Alex_Jet, контроллер действительно не выполняет команды сервера по "событию" st=1. Так запрограммировано.
Эту логику можно изменить. Не помню чем именно я руководствовался, когда сделал именно так.
Понятно. Для меня это поведение было странным, поскольку при вводе функционала RTC Вы предлагали при приеме сервером st=1 отправлять пакет для установки внутренних часов MegaD. Выходит этот функционал при использовании входящего порта сервера отличного от 80 также не работает (сам не проверял). Если обратите внимание на 3-й лог в моем предыдущем посте, то увидите "хак" - контроллер по порту 10021 отправляет st=1 серверу, сервер при приеме этого сообщения обращается по 80-му порту к контроллеру с командой и при этом контроллер выполняет ее!
Будет ли какой-нибудь комментарий по поводу возвращения Done только по 80-му порту? Можно этот функционал ассигнировать ко всем портам, которые могут использоваться при работе сервера с MegaD?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 30 янв 2017, 11:41

Alex_Jet, необходимо напомнить базовые принципы работы устройства.
Если говорить очень упрощенно и грубо, то HTTP-протокол работает по принципу: "запрос-ответ". Не "запрос-запрос", не "ответ-запрос" и не "ответ-ответ". Это важно.
Одна сторона отправляет, скажем, "GET-запрос". Другая сторона возвращает некоторые данные.

Когда контроллер связывается с сервером, он отправляет GET-запрос (в запросе присутствует некоторая полезная информация, например, st=1, pt=0 и т.д.)
Сервер отвечает ему "командами" самого устройства. Например: "7:2".
Никакое другое управление устройством через такие ответы невозможно (не заложено в прошивку). Только команды управления выходами. Не конфигурирование, не изменение параметров, только управление выходами через стандартные команды. И это логично. Мало ли какой "мусор" решит вернуть сервер по ошибке... Переключение выходов - это не то же самое, что изменение пароля и IP-адреса.
В ответе сервер не может послать устройству GET-запрос. А именно они используются для всего остального.

Таким образом.
Управлять выходами контроллера можно двумя способами.
1. В ответах на GET-запросы. Сработал вход, устройство отправило серверу ?pt=0, а в ответ сервер отвечает: "7:2"
2. GET-запросами к самому контроллеру. В этом случае сервер отправляет устройству GET-запрос вида: "?cmd=7:2" (а контроллер, к слову, возвращает ответ "Done").

Настраивать устройство можно только через GET-запросы от сервера.

Теперь вернемся к вашему сообщению.
Сервер не может в ответе st=1 установить часы в MegaD. Для этого ему нужно отправить контроллеру GET-запрос.
Это легко. Алгоритм следующий:
1. Получили st=1
2. Закрыли текущее TCP-соединение
3. Открыли новое TCP-соединение и отправили HTTP GET контроллеру на установку часов.
Точно также можно на "событие" st=1 и управлять выходами. Не ответом, а отдельным запросом, который отправляется сразу после закрытия TCP-сессии. По скорости эти, кстати, практически одинаково. Разница в микросекундах.
Вот, почему обработка команд на st=1 в целом не так уж и важна.

При чем здесь порты я не понял. В чем заключается "хак" также не понятно.
И контроллер и устройство могут работать с 80 портом. Никаких ограничений по этому поводу нет абсолютно.

Ответ "Done" и порт никак не связаны.
"Done" устройство возвращает ТОЛЬКО на GET-запросы от сервера на выполнение команд, например, "?cmd=7:2"
Если команды сервер отправлены в ответе на запрос самого устройства (например, ?pt=0), то оно просто выполняет команды и ничего не возвращает, ибо ничего вернуть в рамках протокола HTTP оно и не может.
Как проверить, выполнены ли команды? Ну, сам факт корректного закрытия TCP-сессии со стороны устройства будет говорить, что все прошло успешно. Но на уровне приложения такую проверку сделать трудно. Поэтому, если очень хочется, можно сразу же после отправки команд и закрытия TCP-сессии, проверить состояние порта новым GET-запросом вида ?pt=0&cmd=get. Тогда вы точно будете уверены, что выход находится в нужном состоянии.
Тогда схема взаимодействия примерно такая:
1. Получили ?pt=0 (или st=1 или неважно что)
2. Ответили: "7:2"
3. Закрыли TCP-соединение (это на уровне приложения сделать можно. В PHP, например, это делается с помощью функции flush())
4. Отправили запрос: ?pt=0&cmd=get
5. Получили "ON". Все ясно. Порт включен.

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Alex_Jet » 30 янв 2017, 13:37

Андрей, большое спасибо за разъяснения! Много вопросов разрешились сами собой. Спасибо за небольшой ликбез по TCP-соединениям...у меня как-то не находилось возможности почитать и вникнуть в глубь данной темы.

matikus
Сообщения: 12
Зарегистрирован: 26 ноя 2015, 11:43

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение matikus » 31 янв 2017, 20:39

Andrey_B, возможно мой вопрос озвучивался ранее, но спрошу еще разок: сколько датчиков DS18B20 можно повесить шиной на MegaD-2561 для стабильной работы? Спасибо!

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 31 янв 2017, 21:45

matikus, на этот вопрос трудно ответить однозначно. С одной стороны количество датчиков ограничено размеров сетевого буфера, с другой стороны качеством кабельной инфраструктуры и правильностью подключения.
Если говорить о применении шины в "домашних" условиях, то возможностей контроллера и витой пары на скрутках может и должно хватить. Но практика главный критерий истины. А значит могут быть нюансы. Я лично больше 10 датчиков на одном порту не тестировал. Шина в доме не везде и не всегда удобна. Часто проще, надежнее, а для неподготовленных пользователей и понятнее подключать датчики по схеме 1 порт - 1 датчик.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 01 фев 2017, 19:01

http://ab-log.ru/files/File/megad-2561/ ... a9-hex.zip

- Добавлены новые команды для управления диммируемыми выходами. (в тестовом режиме)

Лирическое отступление.
Напомню, что контроллер поддерживает три вида специальных команд в сценариях: +, - и ~
Все эти команды работают только при взаимодействии с "кнопками" в режиме удержания.
Например, если в Act прописано: 12:+, то при удержании кнопки яркость/мощность будет увеличиваться. Также работает команда "-".
Команда "~" позволяет управлять яркостью одной клавишей.

Плавно менять яркость с помощью сервера можно было двумя способами.
1. С помощью отправки серии пакетов с запросом виде cmd=yy:xxx, где yy - номер порта, а xxx - значение ШИМ (PWM).
2. С использованием опции smooth, с помощью которой можно было отправить только один пакет с заданной яркостью (например, cmd=12:255), а контроллер самостоятельно увеличивал/уменьшал яркость в зависимости от заданного в этой опции значения скорости.

Новые команды дополняют и расширяют заложенные функции.
Команда "^" запускает процесс увеличения яркости. Например: 12:^
Команда "v" запускает процесс уменьшения яркости. Например: 12:v

В отличие от "+-~" эти команды может использовать сервер.
Таким образом, сервер не задает конечное значение яркости, а запускает процесс изменения.
Эти же команды можно использовать в сценариях. Причем в отличие от "+-~" новые команды можно комбинировать с другими. Например: 12:^;7:2

Но и это еще не все. В этой же команде можно передавать скорость изменения яркости от 1 до 9. Пример: 12:^2 (чем меньше цифра, тем быстрее происходит изменение. По умолчанию: 5)
Для того, чтобы остановить процесс изменения яркости достаточно снова выполнить одну из команд "^" или "v".

Эти команды расширяют возможности сервера для управления диммируемыми каналами.
В автономном режиме (без сервера) эти команды можно использовать с двумя кнопками, когда нажатие на одну кнопку будет изменять яркость в одну сторону (без необходимости удержания), а нажатие на вторую кнопку в другую сторону.

kod.begemot
Сообщения: 400
Зарегистрирован: 21 сен 2013, 00:38

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение kod.begemot » 06 фев 2017, 21:31

Andrey_B, предложение: добавить в прошивку возможность использования протокола Wiegand 26.
Поясню, для чего. Вот сейчас есть режим "контроллер доступа" - замечательно и удобно. Снаружи ставим недорогой считыватель, отдающий данные по протоколу Dallas, внутри мега "рулит" замком. Также рулим замком с сервера, и знаем - какой брелок запросил разрешение. Функционал отличный! Но на мой взгляд удобнее иметь снаружи не только считыватель Proximity/EM Marine и т.п., а ещё и клавиатуру - код набрал - и прошел.. На уровне прошивки/сервера нетрудно отметать / фиксировать попытки перебора.
Есть, конечно, считыватели с выходом Dallas, и клавиатурой, но или я плохо искал, или их и правда очень мало, и они в основном внутренние. Есть конвертеры Wiegand 26 <-> Dallas 1990A, но стоят они малость негуманно.
Почему поднимаю эту тему - я долгое время использовал внешний контроллер с клавиатурой/считывателем RFID брелков. Удобно. Но после того как хулиганьё его разбили (был хоть и металлический, но то хорошего камня мало что спасет), и я его демонтировал - я обнаружил что замок отомкнулся как только я пошевелил устройство - замкнуло что-то в контроллере, а из него выходила команда на открытие замка.. Хорошо что хулиганы, а не воры.
Сейчас использую считыватель Dallas, и решение об отмыкании замка принимается внутри, только клавиатуры я лишился. И уже был один случай, когда пришлось искать терминал, чтобы отомкнуть замок - так как калитка захлопнулась, а брелки дома остались.
Последний раз редактировалось kod.begemot 07 фев 2017, 20:55, всего редактировалось 1 раз.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 07 фев 2017, 10:01

kod.begemot, реализация Wiegand 26 планируется. В скором времени проведу тестирование работы с кодовой панелью.
Кстати, конвертор Wiegand-TM стоит порядка 1300 руб. Вполне гуманная стоимость.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 07 фев 2017, 12:15

http://ab-log.ru/files/File/megad-2561/ ... a1-hex.zip

- Добавлена поддержка протокола MQTT (в тестовом режиме!). Обновление со сбросом настроек.
megad-2561-mqtt-cf.gif
megad-2561-mqtt-cf.gif (6.79 КБ) 7595 просмотров
В сетевых настройках появилась новая опция "SRV Type", которая может принимать значения: HTTP или MQTT

После старта устройство соединяется с сервером и подписывается на топик: megad/14/cmd
Здесь 14 - последний байт IP адреса устройства. Если прописан MegadID, то используется он.

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

1486454199: New connection from 192.168.0.14 on port 1883.
1486454199: New client connected from 192.168.0.14 as megad-14 (c1, k30).
1486454199: Sending CONNACK to megad-14 (0, 0)
1486454200: Received SUBSCRIBE from megad-14
1486454200:     megad/14/cmd (QoS 0)
1486454200: megad-14 0 megad/14/cmd
1486454200: Sending SUBACK to megad-14
В данный момент при срабатывании входа устройство публикует информацию в топике: megad/14
Принцип формирования описан выше

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

1486454392: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14', ... (22 bytes))
Передача информации происходит в JSON-формате

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

{"port":"0","cnt":"1"}
Соответственно "сервер", подписанный на megad/14 и получивший информацию о событии, публикует сообщение в топике megad/14/cmd
Формат этого сообщения пока прежний и соответствует стандартным командам сценариев: 7:2;8:2 (пример)

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

1486454501: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14', ... (22 bytes))
1486454501: Sending PUBLISH to server (d0, q0, r0, m0, 'megad/14', ... (22 bytes))
1486454501: Received PUBLISH from server (d0, q0, r0, m0, 'megad/14/cmd', ... (7 bytes))
1486454501: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (7 bytes))
В качестве "брокера" можно использовать mosquitto.
В качестве "сервера" можно использовать PHP-скрипт с библиотекой phpMQTT.php

Вот грубый пример такого "сервера".

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


<?php
require("phpMQTT.php");
$mqtt = new phpMQTT("192.168.0.250", 1883, "server");

if(!$mqtt->connect()){
	exit(1);
}

$topics['megad/14'] = array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics,0);

while($mqtt->proc()){}

$mqtt->close();

function procmsg($topic,$msg){
	global $mqtt;
		echo "Msg Recieved: ".date("r")."\nTopic:{$topic}\n$msg\n";
		$mqtt->publish("megad/14/cmd","8:2;7:2",0);
}
?>
Подчеркиваю, что статус этой версии: глубокая бета.

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение MSapogov » 07 фев 2017, 14:29

У меня аж дыхание перехватило... Я сначала думал темой ошибся и зашел в "ESP8266 MegaD api ", а нет... все верно в "Прошивка MegaD-2561".
Огромное Спасибо!!!

kod.begemot
Сообщения: 400
Зарегистрирован: 21 сен 2013, 00:38

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение kod.begemot » 07 фев 2017, 20:54

Спасибо большое за надежду касаемо Weigand!! :)
Andrey_B писал(а):...
Кстати, конвертор Wiegand-TM стоит порядка 1300 руб. Вполне гуманная стоимость.
Я согласен, это - вполне гуманная сумма на общем фоне затрат. Как раз равна стоимости неплохого электромаханического замка. Вот только без замка не обойтись, а без конвертера - хотелось бы :) А в моём случае, когда только в пределах двора планирую переоснастить такими системами 4 двери + калитку (взамен простых контроллеров) получается уже сумма заметная.

cheese
Сообщения: 18
Зарегистрирован: 07 фев 2017, 22:37

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение cheese » 11 фев 2017, 00:37

Все круто, но есть один момент. Датчик HTU21D показывает нормальные значения. Но значения выводятся вот такие:
Температура "25.00", влажность "hum:23.00".
Какбы это убрать этот "hum:"? Чтобы по влажности выводило только цифру. А то, к примеру в majordomo, свойство температуры - цифры, а свойство влажности - "hum:"цифры.
Не могли бы Вы исправить это в новой прошивке?
Ну и еще прошу за BMP180.
Да и в принципе, ИМХО, было бы круто сделать "нативную" поддержку I2C датчиков, подключение которых описывается на сайте. Как по мне, то человек сначала изучает, как и что можно сделать не имея навыков в программировании, на сайте. Соответственно перед покупкой megad-2561 я долго все читал, и заказал, в основном датчики с нативной поддержкой.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 11 фев 2017, 10:08

cheese, обработка выдачи - дело сервера и серверного ПО. Нельзя просто так менять формат выдачи, так как это может поломать работу других серверных программ.
Особенность BMP180 заключается в том, что необходимо хранить в памяти или при каждом обращении получать (что не оптимально со всех точек зрения) калибровочные коэффициенты. Но с другой стороны датчик атмосферного давления нужен всего один на всю систему. С этой точки зрения "нативную" поддержку BMP180 можно реализовать при условии, что к контроллеру будет подключен только один датчик. Очень жаль тратить ресурсы на хранение калибровочных коэффициентов для каждого порта, когда в этом нет никакой необходимости.

hawkeye
Сообщения: 98
Зарегистрирован: 06 окт 2016, 22:16

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение hawkeye » 11 фев 2017, 14:25

Подскажите, какой самый простой путь вернуть управление девайсом, если прошился но новую версию, но без сброса настроек(?
По сети стало недосутпно, при запуске посылает в сеть два странных арп запроса:
14:27:08.580360 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 168.110.254.192 tell 192.168.110.14, length 46
14:27:08.745148 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 168.110.254.192 tell 192.168.110.14, length 46

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 11 фев 2017, 14:28

hawkeye, если контроллер второй ревизии, то можно сбросить настройки в заводские с помощью кнопок, расположенных рядом с разъемом XT2.
Если контроллер первой ревизии, то с помощью скрипта megad-2561-cfg.php
См. прошивка в режиме восстановления
http://ab-log.ru/smart-house/ethernet/m ... re-upgrade
Только нужно добавить ключ --ee

Ответить