Страница 26 из 228

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

Добавлено: 29 янв 2017, 17:36
filippovsky
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, естественно, не переключается.

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

Добавлено: 29 янв 2017, 18:17
Alex_Jet
При допиливании плагина 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

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

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

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

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

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

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

Добавлено: 29 янв 2017, 21:35
filippovsky
Andrey_B, спасибо, буду исследовать.

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

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

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

Добавлено: 30 янв 2017, 11:41
Andrey_B
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". Все ясно. Порт включен.

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

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

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

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

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

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

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

Добавлено: 01 фев 2017, 19:01
Andrey_B
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".

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

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

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

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

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

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

Добавлено: 07 фев 2017, 12:15
Andrey_B
http://ab-log.ru/files/File/megad-2561/ ... a1-hex.zip

- Добавлена поддержка протокола MQTT (в тестовом режиме!). Обновление со сбросом настроек.
megad-2561-mqtt-cf.gif
megad-2561-mqtt-cf.gif (6.79 КБ) 7587 просмотров
В сетевых настройках появилась новая опция "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);
}
?>
Подчеркиваю, что статус этой версии: глубокая бета.

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

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

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

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

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

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

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

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

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

Добавлено: 11 фев 2017, 14:25
hawkeye
Подскажите, какой самый простой путь вернуть управление девайсом, если прошился но новую версию, но без сброса настроек(?
По сети стало недосутпно, при запуске посылает в сеть два странных арп запроса:
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

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

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