Плагин MegaD
-
Участник @Erik написал в Плагин MegaD:
Нет. Никогда он не создавался как АО.
И, кроме того, я его удалял и создавал заново, сразу как DI. Чтобы исключить некорректный конфиг.
Поэтому, кстати, он последний в списке.Да, возможно. Сейчас проверили - в последней версии плагина параметры значений физического и логического уровня добавляются для все каналов, но скрываются в зависимости от типа при редактировании. Когда Вы редактируете канал - этих свойств ведь нет?
Наш недочет - не нужно показывать параметры, зависимые от типа, в таблице.
Но это к вашей проблеме никакого отношения не имеет.
Вы можете скопировать каналы, созданные ранее, и этих параметров не будет. Или совсем удалите канал, это ничего не изменит.При всем моем уважении. Сервер даже на включение меге команду не послал, пока я в расширениях запись не создал.
Так там созданы только для /?pt=16 и /?pt=16&m=1
Для /?pt=16&m=2 нет. На каком основании он отрабатывается вообще?Алгоритм обработки входящих сообщений такой: ищется максимально совпадающий запрос.
-
Для /pt=16&m=1&cnt=xx это /pt=16&m=1
-
Для /pt=16&cnt=xx это /pt=16
-
Для /pt=16&m=2&cnt=xx это тоже /pt=16, так как других нет
Если Вы добавите /pt=16&m=2 с пустой командой, то он команду отсылать не будет, отправит пустой ответ.
-
-
@Erik, честно говоря, нет необходимости в плагине делать каналы для выключателей, СМК, датчиков движения, то есть для всех, которые имеют "сухой контакт". Все их сработки просто должны быть описаны в расширениях.
В качестве примера привожу расширениях с 3-х разных своих MegaD:
Участник @intrapro написал в Плагин MegaD:
Алгоритм обработки входящих сообщений такой: ищется максимально совпадающий запрос.
Как я уже говорил, тут то ли какие-то чудеса, то ли @intrapro (без обид!) не понимает где есть проблема. Потому что алгоритм в iH Berry работал безупречно. То есть:
- Если было прописано условие pt=0, то оно срабатывало только при входящем pt=0&cnt=xx
- Если было прописано условие pt=0&m=1, то оно срабатывало только при входящем pt=0&m=1&cnt=xx
- Если было прописано условие pt=0&m=2, то оно срабатывало только при входящем pt=0&m=2&cnt=xx
Поскольку при переходе на iH Cherry и воссоздании всех настроек из iH Berry у меня все стало работать по другому...
В общем, надо допилить этот алгоритм - чтобы он работал как полагается:)
Мои рассуждения:
- Имеем, например, нужное условие срабатывания pt=0&m=1
- Имеем входящее pt=0&m=1&cnt=xx
Нам нужно из всех условий данного плагина сформировать массив и при входящем сообщении отбросить у него ключ cnt и полученное сообщение сравнить со всеми элементами массива:
massiv[number_element].indexOf("pt=0&m=1") >= 0
Как итог, на выходе мы получим, что по заданному входящему есть совпадения в массиве, соответствующие, только pt=0&m=1...
Другой момент, если нам надо будет обращать внимание на значение ключа cnt.@intrapro, в вашем коде мне немного не хватает комментариев чтобы читать код с листа, но у Вас все так и делается - утилитой формируется массив из всех условий и ищется первый номер условия, которое совпадает со входящим сообщением:
for (var i = 0; i < tableMReq[pathname][id].length; i++) { if (isSuitable(tableMReq[pathname][id][i].queryprops, query)) { return tableMReq[pathname][id][i]; }
А вот эта функция как раз отвечает за принцип поиска совпадений сообщения body в массиве условий, но она мне реально не понятна...
function isSuitable(patobj, qobj) { if (!patobj || !qobj) return; for (var prop in patobj) { if (patobj[prop] == "*") { if (qobj[prop] == undefined) return; } else if (qobj[prop] != patobj[prop]) return; } return true; }
-
@Alex_Jet , у меня ситуация странная.
Потому, что до обновления прошивки на мегах все работало отлично.
После обносления прошивки вылез этот один косяк, но только после того, как мегу присоединил к серверу. Без связки с сервером работает корректно.Я сам не могу найти проблему. Вот и бегаю между двумя форумами - ab-log и IntraHouse.
Усложняется все тем, что это дача, и я на ней только в выходные бываю. А косяк проявляется только при физическом переключении выключателя. В следующий приезд попробую прошивку предыдущую поставить, или старую вернуть. И файлы плагина на сервере стереть и по новой записать. Больше идей вообще нет.
Каналы на выключатели мне нужны. Они у меня кроме включения нагрузки еще и автоматику выключают. Например, свет в туалете включается скриптом по датчику движения на 3 минуты, и выключается. Но если включить выключателем, этот скрипт не будет запускаться. И никаких выключений через 3 минуты не наступит.
Или, включить выключатель, и выключить свет иконкой в интерфейсе - тот же эффект, скрипт по датчику движения не запустится.
То же самое с вентиляторами. Автоматика - на 2 минуты после выключения света (например), а выключателем можно или включить надолго, или отключить автоматику.
Плюс дополнительный датчик безопасности. Если кто при включенном режиме охраны щелкает выключателем - оно сообщает.
Плюс комбинации состояний выключателей (пример - скрипт кодового замка минибара).Мне вообще выключатели нравятся больше кнопок. И каналы для них нужны. Это вам не кнопки!
-
@Erik, классно, что Вы придумали и реализовали такой богатый функционал! Предлагалось удалить канал только для тестирования. Чтобы вы увидели, что плагин с каналом ничего не делает. Но, думаю, поможет примерно также как и стирание плагина
@Alex_Jet , по алгоритму плагина
Как я уже говорил, тут то ли какие-то чудеса, то ли @intrapro (без обид!) не понимает где есть проблема. Потому что алгоритм в iH Berry работал безупречно. То есть:
1.Если было прописано условие pt=0, то оно срабатывало только при входящем pt=0&cnt=xx
2. Если было прописано условие pt=0&m=1, то оно срабатывало только при входящем pt=0&m=1&cnt=xx
3. Если было прописано условие pt=0&m=2, то оно срабатывало только при входящем pt=0&m=2&cnt=xxВсе и сейчас так работает, если прописаны все три условия. Другой вопрос, если третье условие НЕ прописано.
С нашей точки зрения, при разработке плагина для развивающегося продукта (а MegaD развивается, и это здорово) не должно быть привязки к конкретной реализации, насколько это возможно.Поэтому алгоритм обработки входящих запросов такой:
- Из таблицы входящих запросов формируются объекты, чтобы не было зависимости от порядка параметров в строке:
"pt=0&m=1" => {pt:0, m:1}, "pt=0" => {pt:0}, "pt=0&m=2&cnt=*" => {pt:0, m:2, cnt='*'},
- Существенным параметром считается номер порта pt. Все объекты группируются в массивы по портам плюс отдельная группа запросов, в которых порт не участвует. Массив упорядочивается по количеству параметров от большего к меньшему
Для pt=0 - [{pt:0, m:2, cnt='*'}, {pt:0, m:1}, {pt:0}]
- Когда приходит реальный запрос (который тоже преобразуется в объект), то ищется подходящая группа по номеру порта pt, и в ней подбирается соответствие перебором массива образцов.
Функция isSuitable(patobj, qobj) получает каждый элемент массива образцов patobj и входящий объект qobj. Во входящем объекте должны быть все параметры, которые задал пользователь, в этом случае функция возвращает true. Обратное не требуется, т е во входящем запросе может быть сколько угодно не упомянутых в образце параметров
if (patobj[prop] == "*") {// в образце может быть звездочка - тогда требуется просто присутствие if (qobj[prop] == undefined) return; // не подходит, так как во входящем нет совсем } else if (qobj[prop] != patobj[prop]) return; // не подходит, так как параметра нет или значение не совпадает
Поскольку массив упорядочен по убыванию количества параметров, если совпадение не найдено, далее берется образец с меньшим числом параметров. Если вы не прописали pt=0&m=2, то последний образец будет pt=0, и он подходит. Для изменения ситуации достаточно прописать pt=0&m=2 с пустой командой.
В общем, надо допилить этот алгоритм - чтобы он работал как полагается:)
Это замечательная идея. Поскольку плагин расположен в публичном репозитарии на github https://github.com/intrahouseio/intraHouse.plugin-MegaD, есть масса вариантов:
-
Можно сделать pull-request в действующий репозитарий. Для этого откорректируйте код прямо в репо, вам будет предложено создать pull-request. После ревью и одобрения ваши изменения будут включены в действующий плагин.
-
Можно сделать fork текущего плагина и менять на свой вкус.
-
Можно разработать новый плагин с использованием нового API плагинов https://github.com/intrahouseio/intraHouse-Cherry/wiki/Plugin-API-4.6
В любом случае, если это будет реально работающий вариант, можем разместить плагин у себя для скачивания как альтернативный, а в перспективе и как основной. Welcome
-
Участник @intrapro написал в Плагин MegaD:
Предлагалось удалить канал только для тестирования. Чтобы вы увидели, что плагин с каналом ничего не делает.
Вы просто плохо его знаете!!!!
Если неисправность возникает только при взаимодействии с сервером - значит сервер как минимум соучастник. Тут даже к следователю не ходи.
Вопрос только - по злому умыслу, или непреднамеренно?Я файлы плагина уже удаленно поменял. И предварительный результат есть - канал выключателя передал значение "выключено". А то раньше постоянно включенным оставался независимо от перезагрузок плагина, сервера или меги.
Но нужно таки им пошевелить физически, чтобы убедиться.Но если (надеюсь) помогла замена файлов плагина - что могло быть такого в старых файлах, и откуда? Как часто нужно их менять?
-
Участник @Erik написал в Плагин MegaD:
Если неисправность возникает только при взаимодействии с сервером - значит сервер как минимум соучастник. Тут даже к следователю не ходи.
После этого не значит вследствие этого.
Если следователь не профессионал, то да. Решит, как проще, и дело закрыто.Но мы же не следователи, технари. Мы и голову иногда можем по назначению использовать.
Вводные:
Контроллер - самостоятельное устройство. Он может изменить настройку портовa) при действиях пользователя через web-интерфейс контроллера
б) через внутреннюю программу контроллера, которая может изменить настройку, например, в защитных целях. Ну только предположим, что при нажатии на включатель идет дребезг, с частотой, которая проходит входные фильтры, но не позволяет отправлять сообщения на сервер так часто. Контроллер смотрит - P&R и при этом есть настройка сервера и решает - P&R
не получится, буду работать в режиме P с программной фильтрацией. И никакого взаимодействия с сервером, заметьте, пока не было.в) под внешним воздействием. Разработчик MegaD говорит: "Отправлять GET-запросы, меняющие конфигурацию, может не только пользователь из браузера, но и сервер" То есть существует конкретный запрос, который нужно передать на контроллер по 80 порту.
ОК, тогда этот запрос можно увидеть. Не верите отладчику, не доверяете плагину - подключите любой сниффер, wireshark или tcpdump прямо на сервере IH. Если увидите этот запрос - вопросы к серверу. Если нет - значит контроллер подвержен какому-то магическому внешнему воздействию или надо рассматривать вариант б)Но если (надеюсь) помогла замена файлов плагина - что могло быть такого в старых файлах, и откуда? Как часто нужно их менять?
Наверно, нужно изучить фазы луны. Можно еще сервер тряпочкой протирать
-
@intrapro
Вы очень здорово рассуждаете, но никак не объясняете причину бага.Баг такой - при добавлении сервера происходит искажение настройки порта.
Если сервер не добавлять - не происходит. Мало того. Если убрать настройку сервера - настройки порта сами возвращаются в корректное состояние.Поддержка сервера предлагает изучать фазы луны. И протирать сервер тряпочкой. Прекрасно. Прошу уточнить марку тряпочки. И гарантировать, что это поможет.
-
Участник @Erik написал в Плагин MegaD:
Но если (надеюсь) помогла замена файлов плагина - что могло быть такого в старых файлах, и откуда? Как часто нужно их менять?
Замена файлов помочь не могла. Код плагина не менялся с марта 2019 года
-
Участник @Erik написал в Плагин MegaD:
@intrapro
Вы очень здорово рассуждаете, но никак не объясняете причину бага.Баг такой - при добавлении сервера происходит искажение настройки порта.
Если сервер не добавлять - не происходит. Мало того. Если убрать настройку сервера - настройки порта сами возвращаются в корректное состояние.Поддержка сервера предлагает изучать фазы луны. И протирать сервер тряпочкой. Прекрасно. Прошу уточнить марку тряпочки. И гарантировать, что это поможет.
Не с кем не охота вступать в дискуссию, но если все же это не косяк IH ? Дабы не обвинять ни кого, нужно более плотно подойти к анализу диагностики этой проблемы. Давайте рассмотрим мистическую и очень маловероятную вещь: если прошивка megad была старая, а при переходе на новую, было куча изменений, то при включенном сервере IH в момент перепрошивки, произошло именно то, что мешает Вам в данный момент. Просто Ваша проблема у других пользователей не проявляется. Опять же повторюсь, что для детальной диагностики этого бага нужно проблему изучать. Я бы на 2й машине с нуля установил без всего лишнего чисто для теста IH и проверил эту теорию.
-
И еще. Можно откатиться на ту же прошивку, при которой не было глюка и глянуть что будет.
-
Участник @artem521 написал в Плагин MegaD:
Давайте рассмотрим мистическую и очень маловероятную вещь: если прошивка megad была старая, а при переходе на новую, было куча изменений, то при включенном сервере IH в момент перепрошивки, произошло именно то, что мешает Вам в данный момент.
Нет. При прошивке я отелючал Мегу от сети, подключал к нотбуку патчкордом и прошивал. Сервер на прошивку влиять не мог.
-
Участник @intrahouse написал в Плагин MegaD:
Замена файлов помочь не могла. Код плагина не менялся с января 2019 года
Посмотрим.
Файлы меняются не только при изменениях версии. Но и при некорректных отключениях питания, например. Юникс битый файл какой либо ценностью не считает. И просто удаляет его из файловой системы.
Чтобы хотя бы это исключить, я переустановил плагин. И изменения поведения уже видны.
Точнее протестирую в выходные.
-
@Erik, замена файла плагина на точно такой же без всякого на то основания - это из области ритуалов. Кто верит, тому помогает
Вы очень здорово рассуждаете, но никак не объясняете причину бага.
Я причину объяснить не могу, у меня недостаточно информации. Могу предложить варианты поиска проблемы
Баг такой - при добавлении сервера происходит искажение настройки порта.
Баг возникает на контроллере при прописывании сервера. Если это так - сервер совсем не при чем.
Или не при прописывании, а при отправке контроллером сообщения на сервер (то есть при замыкании входа)?Можно попробовать:
Тест 1. На сервере убрать обработку этого канала. Посмотреть, будет ли сбрасываться настройка.Тест 2. Прописать в качестве сервера не IH, а очень простой http-сервер, который просто слушает порт и точно ничего не отсылает
Тест 3. Попробовать замыкать вход не выключателем, а напрямую на контроллере
И самое главное - если все же думаете о внешнем воздействии на контроллер - исследуйте трафик
-
Участник @artem521 написал в Плагин MegaD:
И еще. Можно откатиться на ту же прошивку, при которой не было глюка и глянуть что будет.
Я это планирую. Выше написано.
-
Вы к словам только не придирайтесь, пожалуйста.
Баг возникает после прописывания сервера, при замыкании входа.
Если просто поменять IP сервера в настройках меги, или даже порт, ошибка пропадает.
А косяков полно, разной степени критичности. Я же выше даже скриншот прислал, как после изменения настроек плагина меняется отображение его версии.
Вы на это не прореагировали даже.Или это тоже больше ни у кого не проявляется? Или вы считаете это корректной работой?
-
Участник @intrapro написал в Плагин MegaD:
Можно попробовать:
Тест 1. На сервере убрать обработку этого канала. Посмотреть, будет ли сбрасываться настройка.
Тест 2. Прописать в качестве сервера не IH, а очень простой http-сервер, который просто слушает порт и точно ничего не отсылает
Тест 3. Попробовать замыкать вход не выключателем, а напрямую на контроллере
И самое главное - если все же думаете о внешнем воздействии на контроллер - исследуйте трафикВ выходные попробую. Но поясните цель тестов, пожалуйста.
- Разве это не то же самое, что отсутствие настройки сервера, или указание несуществующего адреса? Запрос на сервер уйдет, а ответа не будет.
- То же самое, запрос уйдет, а ответа не будет, в чем смысл теста?
- Какая цель? Если без настройки сервера нажатия выключателя отрабатываются, зачем исключать провода?
-
Участник @Erik написал в Плагин MegaD:
В выходные попробую. Но поясните цель тестов, пожалуйста.
Цель - понять, что приводит к переключению настройки.
- Разве это не то же самое, что отсутствие настройки сервера, или указание несуществующего адреса? Запрос на сервер уйдет, а ответа не будет.
Нет, плагин (его слушающий сервер) отвечает на все входящие, которые не смог распознать, пустым сообщением. Можно это увидеть в отладчике.
- То же самое, запрос уйдет, а ответа не будет, в чем смысл теста?
Да, здесь ответа не будет, или будет статус 404, или еще что-то. А Вы уверены, что переключение происходит при получении ответа? Может все же при (или после) отправки запроса
- Какая цель? Если без настройки сервера нажатия выключателя отрабатываются, зачем исключать провода?
Без настройки сервера нажатия отрабатываются на контроллере без отправки сообщений. Проверьте, если есть возможность и ситуация стабильно повторяется. Хуже, если это происходит не всегда, тогда выводы делать труднее.
Если ситуация стабильно воспроизводится, нужно исследовать сетевой трафик, можно по простому tcpdump-ом на IH сервере:
Установить, если не установлен
sudo apt-get install tcpdump
Запустить с IP MegaD, будут показаны все входящие и исходящие пакеты, т е порты 80 и слушающий (8083 в вашем случае)
sudo tcpdump host 192.168.0.14 -X
-
@Erik, если есть свободный выход у MegaD, то чтобы экспериментировать удаленно можно этим выходом замыкать вход, имитируя ваш выключатель.
Про кнопки/выключатели - конечно вы завязали выключали на очень широкий функционал, но, ИМХО, кнопки:- Приятнее "на ощуп"
- Имеют как минимум 3 действия (одинарный, двойной клики и удержание)
- Не нужно создавать каналы в плагине.
Про щелкания выключателем в режиме охраны - надуманная вещь. Во-первых, вор не знает/не видит где находится выключатель, во-вторых, не будет включать свет чтобы не привлечь внимания (зависит от условий). В нашем микрорайоне один из соседелй у себя на втором этаже лазил с фонариком под утро - и другие соседи, увидев это, сразу написали в нашу группу Whatsapp)))
Про привязку сценариев - при щелкании кнопки всегда что-то включается, поэтому создано устройство "актуатор", соответственно, у меня все сценарии к этим актуаторам и привязаны.
-
@Alex_Jet
Свободных выходов нет.- Это субъективно. Но выключатель никогда не оставляет сомнений.
- У выключателя есть не только действия, но и состояния.
- Если оставаться в рамках того, что поддерживает мега - не нужно. А что особенно грустно - и бесполезно.
-
Ситауция такая.
останавливаю плагин на сервере - и мега работает корректно.
Запускаю плагин - тут же проявляется ошибка при нажатии на выключатель.
Лог запуска плагина и нажатия выключателя тут.21.12 11:04:44.947 IH: Run /var/lib/intrahouse-c/plugins/megad/megad.js megad1 21.12 11:04:45.175 megad1: MegaD plugin has started. 21.12 11:04:45.197 megad1: Listen server start 21.12 11:04:45.205 megad1: Listening localhost:8083 21.12 11:04:45.408 megad1: 21.12 11:04:45.409 megad1: localhost => 192.168.13.10 HTTP GET /sec/?cmd=all 21.12 11:04:45.441 megad1: localhost <= 192.168.13.10 response: statusCode=200 contentType = text/html 21.12 11:04:45.448 megad1: body: ON/1;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF/0;OFF/6;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF 21.12 11:04:45.454 IH: command [ { dn: 'VENT2', prop: 'on' } ] 21.12 11:04:45.455 IH: send { type: 'act', data: [ { chan: '27', id: '27', desc: 'DO', weight: 1, reqsek: 0, req: '/%pwd%/?pt=%adr%&cmd=get', value: 1, command: 'on' } ] } 21.12 11:04:45.456 IH: get [ { id: '0', value: '1' }, { id: '1', value: '0' }, { id: '2', value: '0' }, { id: '3', value: '0' }, { id: '4', value: '0' }, { id: '5', value: '0' }, { id: '6', value: '0' }, { id: '7', value: '0' }, { id: '8', value: '0' }, { id: '9', value: '0' }, { id: '10', value: '0' }, { id: '11', value: '0' }, { id: '12', value: '0' }, { id: '13', value: '0' }, { id: '15', value: '0' }, { id: '16', value: '0' }, { id: '17', value: '0' }, { id: '18', value: '0' }, { id: '19', value: '0' }, { id: '20', value: '0' }, { id: '21', value: '0' }, { id: '22', value: '0' }, { id: '23', value: '0' }, { id: '24', value: '0' }, { id: '25', value: '0' }, { id: '26', value: '0' }, { id: '27', value: '0' }, { id: '28', value: '0' } ] set { SENSOR1: { dval: 1, err: 0 }, SENSOR13: { dval: 0, err: 0 }, SENSOR11: { dval: 0, err: 0 }, SENSOR12: { dval: 0, err: 0 }, SENSOR8: { dval: 0, err: 0 }, SENSOR10: { dval: 0, err: 0 }, SENSOR5: { dval: 0, err: 0 }, SOCKET7: { dval: 0, err: 0 }, LAMP18: { dval: 0, err: 0 }, LAMP16: { dval: 0, err: 0 }, LAMP17: { dval: 0, err: 0 }, LAMP1: { dval: 0, err: 0 }, LAMP7: { dval: 0, err: 0 }, LAMP11: { dval: 0, err: 0 }, SENSOR4: { dval: 0, err: 0 }, SENSOR6: { dval: 0, err: 0 }, SENSOR7: { dval: 0, err: 0 }, SENSOR9: { dval: 0, err: 0 }, SENSOR23: { dval: 0, err: 0 }, SENSOR24: { dval: 0, err: 0 }, SENSOR25: { dval: 0, err: 0 }, LAMP12: { dval: 0, err: 0 }, LAMP13: { dval: 0, err: 0 }, LAMP14: { dval: 0, err: 0 }, LAMP15: { dval: 0, err: 0 }, VENT1: { dval: 0, err: 0 }, VENT2: { dval: 0, err: 0 }, VENT3: { dval: 0, err: 0 } } 21.12 11:04:45.620 megad1: 21.12 11:04:45.621 megad1: localhost => 192.168.13.10 HTTP GET /sec/?cmd=27:1 21.12 11:04:45.629 megad1: localhost <= 192.168.13.10 response: statusCode=200 contentType = text/html 21.12 11:04:45.633 megad1: body: Done 21.12 11:04:45.634 IH: get [ { id: '27', value: 1 } ] set { VENT2: { dval: 1, err: 0 } } 21.12 11:05:02.379 IH: command [ { dn: 'LAMP11', prop: 'on' } ] 21.12 11:05:02.380 IH: send { type: 'act', data: [ { chan: '13', id: '13', desc: 'DO', weight: 1, reqsek: 0, req: '/%pwd%/?pt=%adr%&cmd=get', value: 1, command: 'on' } ] } 21.12 11:05:02.459 megad1: 21.12 11:05:02.460 megad1: localhost => 192.168.13.10 HTTP GET /sec/?cmd=13:1 21.12 11:05:02.464 megad1: localhost <= 192.168.13.10 response: statusCode=200 contentType = text/html 21.12 11:05:02.467 megad1: body: Done 21.12 11:05:02.469 IH: get [ { id: '13', value: 1 } ] set { LAMP11: { dval: 1, err: 0 } } 21.12 11:05:03.462 megad1: 192.168.13.10 => localhost:8083 HTTP GET /?pt=16&cnt=7 21.12 11:05:03.466 IH: get [ { id: '16', value: '1' }, { id: '23', value: '1' } ] set { SENSOR6: { dval: 1, err: 0 }, LAMP13: { dval: 1, err: 0 } } 21.12 11:05:03.467 megad1: 192.168.13.10 <= localhost:8083 23:1 21.12 11:05:04.458 megad1: 192.168.13.10 => localhost:8083 HTTP GET /?pt=16&m=2&cnt=7 21.12 11:05:04.459 IH: get [ { id: '16', value: '1' }, { id: '23', value: '1' } ] set { SENSOR6: { dval: 1, err: 0 }, LAMP13: { dval: 1, err: 0 } } 21.12 11:05:04.460 megad1: 192.168.13.10 <= localhost:8083 23:1