ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

MegaD-328 API (версия прошивки 3.34 и выше)

25/11/2013 18:01:16

На данной странице представлено API для устройства MegaD-328.
Все взаимодействие с устройством происходит по протоколу HTTP с помощью стандартных GET-запросов.

Сетевые и системные настройки ("Netconf")

Параметр "cf"
Если значение параметра "cf" равно 1, программа обрабатывает и сохраняет в памяти значения переменных, отвечающих за системные и сетевые настройки

pwd: пароль для доступа к Web-интерфейсу устройства (макс. 3 байт)
eip: IP-адрес устройства
sip: IP-адрес сервера
sct: скрипт, который вызывается на сервере в случаях, заданных пользователем (макс. 15 байт)
pr: Пресет. Значения: 0 - пресет не установлен, 1 - пресет для исполнительного модуля MegaD-7I7O
tc: Проверка значений встроенного температурного сенсора. Значения: 0 - не проверять, 1 - проверять
at: Значение температуры, при достижении которого в случае, если задана проверка встроенного температурного датчика, устройство будет отправлять сообщения на сервер

Пример
http://192.168.0.14/sec/?cf=1&eip=192.168.0.14&pwd=sec

Если значение параметра "cf" рано 2, то устройство сохраняет в памяти такие параметры как Megad-ID и srv-loop

mdid: или Megad-ID - это идентификатор устройства, который может использоваться сервером для идентификации конкретного контроллера. В случае, если этот параметр прописан, при любом срабатывании входа на сервер дополнительно передается параметр mdid с установленным для устройства значенеим. Это позволяет программному обеспечению сервера идентифицировать устройство не по IP-адресу, а по его уникальному идентификатору. Также это поле используется в случае работы с удаленным сервером (например megad.ru), так как удаленный сервер не может определить IP-адрес устройства в частной сети.

sl: или srv-loop - если установить значение этого параметра "1", устройство раз в минуту будет связываться с сервером и сообщать ему состояние всех своих портов, а также обрабатывать команды сервера. Этот режим также полезен в случае работы с удаленным сервером, когда устройство находится в частной сети и сервер не может обратиться к нему напрямую.

Конфигурирование и управления портами

pn: Номер порта, с которым осуществляется работа, начиная с 0
pty: Тип порта.Значения.
     255 - NC. Не сконфигурирован
     0 - In. Порт является Входом
     1 - Out. Порт является Выходом
     2 - ADC. ЦАП (для подключения аналоговых датчиков, данная опция доступна не для всех портов!)
     3 - DSen. К порту подключен цифровой датчик

Доступные параметры, если порт настроен как In (Вход)

ecmd: Action. Сценарий по умолчанию, в котором задано управление Выходами (OUT) устройства в случае изменения состояния входа. См. раздел "Сценарии" (макс: 11 байт). Примечание. Сценарий выполняется всегда, если не указан сервер или если сервер указан, но не отвечает в течение 3 секунд. Сценарий по умолчанию не выполняется, если сервер указан и доступен.
eth: Net Action. URL, который вызывается устройством в случае изменения состояние входа (макс. 35 байт). Примечание. URL Net Action вызывается всегда, не зависимо от доступности сервера.
m: Режим обработки изменений состояния порта. Для наглядности приведены примеры с выключателем/кнопкой.
     0 - Переход из разомкнутого в замкнутое состояние (устройство реагирует только на нажатие кнопки).
     1 - Переход из разомкнутого в замкнутое состояние и наоборот (устройство реагирует как на нажатия, так и на отпускание кнопки)
     2 - Переход из замкнутого в разомкнутое состояние (устройство реагирует только на отпускание кнопки)
misc: Модификатор обработки изменений состояния порта (в Web-интерфейсе выполнен в виде чекбокса рядом с выбором режима порта Mode)
     0 - Обычный режим работы
     1 - При наличии (доступности) сервера устройство всегда отправляет информацию на сервер в режиме P&R, а в с случае отсутствия сервера работает так, как указано в поле Mode.
naf: Модификатор работы с полем NetAction
     0 - Обычный режим работы
     1 - URL, прописанный в NetAction вызывается только в случае отсутствия или недоступности сервера
 

Доступные параметры, если порт настроен как Out (выход)

d: Default state. Состояние выхода по умолчанию при включении устройства.
     0 - Порт выключен
     1 - Порт включен
m: Mode. Режи работы выхода.
     0 - SW. Режим ключа. Состояние вкл/выкл
     1 - PWM. Режим ШИМ. (Данная опция доступна не для всех портов!)
pwm: Значение ШИМ. В случае, если порт настроек как ШИМ. Значения от 0 до 255

Доступные параметры, если порт настроен как ADC (АЦП)

m: Mode. Режим обработки изменений состояния порта
     0 - Norm. Значения порта автоматически не отслеживаются
     1 - > Порт считается активным, если значение больше заданного порога. Активностью считается момент перехода через пороговое значение
     2 - < Порт считается активным, если значение меньше заданного порога. Активностью считается момент перехода через пороговое значение
     3 - <> Порт считается активным, если значение проходит порог как в меньшую, так и в большую сторону.
misc: Val. Пороговое значение
ecmd: Action. Сценарий по умолчанию, в котором задано управление Выходами (OUT) устройства в случае изменения состояния входа. См. раздел "Сценарии" (макс: 11 байт). Примечание. Сценарий выполняется всегда, если не указан сервер или если сервер указан, но не отвечает в течение 3 секунд. Сценарий по умолчанию не выполняется, если сервер указан и доступен.
eth: Net Action. URL, который вызывается устройством в случае изменения состояние входа (макс. 35 байт). Примечание. URL Net Action вызывается

Для Action и NetAction поддерживаются команды 3 и 4! Подробнее смотрите раздел "Сценарии (Action)".

Доступные параметры, если порт настроен как DSen (Цифровой датчик)

d: Sensor. Тип подключенного датчика
     1 - DHT11
     2 - DHT22
     3 - DS18B20 (1-wire)
     4 - iButton Reader (считыватель ключей iButton / Proximity EM Marine и других устройство, поддерживающих протокол Dallas/1-wire

В случае установки типа сенсора DS18B20, в настройках порта добавляется вся функциональность, описанная для АЦП порта

m: Mode. Режим обработки изменений состояния порта
     0 - Norm. Значения порта автоматически не отслеживаются
     1 - > Порт считается активным, если значение больше заданного порога. Активностью считается момент перехода через пороговое значение
     2 - < Порт считается активным, если значение меньше заданного порога. Активностью считается момент перехода через пороговое значение
     3 - <> Порт считается активным, если значение проходит порог как в меньшую, так и в большую сторону.
misc: Val. Пороговое значение
ecmd: Action. Сценарий по умолчанию, в котором задано управление Выходами (OUT) устройства в случае изменения состояния входа. См. раздел "Сценарии" (макс: 11 байт). Примечание. Сценарий выполняется всегда, если не указан сервер или если сервер указан, но не отвечает в течение 3 секунд. Сценарий по умолчанию не выполняется, если сервер указан и доступен.
eth: Net Action. URL, который вызывается устройством в случае изменения состояние входа (макс. 35 байт). Примечание. URL Net Action вызывается

Для Action и NetAction поддерживаются команды 3 и 4! Подробнее смотрите раздел "Сценарии (Action)".


Сценарии (Action)

Формат записи сценария.
[Номер порта]:[Значение];[Номер порта]:[Значение];[Номер порта]:[Значение]
Значение: 0 - выключить, 1 - включить, 2 - переключить (изменить состояние порта на противоположное), 3 - состояние выхода соответствует состоянию входа (только для сценариев по умолчанию и входов в режиме P&R), 4 - состояние выхода противоположно состоянию входа ((только для сценариев по умолчанию и входов в режиме P&R).
Примечание. Значение может лежать в диапазоне от 0 до 255, если тип выхода настроен как PWM (ШИМ)
Пример сценария: "7:1;8:0;9:2" - включить порт 7, выключить порт 8, переключить порт 9
Сценарий поддерживает паузы. Цена деления 0,1 секунды. Команда 'p'.
Пример: "7:1;p10;7:0" - включить выход 7, подождать 1 секунду, выключить выход 7.
Сценарий поддерживает  возможность включения/выключения всех портов. Вместо номера порта указывается символ "а"
Пример: "a:0" - выключить все выходы
Выше уже было сказано, что значение порта может лежать в диапазоне от 0 до 255 в случае, если порт настроен как ШИМ. Но для такого типа портов существует модификатор "*", определяющий поведение порта (прошивка 3.26 и выше).
Например:
"10:200" - этот сценарий установит значение ШИМ 200 при срабатывании входа.
"10:*200" - модификатор "*" (звездочка) говорит, что если значение ШИМ равно 0, то установить его равным 200, иначе установить его равным 0. Это особенность полезна для управления освещением и по сути аналогична командам 3 и 4 для выхода в режиме "ключа". Нажатие кнопки включит освещение до значения 200, повторное нажатие выключит его.

Управление выходами.

Управлять выходами можно с помощью параметра cmd. Формат параметра соответствует формату записи сценария
Пример. Переключить порт 7
http://192.168.0.14/sec/?cmd=7:2

Считывание состояния всех портов

Устройство может передать текущее состояние сразу всех своих портов (включая два дополнительных АЦП-порта).
Для этого предназначена команда all
Пример.
http://192.168.0.14/sec/?cmd=all

Формат ответа сервера следующий:
OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;OFF;OFF;OFF;282;298

Значения портов разделены символом ";"
Дискретные состояния (для входов или выходов в режиме SW) обозначаются как OFF или ON
Если порт настроен как вход, то через слеш указывается значение счетчика входа.

Параметры, передаваемые устройством на сервер.

Параметр "pt"

В соответствии с внутренними настройка, устройство отправляет на сервер информацию об активном порте
http://[IP-адрес сервера]/[имя скрипта]?pt=[номер порта]
Пример
http://192.168.0.250/megad.php?pt=5

Скрипте megad.php значение параметра pt доступно через массив $_GET
Пример
<?
if ( $_GET['pt'] == "4" )
echo "7:2";
?>


Устройство после отправки номера порта ожидает от сервера команды. В указанном выше примере сервер передает устройству команду на переключение порта 7. Формат команды полностью соответствует формату записи сценария.

Параметр "m"

Этот параметр определяет по какому событию произошла отправка пакета на сервер. Если контакт замыкается, то на сервер отправляется сообщение без параметра "m". Если контакт размыкается, то значение параметр "m" равно "1"
Пример (произошло размыкание контакта, подключенного ко входу №5)
http://192.168.0.250/megad.php?pt=5&m=1
 

Параметр "at"

С помощью параметра at, устройство сообщает на сервер о превышении порога температуры встроенного сенсора
http://[IP-адрес сервера]/[имя скрипта]?at=[значение температуры]
Ответ сервера в формате сценария обрабатывается

Параметр "v" и "dir"

В соответствии с внутренними настройка, устройство отправляет на сервер информацию об активном значении АЦП. Подробнее о конфигурировании АЦП описано выше.
http://[IP-адрес сервера]/[имя скрипта]?pt=[номер порта]&v=[значение АЦП]
Если АЦП сконфигурирован таким образом, что устройство отслеживает проход порогового значения как в одну, так и в другую сторону, устройство сообщает также направление перехода через параметр dir
http://[IP-адрес сервера]/[имя скрипта]?pt=[номер порта]&v=[значение АЦП]&dir=[направление]
     1 - порог пройден в сторону увеличения показаний АЦП
     0 - порог пройден в сторону уменьшения показаний АЦП

Счетчики

Для каждого порта типа In (Вход) устройство сохраняет количество срабатываний, согласно настройкам порта.
Значение счетчика указывается на странице конфигурирования порта через слеш (максимальное значение 65535)
ON/1 (Порт активен/количество срабатываний 1)
Обнуление/задание исходного значения счетчика
С помощью параметра "cnt" можно задать любое значение счетчика.
Пример
http://192.168.0.14/sec/?pt=3&cnt=200

Запрос состояния порта

Устройство может выдать состояние порта без лишней HTML-разметки.
Для этого значение параметра cmd должно быть "get".
Пример
http://192.168.0.14/sec/?pt=1&cmd=get

Кроме того, имеется возможность получить значение встроенного в микроконтроллер температурного датчка. (Только для версии 3.25 и выше)
Для этого предназначен параметр tget
Пример
http://192.168.0.14/sec/?tget=1

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2019-09-30 10:05:40 | Andrey_B
Сергей, не очень удобно такие проблемы обсуждать в комментариях. Если проблема сохранится, напишите лучше на форуме или на почту.
1. В статье, которая описывает процесс перепрошивки, даны все рекомендации относительно вашего случая. Там и про использование опции "local-ip" и про прямое подключение ПК к контроллеру и другие советы.
2. Проще всего запустить анализатор трафика (например, Wireshark) и точно установить, что конкретно передает сервер. Скорее всего, в ответе сервера помимо собственно самой команды присутствует какая-то лишняя информация. А установить это - вопрос двух минут.
3. Вот именно это я и писал в предыдущем сообщении. Контроллер выполняет сценарий по умолчанию. А делать он это может только в том случае, если считает, что сервер недоступен. Например, ваш Web-сервер по какой-то неизвестной причине может отдавать контроллеру не HTTP 200, а другой ответ. Нужно, прежде всего, анализировать логи Web-сервера и смотреть дамп сетевого трафика. Но сначала я бы обновил прошивку.


2019-09-29 22:20:43 | Сергей (sergey_a)
Andrey_B, спасибо за ответ.

1. `php megad-cfg.php --scan` выводит пустую строку. `php megad-cfg.php --ip 192.168.0.14 --fw megad-328.hex -p sec --ee` выводит "Connecting...". Не получается обновить.
2. Нашел такое же обсуждение, в котором я сам же участвовал (как sergey_a). Там даже мой фикс описанный есть. Который не работает, и который я никогда не использовал. Как так – не знаю. Я использую не PHP, а Ruby on Rails.
3. Этот сценарий не был включен. Он закомментирован в коде.

Вчера примерно во время вашего ответа случилось опять. Я зашел глянуть логи – оказалось, что пришел запрос с MegaD на сервер, MegaD уже сама переключила состояние на обратное, а потом сервер переключил его обратно. Когда сервер считал состояние MegaD, оно уже было обратным. Получается, MegaD не дождавшись ответа от сервера выключила свет, а он его обратно включил.


2019-09-28 21:29:40 | Andrey_B
Сергей,
1. Необходимо обновить прошивку до 3.57b2 (последняя версия)
2. echo "7:2" всегда работало нормально. Если у вас не работает, нужно смотреть код на сервере. Вероятно, где-то присутствует проблема. Например, присутствует UTF-8 BOM в начале файла, который отдается контроллеру вместе с командой и воспринимается контроллером как некорректная команда.
3. Включение и выключение света возможно происходит из-за того, что срабатывает сценарий по умолчанию "7:2" вместе с командой сервера. Либо поможет обновление прошивки, либо нужно смотреть код скрипта на предмет каких-то особенностей. Этого быть не должно.


2019-09-28 14:24:21 | Сергей
echo "7:2"; никогда не работало как описано выше. Поэтому я всегда при получении запроса вида /192.168.0.250/megad.php?pt=5 делал запрос на MegaD и переключал состояние на обратное. Все работало.

Однако с недавних пор появился интересный, назойливый и очень неприятный баг, который случается не часто, но и не редко. Приходит запрос вида /192.168.0.250/megad.php?pt=5, я переключаю состояние запросом на MegaD, но оно по какой-то неизвестной мне причине переключается обратно. Получается, что, например, я включаю свет – он включается и тут же выключается.

В чем может быть дело?

MegaD-328 by ab-log.ru (fw: 3.44)
Конфигурация всех портов – https:/i.imgur.com/Bxqweu2.png


2018-12-25 19:02:05 | Andrey_B
art, ничего дополнительно запрашивать не нужно.
В режиме P&R контроллер отправляет информацию на сервер и при нажатии и при отпускании и при удержании. Если параметр m равен "1", значит кнопка была отпущена. Если этот параметр равен "2", значит длительное удержание. Если параметр отсутствует, значит было нажатие. Все это описано в документации.
То, как предлагает делать Ruslan, неправильно. Зачем нужно запрашивать состояние входа, когда контроллер и так его сообщает?
Вообще лучше подобное обсуждение перенести на форум.


2018-12-25 16:06:40 | art
ruslan

ага понял....т.е при изменении состояния входа мега отправляет запрос на сервер что выход
изменился....но как не говорит....и чтоб его узнать отправляем запрос в ответ .....
а что тогда параметр "m" делает?


2018-12-25 11:02:06 | Ruslan
Если нужно знать актуальное состояние входа, тогда надо перевести режим его работы в "P&R". Тогда Мега будет сообщать серверу о срабатывании входа и при замыкании и при размыкании. После срабатывания входа (и при замыкании и при размыкании) на сервере выполняем скрипт:
if ( $_GET['pt'] == "4" ){
$state = substr($state,0,2);
$state = file_get_contents("/192.168.0.14/sec/?pt=4&cmd=get");
if ($state == "ON") {
setGlobal('Имя_объекта.status', 1);
} else {
setGlobal('Имя_объекта.status', 0);
}
}
При этом информация о состоянии входа в свойстве объекта "status" будет обновляться сразу же после изменения фактического состояния входа.

Вы еще спрашивали о выходах, отправляет ли что-то Мега серверу, когда изменяется состояние выходов. Могу сказать однозначно - нет, не отправляет.


2018-12-25 10:52:37 | art
ruslan, я опечатался ....не выход а вход ....меня интересует как контролировать входы.... кроме как делать постоянный опрос меги ...записывать это в базу а потом делать запросы что бы вывести это в веб интерфейс...
я нажал на кнопку она замкнулась - мега отправляет запрос /192.168.0.250/megad.php?pt=4
скрипт на сервере его обрабатывает ...записывает изменение в базу ...и отображает с веб интерфейсе что вход замкнут...
я выкл кнопку ....какая информация поступает от меги?



2018-12-24 21:43:45 | Ruslan
art, непонятно, почему вообще в вашем случае может переключиться выход без ведома сервера? Если выход переключился по команде сервера, то сервер об этом событии "знает". Кроме того, в случае с Мегой у сервера всегда есть возможность не только узнать о состоянии выхода из базы, но и "спросить" об этом непосредственно у Меги. Не совсем понятно, в чем у вас, собственно, возникают затруднения...


2018-12-24 21:15:28 | art
понятно....а как тогда устройство дает понять серверу что выход вернулся в исходное состояние....
существует следующая система : мега + сервер . скрипт на сервере делает запрос в базу , получает состояние портов... и отображает их в веб интерфейсе... при управлении ( изменении состояния порта) сервер посылает запрос на мегу...после чего получает ответ что порт переключился и заносит изменение в базу...далее по кругу ...скрипт запрашивает состояние через базу и т.д.




2018-12-24 20:59:32 | Ruslan
art, можно еще дополнительный запрос к Меге делать, получая информацию о состоянии входа
if ( $_GET['pt'] == "4" ){
$state = file_get_contents("/192.168.0.14/sec/?pt=4&cmd=get");
if ($state == "ON") {
setGlobal('Имя_объекта.status', 1);
} else {
setGlobal('Имя_объекта.status', 0);
}
}


2018-12-24 20:31:33 | Andrey_B
art, неправильно. В вашем коде всегда будет выполняться первое условие.


2018-12-24 13:46:15 | art
Andrey_B...благодарю за ответ ...
if ( $_GET['pt'] == "4" ){}
при замыкании 4 входа ....выполнить действие...например вкл

elseif ( $_GET['pt'] == "4" && $_GET['m'] =='1'){}
при размыкании 4 входа ...выполнить обратное действие....например выкл


я правильно понимаю.....?
допустим действием будет добавление в базу... соответственно при замыкание добавить 1 в базу при размыкании - 0
как сервер понимает что вход замкнулся и разомкнулся


2018-12-24 11:33:58 | Andrey_B
Для MegaD-2561
SRV: 192.168.1.5
Script: panel/md.php


2018-12-23 23:09:27 | art
Приветствую!
подскажите как будет прописан путь к серверу скрипту SVR и SCRIPT ...если он находится на апаче в localhost/panel/md.php

указываю svr 192.168.1.5/panel/
script md.php

обмен по сети идет (смотрю через программку waveshark - мониторит локальную сеть....диалог устройств есть , но не видно самого запроса) но на файл скрипта md ни че не приходит


2018-10-06 23:30:59 | Сергей
Андрей, спасибо за подсказку! Увидел.
А по поводу странности моего предыдущего запроса - это я читал инструкцию и подумал что любой режим конфигурирования начинается с cf. Теперь вижу что это не так :)
Спасибо!


2018-10-06 11:38:55 | Andrey_B
Сергей, вообще GET-запросы в каком-то смысле самодокументируемые. То есть вы можете вручную выбрать нужные вам значения полей, нажать Save и в строке URL браузера увидеть, какие параметры передаются.
Так, например, флажок рядом с Act - это "af=1".
Ваш же запрос с комбинацией "cf=1&pn=28" выглядит довольно странным.


2018-10-06 09:56:24 | Сергей
Андрей, добрый день!
Скажите пожалуйста, можно ли при конфигурировании порта http-запросом как-то установить галку параметра action, чтобы действие выполнялось в любом случае? Мой запрос сейчас выглядит вот так: /192.168.10.200/sec/?cf=1&pn=28&d=3&m=3&misc=50$ecmd=9:4
Все отрабатывает, настраивается, нужно только еще галку установить


2017-10-23 12:03:11 | Andrey_B
Эрик, я такие датчики не использую, поэтому конкретную модель назвать не могу, но скорее всего они есть. Контроллеру же по сути все равно, какой именно датчик замыкает порт. Вы можете задать этот вопрос на форуме.
Ну а работающий камин в отсутствии людей в доме все же наверное маловероятная ситуация.


2017-10-23 11:51:44 | Эрик
Если у датчика функции охранные - то это имеет значение. А если он просто освещение включает, когда человек в помещение заходит, то при работающем камине он человека не заметит.
Это если интересно, конечно.


2017-10-23 07:14:55 | Эрик
Спасибо!
Вопрос остался по датчикам присутствия. Есть ли совместимые но не ИК, а объемные? В помещении, где планируется использование есть камин, у ИК датчиков возможны ложные срабатывания.


2017-10-22 16:30:09 | Andrey_B
Эрик, сервер может опрашивать устройство с любой нужной ему периодичностью. Обычно при работе с температурными датчиками достаточно опрашивать их раз 1-5 минут. Сколько скриптов при этом будет использовать эту информацию не важно.
Для устройства есть только один скрипт - на который оно отправляет информацию о событиях. Этот скрипт принимает информацию, но не обязан управлять устройством. Управлять же устройством могут другие скрипты и их может быть сколько угодно.


2017-10-21 12:17:10 | Эрик
Чтобы на сервере сработали разные скрипты от одного датчика (по разным температурам), нужно чтобы само устройство могло посылать события от одного датчика не по одному порогу, а по нескольким. Оно умеет?
Или как это можно реализовать на сервере? По периодическому опросу состояния датчика?


2017-10-21 12:06:37 | Andrey_B
Эрик, на сервере может работать сколько угодно управляющих скриптов. Нет никаких ограничений на этот счет
На разные порты MegaD-14-R можно заводить разные фазы.


2017-10-20 20:51:45 | Эрик
А можно ли на один вход сделать несколько скриптов. Например, на 1 входе с термометром, повесить скрипты меньше 20 град, включить порт 1 и порт 2, больше 23 выключить порт 1, больше 25 выключить порт 2.
Каждый из скриптов в отдельности понятно, что можно, а все три?


2017-10-18 15:13:19 | Andrey_B
Эрик, в контроллеры заложена только простая логика. Любые сложные "условия" возможно реализовать с помощью "сервера" / высокоуровневого управляющего элемента. В любой более-менее продвинутой системе такой элемент в любом случае присутствует.


2017-10-18 11:55:29 | Эрик
Здравствуйте.
Подскажите пожалуйста, есть ли, и если есть, где почитать о логических возможностях.
Например, решить задачу отключения нагрузки на выходе 7 когда отключились все выходы 0-6, срабатывающие каждый от своей кнопки.
Реализованы ли логические "И" и "ИЛИ"?


2017-09-08 13:08:41 | Andrey_B
Amarok, выполнить несколько действий, конечно, можно. Например: 7:1;8:0
Но в командах сервера не работают паузы. Тому есть целый ряд причин, о которых писалось на форуме. К тому же предполагается, что сервер и сам может выдержать паузы. Ему это нетрудно. Но есть некоторые возможности, которые все же позволяют использовать паузы при работе с сервером. Правда, эти возможности доступны только для MegaD-2561. Например, сценарий с паузами можно записать в поле Act любого входа и выполнить его с помощью команды "d". В этом случае паузы будут отработаны.


2017-09-08 11:03:43 | Amarok
А возможно одним http-запросом выполнить несколько действий? К примеру такая команда не проходит:
/192.168.0.14/sec/?cmd=22:0;p50;22:0
И такая тоже:
/192.168.0.14/sec/?cmd=22:0&cmd=p50&cmd=22:0


2017-06-27 18:21:45 | Andrey_B
alex, cmd=get
Пример: http://192.168.0.14/sec/?pt=13&cmd=get
Если порт в режиме SW, то контроллер вернет ON или OFF
Если порт в режиме PWM, то контроллер вернет значение от 0 до 254
Только вот сервер должен и без того знать в каком режиме находится порт контроллера. Это та настройка, которая не должна просто так поменяться сама собой.


2017-06-27 16:00:06 | alex
а как же все таки будет выглядеть запрос с сервера на контроллер ...что бы в ответе узнать в каком режиме работает выход...sw или pwm


2017-05-16 12:27:06 | Andrey_B
Алексей, ответил вам по электронной почте, чтобы не захламлять комментарии обсуждением специфических особенностей вашей конфигурации.


2017-05-16 04:55:31 | Алексей
Андрей, проверили еще раз:
1. При замыкании входа длительностью 0,5 секунды и более - на сервер приходит 2 запроса, но если замыкание длится 0,2 и менее секунды, то сервер фиксирует только 1 запрос. В настройках IIS стоит все по умолчанию, ничего не меняли. В чем может быть проблема?
Бывает так, что дверь приоткрыли и сразу закрыли, а сервер получит только факт открытия ((
2. Состояние выходов (реле) мы меняем таким запросом "/IP/?pn=PORT&pty=1&d=STATE", т.к. очень удобно что после отключения питания состояние выходов сразу восстанавливается. Так вот вопрос, мега отвечает на такие запросы "BackRestarted", получается оно перезапускается каждый раз? Как этот рестарт отключить, т.к. если выполнить одновременно несколько таких запросов, то один из них вернет пустой ответ и непонятно выполнился запрос или нет...
3. Пишу пишу сообщение, нажимаю "отправить комментарий", обновляется страница и нету сообщения.... Уже не один раз такое.


2017-05-15 13:45:16 | Алексей
Андрей, вы пробовали моментально замкнуть и разомкнуть, со скоростью щелчка? У меня IIS+PHP. Возможно с настройками web сервера, завтра тоже посмотрим логи


2017-05-15 11:15:55 | Andrey_B
Алексей, "баг", описанный вами в пункте 4 у меня не подтверждается. Я не смог добиться, чтобы Net сработал 1 раз. На сервере стоят Apache2 + PHP.
Нужно смотреть, что происходит в сетевом трафике. Возможно, есть какие-то нюансы на стороне сервера.


2017-05-15 08:39:29 | Алексей
Андрей, вот результаты танцев с бубном продолжительностью в полдня:
1. Прошивка с командой "--ee" дала результат, но 100% работает только в режиме восстановления.
2. Прошивка командой "php megad-cfg.php --ip 192.168.3.Х -p sec -fw megad-328.hex --ee --read-conf megad.cfg --write-conf megad.cfg" на всех устройствах прошивалось нормально, но примерно на каждом третьем устройстве Net - также не срабатывал.
3. После прошивки в режиме восстановления с параметром "--ee" все устройства стали работать корректно с Net, только все настройки пришлось заново прописывать, где Net не работал после прошивки с параметром "--write-conf".
4. Обнаружили новый баг в режиме P&R - если любой порт замкнуть и через некоторое время разомкнуть, то Net срабатывает 2 раза, но если замкнуть и сразу разомкнуть, то Net срабатывает только 1 раз. ((( хотя логично должно быть, чтобы для режима P&R в любом случае при замыкании и размыкании Net срабатывал 2 раза!!! Подправьте плиз.
P.S. устройства прошивали прямым подключением к ПК. Стандартный брандмауер обязательно нужно отключить, иначе не происходил коннект с мегой.


2017-05-11 16:55:05 | Andrey_B
maksim, если под "эмуляцией" вы понимаете выполнение сценария, прописанного в поле Act по команде сервера, то такой команды в MegaD-328 нет. Такая команда "d" есть только в MegaD-2561.


2017-05-11 16:50:01 | Andrey_B
Алексей, проблема, которую вы описываете, у меня не воспроизводится. Вы при обновлении сбрасывали настройки (EEPROM)? Если нет, попробуйте это сделать.


2017-05-09 19:37:02 | maksim
Добрый день. А вы не подскажите как сэмулировать нажатие кнопки которая подключена к 5 входу через HTTP отправку?


2017-05-05 08:26:50 | Алексей
в догонку: при размыкании все также не срабатывает


2017-05-05 08:25:15 | Алексей
Андрей, прошивка 3.55beta1:
теперь срабатывает через раз и на любом входе для всех срабатывает поле Net указанный для входа 0, например у меня
для входоа 0 указано Net=192.168.1.3/action/port/0
для входа 6 указано Net=192.168.1.3/action/port/6
то при замыкании входа 6 на сервер приходит url "/action/port/0" и то через раз ))
жду новую бету ))


2017-05-04 15:44:31 | Andrey_B
Алексей, попробуйте 3.55beta1


2017-05-04 10:45:07 | Алексей
Андрей, здравствуйте
Не срабатывает поле Net при размыкании входа P0-P7 на устройстве 7I7O, режим Mode=P&R, при замыкании срабатывает нормально. Например замнули вход и тут же разомкнули или даже через какое-то время разомнули сервер, то сервер получает событие только 1 раз и на размыкание ничего не приходит на сервер. Проверьте у себя. Очень надо на датчик открытия двери и ее закрытия.
Прошивка 3.54, в настройках поле SRV сервер не указано


2016-12-10 21:26:41 | Andrey_B
Игорь, только что проверил у себя вашу команду.
Все отработало штатно. Все прописанные команды выполнились.
Проверял на связке MegaD-328 + MegaD-7I7O-SD. Прошивка 3.50. Порты P7-P13 настроены как выходы. Можно попробовать откатиться на 3.43, но в части выполнения команд сервера ничего не менялось. Проверьте, что в действительности передает сервер, не присутствует ли в файле скрипта UTF8 BOM, правильно ли настроены порты.
Ну и обновить прошивку тоже можно.


2016-12-10 18:25:22 | Игорь
Andrey_B,
MegaD-328 (прошивка 3.43) настроен на циклический опрос сервера.
Отправляю в ответ сценарий 8:0;11:0;12:0;13:0;7:0 - а отрабатывает только первые три.
Получается нельзя отправить в ответе более трех пар?


2016-12-04 10:24:57 | Andrey_B
Сергей, паузы работают ТОЛЬКО в сценариях по умолчанию и НЕ работают в случае ответов и команд сервера. Этому есть ряд объективных причин, о которых я несколько раз писал.
Если устройством управляет сервер, то ему ничего не стоит самому выдержать необходимые паузы.


2016-12-03 21:45:32 | Сергей
Здравствуйте.
Использую устройство 7I7O-R.
Чтобы сработал замок в двери нужно провести следующую последовательность действий:
Р7 выкл, Р8 выкл, Р9 вкл на 0,5 сек, Р10 вкл на 0,5 сек.

В строке браузера пишу следующую команду
/192.168.1.14/sec/?cmd=7:0;8:0;9:1;10:1;p5;9:0;10:0
Устройство выполняет все команды до "p5" и останавливается - т.е. отключение Р9 и Р10 не происходит.
В чем проблема?


2016-09-25 11:10:45 | Andrey_B
Nishiki, это нормально. Параметр m=2 означает, что устройство детектировало "длительное" нажатие. Эта функция была специально добавлена в устройство, чтобы облегчить серверу обработку "длительных" нажатий. Если вам этого не нужно, просто игнорируйте на сервере запросы с параметром m=2.
В 3.36 этого нет, потому что в этой версии нет этой функции.


2016-09-24 20:45:32 | Nishiki
У меня устройство тоже отправляет два запроса.
192.168.0.219 - - [24/Sep/2016:20:24:54 +0300] "GET /mod_megad.php?pt=3&cnt=15 HTTP/1.1" 200 193 "-" "megad"
через секунду еще одно с параметром m=2
192.168.0.219 - - [24/Sep/2016:20:24:55 +0300] "GET /mod_megad.php?pt=3&m=2&cnt=15 HTTP/1.1" 200 193 "-" "megad"
получается свет вкл через сек. выкл.
прошивка 3.46
на прошивке 3.36b4 такое не происходит.


2016-08-26 10:08:03 | Andrey_B
sergey_a, естественно. В режиме P&R устройство отправляет информацию как по поводу нажатия, так и по поводу отжатия. Почитайте обзорную статью на сайте по поводу режимов P, P&R, R.


2016-08-25 22:13:19 | sergey_a
Andrey_B, спасибо за подсказки.
1. Однако теперь мне приходит два запроса – один без параметра "m", другой с параметром "m":
192.168.0.14 - - [25/Aug/2016:22:00:46 +0300] "GET /light-switched?pt=3&cnt=7 HTTP/1.1" 200 14 "-" "megad"
192.168.0.14 - - [25/Aug/2016:22:00:46 +0300] "GET /light-switched?pt=3&m=1&cnt=8 HTTP/1.1" 200 14 "-" "megad"
2. Проблема решена сменой set. Для тех, кто будет использовать Rails:
response.headers['Content-Type'] = 'text/plain; set=iso-8859-1'


2016-08-24 18:57:16 | Andrey_B
sergey_a
1. Чтобы передавался параметр m=1 (отжатие), необходимо, чтобы порт был сконфигурирован в режим P&R (Press and release - нажатие и отпускание). В режиме "P" фиксируется и передается на сервер только факт нажатия.
2. Проверьте кодировку скрипта. Если она UTF-8, то в нем может содержаться BOM (Byte Order Mark). Вы его не видите, но он там может присутствовать. Либо установите в редакторе сохранять файл в UTF-8 без BOM, либо сохраняйте файл в любой другой не Unicode кодировке (CP1251, ISO и т.д.). BOM передается устройству и оно считает, что ответ сервера некорректный, поэтому ничего не делает.


2016-08-24 17:53:12 | sergey_a
Ruslan, именно запрос вида 192.168.0.14/sec/?cmd=7:2 я и выполняю. Это и есть тот "лишний запрос к MegaD, чтобы переключить OUT порт".

Использую Ruby on Rails, метод упомянул – пример `render plain: "7:2"`. Язык и фреймворк значения не имеет. Это уточнение к тому, что я отвечаю верно. Судя по "документации" к API устройство MegaD ожидает получить подобный ответ в таком формате. Но на практике устройство на ответ сервера никак не реагирует.


2016-08-24 17:48:47 | Ruslan
В предыдущем ответе перед /192.168.0.14 куда-то "съелось" НТТР:/ [специально пишу по-русски, чтобы не "съелось" вторично].


2016-08-24 17:45:07 | Ruslan
sergey_a, по второму вопросу можно попробовать так. Если отвечаете из скрипта на php, то должно "пройти"
file_get_contents("/192.168.0.14/sec/?cmd=7:2");
Из адресной строки браузера должно работать
/192.168.0.14/sec/?cmd=7:2
IP-адрес и пароль, разумеется, свои.


2016-08-24 16:52:27 | sergey_a
Есть 2 вопроса по "Параметры, передаваемые устройством на сервер.":

1. Параметр "m"
Меня этот параметр интересует, чтобы выставлять ВКЛ/ВЫКЛ значение для группы света. Без лишнего запроса в БД или к MegaD. У меня все запросы на сервер приходят без него. Использую кнопочные (аля звонковые) переключатели. Полагаю причина в них.
В чем причина отсутствия параметра "m"?

2. Устройство после отправки номера порта ожидает от сервера команды.
Я отвечаю устройству, но оно не реагирует. Отвечаю с помощью /guides.rubyonrails.org/layouts_and_rendering.htmlrendering-text. Формат тот же, что и в поле Act при конфигурировании IN портов. Там эта функция работает при выключенном сервере. А на сервере мне приходится делать лишний запрос к MegaD, чтобы переключить OUT порт.
Почему устройство не реагирует на команды вида 7:2?


2016-06-11 16:19:51 | Andrey_B
m=2 - это признак длительного удержания. Начиная с прошивки 3.42 устройство аппаратно может фиксировать длительное нажатие в режиме P&R. Если вам эта информация не нужна, просто на сервере игнорируйте запросы, где этот параметр равен "2".
Длительное нажатие m=2 значительно упрощает реализацию кода на сервере там, где требуется такая обработка.


2016-06-11 10:14:26 | Ivan
Подскажите, вход настроен как P&R, на входе висит датчик напряжения. При включении происходит двойное событие с увеличением CNT на порту, причем второе событие помечается признаком режима m=2, переход из замкнутого в разомкнутое состояние для режима R:
192.168.1.14 - - [10/Jun/2016:11:44:23 +0300] "GET /megad14.php?pt=5&cnt=16&mdid=14 HTTP/1.1" 200 147 "-" "megad"
192.168.1.14 - - [10/Jun/2016:11:44:24 +0300] "GET /megad14.php?pt=5&m=2&cnt=17&mdid=14 HTTP/1.1" 200 147 "-" "megad"
192.168.1.14 - - [10/Jun/2016:12:43:35 +0300] "GET /megad14.php?pt=5&m=1&cnt=18&mdid=14 HTTP/1.1" 200 147 "-" "megad"
и так по всем IN портам.
Это у меня одного так или я что-то делаю не так?


2016-06-09 11:27:43 | Andrey_B
Александр, возьмите URL в кавычки...


2016-06-08 22:44:30 | Александр
А вот Вы попробуйте, к примеру, с командной строки наберите:

curl 192.168.0.14/sec/?pt=0&cmd=get


2016-06-08 11:21:14 | Andrey_B
В статье есть ответ на ваш вопрос.
Пример
192.168.0.14/sec/?pt=0&cmd=get


2016-06-08 02:24:09 | Александр
А как считать состояние конкретного порта?


2016-06-07 16:27:12 | Andrey_B
Только что попробовал у себя.
Команда:
curl 192.168.0.14/sec/?cmd=7:1
делает то, что и должна делать - включает выход "P7".
Нет никакой разницы из какого языка программирования/среды/программы сгенерированы HTTP-запросы. То, что описано в API, должно работать везде.


2016-06-07 01:01:41 | Александр
Я прошу прощения за излишнюю дотошность, но имея ввиду командную строку, я говорил о конкретных командах.
Я уверен, у Вашего проекта, нет времени на излишества. Но в данной ситуации, я считаю, что не один я, был бы Вам признателен за небольшой свод команд и запросов, что б вопросы пропадали сразу, когда они видели “выражение обширных понятий” в упорядоченном списке лаконичных примеров - и кратких описаниях.
Андрей, я уважаю Вас, как инженера, так и блоггера. Но, при всем уважении, давайте не гипертрофировать мой вопрос. C PHP, вопросов нет и быть не может, - оно и ясно.
Я пытался использовать приведенные Вами команды. В некоторых случаях они работают, а в некоторых нет. К примеру, эта команда возвращает нужное значение:

curl /192.168.0.14/sec/?cmd=all

А вот эта ничего не делает:

curl /192.168.0.14/sec/?cmd=7:1

Могу привести нерабочие примеры с другими программами или же Python-скрипты.


2016-06-06 16:58:01 | Andrey_B
Александр, командная строка в Linux - это очень обширное понятие. Существует целый ряд программ, с помощью которых можно вызывать HTTP URL, например: wget, curl, links, lynx и так далее. У каждой такой программы свои параметры.
В python можно использовать, например, библиотеку urllib.


2016-06-05 23:36:23 | Александр
Как используя командную строку в Linux управлять Мегой? Или используя синтаксис Python?
Как, к примеру, считать, как записать значение в порт?


2016-06-04 11:42:24 | Andrey_B
Я не понял вопрос. Сформулируйте его пожалуйста как-то иначе.


2016-06-04 07:30:25 | Александр
Андрей, не подскажете, где бы посмотреть полный список команд управления и считывания на BASH и Python? Ну и на PHP..


2016-02-05 14:45:16 | alex
Андрей,дополните,пожалуйста, API информацией о параметрах работы с ИК каналом, в прошивке нашел,а в описании нет.


2016-01-30 11:12:36 | Andrey_B
Во время выполнения паузы устройство конечно же не блокируется.


2016-01-30 10:00:17 | llams
Андрей, подскажите по идентификатору паузы в "7:1;p10;7:0", на время выполнения данной команды (паузы) происходит блокировка работы устройства или нет?


2014-12-05 12:16:23 | GrunT
Например mdid. Там еще пару неизвестных видел, уточню - напишу.


2014-11-29 12:09:16 | Andrey_B
GruNT, о каких функциях вы говорите? Сообщите - поправлю.


2014-11-27 21:33:05 | GruNT
Andrey_B, не могли бы вы API обновить?))) Не нашел некоторых функций которые есть в коде прошивки...)))


2014-11-12 20:53:43 | Andrey_B
Дмитрий, в "скетч" переделать, наверное, нельзя. Исходники компилируются и заливаются стандартным софтом (например, Atmel Studion), при этом Arduino остается им только аппаратно, родной загрузчик перезаписывается.


2014-11-12 11:42:04 | Дмитрий
К сожалению шилд на чипе wiznet ethernet w5100. Уже заказал на ENC28J60. Но вот только не совсем понятно как ваши исходники можно переделать в "скеч", чтобы доработать его под другой контроллер и заливать через Arduino IDE. Наверное проще будет поставить AVR Studio.


2014-11-11 23:25:01 | Andrey_B
Дмитрий, вы имеете ввиду прошивку? Конечно, можно использовать прошивку вместе с Arduino + Ethernet shield (если он на базе ENC28J60). На нашем форуме неоднократно описывались подобные комбинации. Поищите.


2014-11-11 20:39:28 | Дмитрий
Андрей, Здравствуйте! Скажите, а можно каким-то образом портировать ваш веб сервер на ардуино с ethernet шилдом?


2014-08-26 12:56:18 | Andrey_B
Александр, всегда можно устройство с помощью ключей -f -e. Подробнее об этом написано в статье "Перепрошивка MegaD-328 по сети".


2014-08-26 12:53:59 | Andrey_B
Александр, можно считать и распарсить HTML-страницу, где содержится информация о температуре. Это пара строк кода. Теоретически, конечно, можно предусмотреть и отдельную команду.


2014-08-22 09:34:04 | Александр
Ну и сразу в догонку, что-то пошло не так и пароль сбросился на что-то неизвестное, ну или кто-то зашел и поменял его(у меня веб морда МегаД выведена на внешний IP) как его теперь сбросить? Теперь Мегу даже по сети не прошить? Получается только программатором?


2014-08-22 09:27:55 | Александр
Такой вопрос возник, а возможно ли с сервера запросить температуру устройства? Или лучше этим не заморачиваться и настроить на меге предупреждение по превышению порога?


2014-01-17 11:08:25 | Andrey_B
Андрей. Во-первых, я работаю над универсальной прошивкой и не имею возможности делать ответвления. Для этого у меня просто не хватит ресурсов, времени. Альтернативная прошивка с поддержкой 1-wire разрабатывалась пользователем THK. Посмотрите на нашем форуме, там есть соответствующая тема. Во-вторых, весь мой сайт посвящен именно централизации, как единственно правильной с моей точки зрения идеологии полноценного Умного Дома. Где-то какие-то системы могут иметь автономность, но во всех сложных аппаратах (космических, авиа, подводных лодках и т.д.) есть центральный компьютер. Я сейчас не буду углубляться в аргументацию этой точки зрения, так как весь мой сайт про это. В-третьих, у меня автоматизирована система отопления и я могу заверить вас, что ничего путного из простой автоматизации "а-ля термостат" не выйдет. Никакого смысла нет ставить подобные устройства, чтобы потом дублировать функцию обычного комнатного термостата за 300 руб. Дешевле и проще поставить последний.


2014-01-16 23:51:02 | Андрей
Здравствуйте Andrey_B.Так вот как раз меня и интересует управление без сервера то бишь(децентрализованное).Андрей скажите вы можете на базе готовой меги прошить ее таким образом чтобы она получала данные от датчиков по 1wire и отсылала команды серверу или другой меге если сервер не указан.Я понимаю что память меги не резиновая ,но если исключить часть кода для управления входами выходами. оставить один вход для 1wire сети .Как бы сделать из одного модуля ведущего .который опрашивал датчики и на основе полученной информации ,отправлял в сеть такие же гет команды как обычная мега.и чтоб имел веб интерфейс для привязки датчиков к выходам других контролеров и чтоб можно было выставлять гистерезис по температуре.При использовании такого контролера в связке с другими ,можно будет отказаться от сервера ,и устроить на этом всем систему управление освещением отоплением вентиляцией.Вот это на мой взгляд будет полная (децентрализация). Скажите стоит ли ждать такой прошивки ? Или это реализовать не реально.


2014-01-15 11:55:29 | Andrey_B
Команда "2" и "переключение" предназначено, прежде всего, в каких-то простых схемах, не требующих контроля. При управлении с сервера мы все же должны четко понимать, что конкретно мы делаем, поэтому здесь только "включить" или "выключить".


2014-01-14 21:19:55 | Андрей
Спасибо за разяснения. Я что-то сразу не вник в то что можно вход настроить на переключение .Значит даже если вход 1 включил выход 1. То вход 2 переключит выход1 на противоположеный.Как всегда сначала спросил а потом дадумался.


2014-01-14 17:03:26 | Andrey_B
Андрей, в устройстве заложено три типа команд
0 - выключить
1 - включить
2 - переключить
Если выход включается командой "1", то при поступлении еще одной такой же команды ничего не произойдет. Выход как был включен, так и останется.
По второму вопросу не вижу никаких сложностей.


2014-01-13 01:39:34 | Андрей
Здравствуйте Андрей. Представим такой алгоритм .1 вход настроен на замыкание контактов при этом он включает выход 1 .2 вход настроен на замыкание и размыкание контактов при этом он тоже включает выход 1.Отсюда вопрос.1)Возможна ли такая реализация програмно.2)Как будет вести себя реле если оно будет включено входом1 и на него пойдет команда на включение с входа 2) Вопрос связан с тем что я хотел реализовать включение освещения выключателем-кнопкой и есщё имеется звуковой выключатель который работает по тригерному принципу(раз хлопнул реле на нем замкнуло контакты .хлопнул есче раз разомкнуло).Очень интересует возможно ли реализовать такой алгоритм или нет.Заранее благодарен