Бесспорно, протокол жив и хорош. Но не забывайте, что помимо контролера (физическое подключение к серверу), вам понадобиться тащить провода от контролера к серверу. Здесь же используется Ethernet соединение между Мегой и серверомAndry писал(а): используют расширители по RS485 интерфейсу.
Прошивка MegaD-2561 (релизы, обсуждения, предложения)
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Андрей,
Небольшие особенности интерфейса в прошивке (fw: 4.17b2) 1. После установки, значение INT нельзя удалить, только заменить на другой порт.
Значение запоминается в конфигурации даже если основной порт перевести в NC и проделать с нуля процедуру по настройке расширителя.
2. Порты расширителя нельзя перевести в OUT (не запоминает).
3. Если основной порт перевести в NC, то меню с расширенными портами не пропадает.
Хотел уточнить по функционалу портов IN в расширителе. Их удел только "отлавливать" замыкания (герконы, охранные датчики, пожарные датчики..) или на них можно будет повесить что-то более сложное?
Небольшие особенности интерфейса в прошивке (fw: 4.17b2) 1. После установки, значение INT нельзя удалить, только заменить на другой порт.
Значение запоминается в конфигурации даже если основной порт перевести в NC и проделать с нуля процедуру по настройке расширителя.
2. Порты расширителя нельзя перевести в OUT (не запоминает).
3. Если основной порт перевести в NC, то меню с расширенными портами не пропадает.
Хотел уточнить по функционалу портов IN в расширителе. Их удел только "отлавливать" замыкания (герконы, охранные датчики, пожарные датчики..) или на них можно будет повесить что-то более сложное?
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
В режиме In только логический 0 или 1Vadim писал(а): или на них можно будет повесить что-то более сложное?
В режиме out замыкающийся сухой контакт
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
http://ab-log.ru/files/File/megad-2561/ ... a3-hex.zip
- Исправлены все ошибки, на которые указал Vadim
- Расширена поддержка MCP23017. Теперь первые 8 портов можно настраивать IN/OUT (также, как и для MCP23008), вторые 8 портов автоматически конфигурируются как IN. В Web-интерфейсе их не видно, но при замыкании/размыкании на сервер будут отправляться сообщения ext8-ext15.
INTA/INTB для MCP23017 нужно подключать к одному порту INT, который указывается в настройках SDA порта.
Вход, к которому подключаются линии INT(A)/INTB нужно нужно настроить как простой IN, но обязательно поставить флажок Raw.
Повторю, что в качестве такого входа можно использовать любой из доступных портов контроллера.
- Исправлены все ошибки, на которые указал Vadim
- Расширена поддержка MCP23017. Теперь первые 8 портов можно настраивать IN/OUT (также, как и для MCP23008), вторые 8 портов автоматически конфигурируются как IN. В Web-интерфейсе их не видно, но при замыкании/размыкании на сервер будут отправляться сообщения ext8-ext15.
INTA/INTB для MCP23017 нужно подключать к одному порту INT, который указывается в настройках SDA порта.
Вход, к которому подключаются линии INT(A)/INTB нужно нужно настроить как простой IN, но обязательно поставить флажок Raw.
Повторю, что в качестве такого входа можно использовать любой из доступных портов контроллера.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
http://ab-log.ru/files/File/megad-2561/ ... a4-hex.zip
- Добавлена полноценная поддержка MCP23017
Прошивка автоматически определяет тип подключенного устройства (MCP23008 или MCP23017)
В Web-интерфейсе отображаются все 16 портов для MCP23017
Добавлен вывод типа порта в общем списке
- Добавлена полноценная поддержка MCP23017
Прошивка автоматически определяет тип подключенного устройства (MCP23008 или MCP23017)
В Web-интерфейсе отображаются все 16 портов для MCP23017
Добавлен вывод типа порта в общем списке
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Андрей, порт I2C при выборе Mode SDA в поле SCL прописывается "0" но порт P0 как SCL использовать не получится так как в порте SDA больше нет никаких настроек. Наверно по умолчанию должно быть пусто.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Andrey_B, есть несколько вопросов , поясните пожалуйста . Для чего в настройках порта I2C можно выбирать "любое устройство" ANY ?
У меня на шине I2C висит bmp180 и mcp23008 . По запросу сmd=all позиция остаётся пустая .По запросу ?pt=30&scl=31&i2c_dev=bmp180 получаю значение давления. Значения портов mcp23008 так получить не удаётся ( ?pt=30&scl=31&i2c_dev=mcp23008) , а очень хочется, о чём я просил выше.
При сканировании шины I2C опознаётся адрес 0х40 ( это мой mcp23008) , но не пишет название устройства. BMP180 распознаётся . Может быть проблема в этом ? Если указать устройство MCP230xx, и зайти в настройки EXT-IO, то расширитель распознаётся -- Ports Ext (MCP23008) -- .
В моей конкретной реализации через некоторое время (1 час, 6 часов , сутки...) mcp23008 перестаёт управляться, все порты выключены (OFF) , хотя до этого некоторые были включены (ON) . Жмём ON или OFF - реакции никакой. Естественно , помогает передёргивание по питанию или переинициализация MCP23008. megaD2561 не виснет ( Uptime: 30d 00:30 ). Прошивка fw: 4.17b4 , длина проводов I2C минимальная, питание идеальное . В чём может быть проблема , куда копнуть ?
У меня на шине I2C висит bmp180 и mcp23008 . По запросу сmd=all позиция остаётся пустая .По запросу ?pt=30&scl=31&i2c_dev=bmp180 получаю значение давления. Значения портов mcp23008 так получить не удаётся ( ?pt=30&scl=31&i2c_dev=mcp23008) , а очень хочется, о чём я просил выше.
При сканировании шины I2C опознаётся адрес 0х40 ( это мой mcp23008) , но не пишет название устройства. BMP180 распознаётся . Может быть проблема в этом ? Если указать устройство MCP230xx, и зайти в настройки EXT-IO, то расширитель распознаётся -- Ports Ext (MCP23008) -- .
В моей конкретной реализации через некоторое время (1 час, 6 часов , сутки...) mcp23008 перестаёт управляться, все порты выключены (OFF) , хотя до этого некоторые были включены (ON) . Жмём ON или OFF - реакции никакой. Естественно , помогает передёргивание по питанию или переинициализация MCP23008. megaD2561 не виснет ( Uptime: 30d 00:30 ). Прошивка fw: 4.17b4 , длина проводов I2C минимальная, питание идеальное . В чём может быть проблема , куда копнуть ?
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
http://ab-log.ru/files/File/megad-2561/ ... a5-hex.zip
- При выборе типа порта I2C/SDA по умолчанию в поле SCL пусто
smorigo, "ANY" можно использовать с датчиками, но не с теми устройствами, которые требуют инициализации.
MCP230XX требует инициализации, в EEPROM порта хранится информация о типах расширенных портов. Использовать ANY с расширителем не получится.
Вы можете выбрать тип устройства MCP230XX, но затем точно также запрашивать данные с датчиков, которые висят на этой шине через i2c_dev=xxx (кроме BMPx80, для которых также хранятся калибровочные коэффициенты в EEPROM).
Что касается "потери связи" с расширителем, то у себя такое не наблюдал, но длительного тестирования не проводил. Как-нибудь попробую.
- При выборе типа порта I2C/SDA по умолчанию в поле SCL пусто
smorigo, "ANY" можно использовать с датчиками, но не с теми устройствами, которые требуют инициализации.
MCP230XX требует инициализации, в EEPROM порта хранится информация о типах расширенных портов. Использовать ANY с расширителем не получится.
Вы можете выбрать тип устройства MCP230XX, но затем точно также запрашивать данные с датчиков, которые висят на этой шине через i2c_dev=xxx (кроме BMPx80, для которых также хранятся калибровочные коэффициенты в EEPROM).
Что касается "потери связи" с расширителем, то у себя такое не наблюдал, но длительного тестирования не проводил. Как-нибудь попробую.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Да но теперь при выборе SCL "0", остальные настройки не появляются.Andrey_B писал(а):http://ab-log.ru/files/File/megad-2561/ ... a5-hex.zip
- При выборе типа порта I2C/SDA по умолчанию в поле SCL пусто
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Андрей, надо в статье по MegaD-2561 красным по белому расписать для каких I2C устройств нужно в выпадающем списке обязательно выбирать соответствующее наименование Dev. Многие не понимают, что, например, для BMP180/280, BME280, SSD1306, MCP230xx нужна обязательная первоначальная инициализация, иначе они нормально работать не будут! При этом на ту же шину можно повесить обычные датчики (SI7021, HTU21D, MAX44009, BH1750, TSL2591), не требующие инициализацию, и опрашивать их с помощью http-команд.Andrey_B писал(а):smorigo, "ANY" можно использовать с датчиками, но не с теми устройствами, которые требуют инициализации.
MCP230XX требует инициализации, в EEPROM порта хранится информация о типах расширенных портов. Использовать ANY с расширителем не получится.
Вы можете выбрать тип устройства MCP230XX, но затем точно также запрашивать данные с датчиков, которые висят на этой шине через i2c_dev=xxx (кроме BMPx80, для которых также хранятся калибровочные коэффициенты в EEPROM).
Что касается "потери связи" с расширителем, то у себя такое не наблюдал, но длительного тестирования не проводил. Как-нибудь попробую.
У меня несколько месяцев тестируется шина, на которой висят BME280, HTU21D, SSD1306. По умолчанию dev = SSD1306, значит при любой перезагрузке контроллера (перебой питания, перезагрузка при изменении настроек портов, зависание МК) показания с BME280 начинают приходить далекие от истины. Вывод - на одной шине SSD1306 и BME280 использовать не рекомендуется, поскольку обоим нужна первоначальная инициализация (в том числе хранение калибровочных данных BME280).
Последний раз редактировалось Alex_Jet 04 окт 2017, 18:50, всего редактировалось 1 раз.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
http://ab-log.ru/files/File/megad-2561/ ... a6-hex.zipHaus писал(а):Да но теперь при выборе SCL "0", остальные настройки не появляются.
Поправил.
Alex_Jet, да, вы правы. Нужно написать.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Лучше тогда сделать посылку команд инициализации для всех поддерживаемых типов i2c устройств на порту в момент загрузки (или сканить шину и инициализировать то, что найдётся).Alex_Jet писал(а):показания с BME280 начинают приходить далекие от истины. Вывод на одной шине SSD1306 и BME280 использовать не рекомендуется, поскольку обоим нужна первоначальная инициализация.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
hawkeye, в отличие, скажем, от 1-wire, адреса I2C-устройств не только не уникальны, адресное пространство - это всего лишь 112 возможных адресов (7 бит минус служебные).
Пока не сталкивался, но допускаю, что совершенно разные устройства могут иметь одинаковые адреса. Например, у MCP23008 такой же адрес, как у MCP23017. Это похожие микросхемы, хотя код, который автоматически определяет тип микросхемы, занимает далеко не две строчки. А если это принципиально другое устройство? Напомню, что для работы с конкретным I2C-устройством не обязательно иметь поддержвку в прошивке. Можно работать с ним через программную эмуляцию (I2C-PHP). Сканирование шины и обнаружение на ней адреса вовсе не гарантирует однозначную идентификацию устройства. А дополнительные меры по интеллектуальной идентификации могут быть слишком затратными с точки зрения реализации.
И проблема даже не в инициализации. Проблема в том, что для некоторых устройств (MCP230XX, BMPx80) необходимо хранение в EEPROM SDA-порта некоторых конфигурационных параметров. Как вы себе представляете хранение в одной и той же ячейке памяти двух значений, которые относятся к разным устройствам?
Пока не сталкивался, но допускаю, что совершенно разные устройства могут иметь одинаковые адреса. Например, у MCP23008 такой же адрес, как у MCP23017. Это похожие микросхемы, хотя код, который автоматически определяет тип микросхемы, занимает далеко не две строчки. А если это принципиально другое устройство? Напомню, что для работы с конкретным I2C-устройством не обязательно иметь поддержвку в прошивке. Можно работать с ним через программную эмуляцию (I2C-PHP). Сканирование шины и обнаружение на ней адреса вовсе не гарантирует однозначную идентификацию устройства. А дополнительные меры по интеллектуальной идентификации могут быть слишком затратными с точки зрения реализации.
И проблема даже не в инициализации. Проблема в том, что для некоторых устройств (MCP230XX, BMPx80) необходимо хранение в EEPROM SDA-порта некоторых конфигурационных параметров. Как вы себе представляете хранение в одной и той же ячейке памяти двух значений, которые относятся к разным устройствам?
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Мне кажется Вы путаете микроконтроллер с микрокомпьютером. Чувствуете разницу? На микрокомпьютере возможны любые хотелки, алгоритмы и прочее, но и стоимость соответствующая (особенно это касается грамотной программной части). Тут же микроконтроллер с простейшим интерфейсом, который "из коробки" уже очень многое умеет, при этом главным образом отличается от микрокомпьютера очень высокой надежностью и ничтожным энергопотреблением, однако при этом имеет "свои" ограничения.hawkeye писал(а):Лучше тогда сделать посылку команд инициализации для всех поддерживаемых типов i2c устройств на порту в момент загрузки (или сканить шину и инициализировать то, что найдётся).
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Баг или фича?
Если включать-выключать выход меги из ее же интерфейса, то изменения состояния на сервер не отправляются. Проверял на прошивке fw: 4.07b4.
Если замыкать вход перемычкой или кнопкой - изменение состояния входа отправляется, а если зайти в веб-интерфейс, выбрать нужный выход и сделать ON-OFF, то на сервер ничего не уходит, хотя логически изменение состояния выхода на него должно уходить.
Так и должно быть?
И на мой взгляд, было бы неплохо добавить в веб-интерфейсе megad текстовое поле для каждого входа-выхода, чтобы можно было его как-то читабельно обозвать, а то при отладке приходится все время заглядывать в таблицу подключений.
Если включать-выключать выход меги из ее же интерфейса, то изменения состояния на сервер не отправляются. Проверял на прошивке fw: 4.07b4.
Если замыкать вход перемычкой или кнопкой - изменение состояния входа отправляется, а если зайти в веб-интерфейс, выбрать нужный выход и сделать ON-OFF, то на сервер ничего не уходит, хотя логически изменение состояния выхода на него должно уходить.
Так и должно быть?
И на мой взгляд, было бы неплохо добавить в веб-интерфейсе megad текстовое поле для каждого входа-выхода, чтобы можно было его как-то читабельно обозвать, а то при отладке приходится все время заглядывать в таблицу подключений.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
1. Контроллер не может определить кто именно переключил выход: пользователь через браузер, скрипт на сервере, другое устройство. HTTP-запрос одинаковый во всех случаях.
Вы предлагаете определять источник команд по User-Agent? Не слишком надежный и удобный способ.
2. Рядовому пользователю, который вот только оторвался от "ок" и "вк", строго говоря, нечего делать во встроенном Web-интерфейсе устройства. Это нехорошо ни для пользователя, ни для устройства.
3. Если есть сервер, то только он и должен переключать выходы. А раз так, то уведомлять его о факте переключения - лишнее. Команда управления от другого устройства (NetAction) возможна по логике только при каких-то форс-мажорных обстоятельствах.
Вы предлагаете определять источник команд по User-Agent? Не слишком надежный и удобный способ.
2. Рядовому пользователю, который вот только оторвался от "ок" и "вк", строго говоря, нечего делать во встроенном Web-интерфейсе устройства. Это нехорошо ни для пользователя, ни для устройства.
3. Если есть сервер, то только он и должен переключать выходы. А раз так, то уведомлять его о факте переключения - лишнее. Команда управления от другого устройства (NetAction) возможна по логике только при каких-то форс-мажорных обстоятельствах.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
По-моему в отношении переключения выходов никогда ничего и не отправлялось. Исходя из идеологии Меги.Maxmen писал(а):Баг или фича?
Если включать-выключать выход меги из ее же интерфейса, то изменения состояния на сервер не отправляются. Проверял на прошивке fw: 4.07b4.
...
Так и должно быть?
...
У меня, например, такой потребности нет. Для других такой функционал мог бы быть полезен. Я как-то писал здесь по этому поводу (http://ab-log.ru/forum/viewtopic.php?f= ... &start=535). Если всем рулит сервер, в то "пятое колесо" не нужно. А вот если Мегу переключают из других мест (как в описанном мной реальном случае), то отправка команд на сервер об этом нужна.
Если такой экзотический вариант работы с Мегой будет получать распространение, думаю для страждущих эту функцию можно реализовать в виде чекбокса (потому что в подавляющем большинстве случаев отправка команд не нужна, ибо всем рулит сервер, который и так "в курсе").
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Откуда пришла команда- неважно. Хотелось бы, чтобы контроллер просто сообщал серверу что состояние его выходи изменилось и не более.Andrey_B писал(а):1. Контроллер не может определить кто именно переключил выход: пользователь через браузер, скрипт на сервере, другое устройство. HTTP-запрос одинаковый во всех случаях.
Вы предлагаете определять источник команд по User-Agent? Не слишком надежный и удобный способ.
3. Если есть сервер, то только он и должен переключать выходы. А раз так, то уведомлять его о факте переключения - лишнее. Команда управления от другого устройства (NetAction) возможна по логике только при каких-то форс-мажорных обстоятельствах.
Не могу согласиться. Возможность видеть реальное состояние выхода была бы полезна. Как минимум, для отладки. Также это позволило бы серверу видеть изменения состояния выходов независимо от того, каким способом это изменение было задействовано.
Например, если делать децентрализованную систему (что соответствует концепции megad) и контроллеры расположить в разных местах. Они большую часть информации отправляют друг другу напрямую минуя сервер и сервер при отсутствии информации о состоянии выходов просто не в курсе что происходит. Я, например, так сделал чтобы не зависеть от доступности сервера. Т.е. основные и самые важных механизмы работают без участия сервера. Пока это сделано потому что сервер до конца не настроен, но в перспективе планирую самые критичные части системы оставить независимыми от сервера.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Суть децентрализованной системы как раз в полях Act и NetAct. Пока сервер есть он управляет всем сам. Когда с ним что-то случилось, то вступают в игру поля Act и NetAct! Андрей и так уже сделал удобную "лазейку" в виде обработки контроллерами команды d от сервера - то есть получается, что код управляющего скрипта сводится к минимуму: в ответ на входящие событие отправляем команду d контроллеру и он выполняет действия которые записаны в Act или NetAct.Maxmen писал(а):Например, если делать децентрализованную систему (что соответствует концепции megad) и контроллеры расположить в разных местах. Они большую часть информации отправляют друг другу напрямую минуя сервер и сервер при отсутствии информации о состоянии выходов просто не в курсе что происходит. Я, например, так сделал чтобы не зависеть от доступности сервера. Т.е. основные и самые важных механизмы работают без участия сервера. Пока это сделано потому что сервер до конца не настроен, но в перспективе планирую самые критичные части системы оставить независимыми от сервера.
Я вижу полезность опроса состояния выходов только для случая "синхронизации" работы только что включенного сервера со всеми доступными контроллерами - чтобы в веб-интерфейсе умного дома при поднятии сервера отобразилась актуальная на текущий момент картина.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Maxmen, устройство предполагает максимальную производительность и эффективность при минимальных затратах вычислительных ресурсов. Так, например, вы можете сколь угодно быстро нажимать на выключатель или даже на два выключателя одновременно и все запрограммированные в устройстве или на сервере действия будут выполнены точно, предсказуемо и без каких-либо задержек.
При этом может показаться, что нажатие на выключатель - это всего лишь один пакет на сервер. На самом деле пакетов минимум семь. Каждое нажатие на выключатель - это целая процедура с точки зрения обмена данными между устройством и сервером. В прошивке сделано все для обработки ситуаций, когда новое нажатие фиксируется до завершения обмена данными в рамках предыдущего события.
Генерация сообщения на сервер об изменении состояния выхода фактически удвоит объем передаваемых данных без должного на то основания и необходимости, увеличит риск сбоя при сверхбыстрых событиях в режиме Raw.
В то же время ваша ситуация, когда сервер есть, но как бы не принимает активного участия в работе устройств, говорит о том, что можно с таким же успехом использовать функцию srv-loop или периодически (раз в 10-30-60 секунд) опрашивать состояние портов через cmd=all. Не вижу при данных условиях действительной необходимости получать информацию о состояние портов мгновенно.
Нужно еще понимать, как именно ваш как бы сервер хочет использовать информацию о состоянии выходов. Если только для какой-то визуализации по запросу пользователя, то легко реализовать механизм опроса состояния нужных портов по требованию, только тогда, например, когда это нужно.
При этом может показаться, что нажатие на выключатель - это всего лишь один пакет на сервер. На самом деле пакетов минимум семь. Каждое нажатие на выключатель - это целая процедура с точки зрения обмена данными между устройством и сервером. В прошивке сделано все для обработки ситуаций, когда новое нажатие фиксируется до завершения обмена данными в рамках предыдущего события.
Генерация сообщения на сервер об изменении состояния выхода фактически удвоит объем передаваемых данных без должного на то основания и необходимости, увеличит риск сбоя при сверхбыстрых событиях в режиме Raw.
В то же время ваша ситуация, когда сервер есть, но как бы не принимает активного участия в работе устройств, говорит о том, что можно с таким же успехом использовать функцию srv-loop или периодически (раз в 10-30-60 секунд) опрашивать состояние портов через cmd=all. Не вижу при данных условиях действительной необходимости получать информацию о состояние портов мгновенно.
Нужно еще понимать, как именно ваш как бы сервер хочет использовать информацию о состоянии выходов. Если только для какой-то визуализации по запросу пользователя, то легко реализовать механизм опроса состояния нужных портов по требованию, только тогда, например, когда это нужно.