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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

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

Сообщение Andrey_B » 19 авг 2016, 18:17

А как общественность предлагает реализовывать поддержку подключения DS18B20 шиной?
Время конвертации температуры (с разрешением 12бит) 0,75 секунды.
Сейчас контроллер сам каждые несколько секунд отправляет запросы на конвертацию. Поэтому по запросу извне отдает температуру моментально. При этом адрес датчика нигде не хранит. А адрес (без family code)- это 6 байт. Напомню, что теоретически DS18B20 могут быть подключены к любому из 36 портов.
Ваши предложения?

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

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

Сообщение filippovsky » 19 авг 2016, 22:17

Андрей, подскажите, пожалуйста, после прошивки с ключом --ee датчик DS18B20 почему-то постоянно показывает вместо текущего значения температуры значение, введенное в Val, в чем может быть причина?
Ниже два скриншота.
Изображение
Изображение
При этом вчера внезапно он в какой-то момент ожил, показал реальную температуру 25.12, а через какое-то время опять такая же ситуация....
Датчик подключен напрямую в порт Mega-IN, питание паразитное.
По запросу отдает то же значение, что и в экране конфигурации.
Думал, это связано с таймаутами опроса датчика, а получается нет?

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

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

Сообщение filippovsky » 21 авг 2016, 18:29

C DS18B20 проблема оказалась не в прошивке, а в плохом контакте кабеля на ножке питания датчика.

alexsis_76

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

Сообщение alexsis_76 » 22 авг 2016, 02:57

А как общественность предлагает реализовывать поддержку подключения DS18B20 шиной
на этот счет есть хороший апноут, код приложен,исправно ищет, сможет искать по коду семейства,вам надо лишь описать функции работы с портом,сохраняете номера датчиков и работаете

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

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

Сообщение Andrey_B » 22 авг 2016, 12:51

Вопрос, разумеется, совершенно не в том, как найти на сайте Maxim "апноут".

Поясню для общественности.
- Контроллер отправляет в шину запрос на конвертацию. Конвертация занимает 0,75 с. В течение этого времени температура недоступна.
- Сейчас контроллер в случае запроса пользователя в момент конвертации температуры отдает ему как бы последнее полученное значение, которое он сам считал в момент, когда конвертации не происходило. Контроллер то знает, когда он отправлял запрос на конвертацию и когда нужно считывать температуру.
- Это последнее значение можно считать актуальным, так как контроллер сам опрашивает датчики раз в 5 секунд, а значит зона максимальное неактуальности 5 секунд. Вполне нормально.
- Для того, чтобы отдать это последнее значение контроллер сохраняет его в памяти. Для MegaD-328 выделить 28 байт памяти (14 * 2 байта) не так, чтобы страшно.

Теперь представим шину. Количество датчиков на шине условно произвольное. Скажем, 100 шт. Каждый порт - потенциально шина. 36 * 100 = 3600 датчиков. Специально привожу гипертрофированные значения, чтобы стала ясна суть.
- В момент запроса температуры пользователем контроллер не может ждать 0,75 секунд, прежде чем начать возвращать значения. Во-первых, это совершенно не в духе проекта. Во-вторых, за эти 0,75 секунд извне может потенциально прилететь еще с десяток подобных запросов по другим портам. Ожидание завершения конвертации исключено.
- Значит нужно как и прежде отправлять запросы на конвертацию в шину с определенной периодичностью, чтобы датчики всегда имели актуальные данные и отдавали их по запросу пользователя.
- Однако учитывая, что датчиков, подключенных к контроллеру может быть 200, 500, 3000 шт невозможно хранить последние считанные значения. Для этого не хватит никакой памяти.
- И все это лишь означает, что если запрос пользователя придет в момент конвертации датчиком температуры, то он вернет ошибку (или точнее правильно было бы назвать это "нет данных"). То есть это момент, когда от датчика требуют вернуть значение, которое он еще не подготовил. Он по-честному рапортует, что еще не готово.
- Понятно, что вероятность этого события тем выше, чем чаще контроллер будет отправлять в шину команды на конвертацию.

Шина в любом случае подразумевает наличие в системе сервера. Поскольку есть сервер, то существуют следующие варианты решения проблемы
1. Сервер отправляет запрос на считывание данных с шины и если получает информацию, что датчики заняты конвертацией, ждет, скажем еще секунду, и отправляет запрос заново.
2. Сервер сам управляет процессом конвертации. Отдельным запросом сервер отправляет команду на конвертацию, отдельным считывает данные. В этом случае сервер сам ждет столько, сколько нужен перед выполнением команды считывания данных.

И то и другое решение рабочее. Серверу все равно сколько и каких запросов отправлять. Вопрос только насколько допустимо во встроенном Web-интерфейсе видеть информацию в стиле "данные не готовы".

Поэтому повторю вопрос: а как общественность предлагает реализовывать поддержку подключения DS18B20 шиной?

xsash
Сообщения: 239
Зарегистрирован: 08 авг 2016, 12:27

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

Сообщение xsash » 22 авг 2016, 13:04

И, чтобы не раздувать объем памяти для хранения, ограничить количество датчиков для одно меги, допустим не более 100 или 255

Простите, если ошибусь, но сама мега при получении температуры с датчика может слать результат на указанный сервер get/post запросом?
Допустим мега хранит последние 50 последних показателей и выводит их в свой web интерфейс, если датчиков больше - соответственно "датчик занят", но все значения мега уже шлет внешнему серверу. Или глупо?

Haus
Сообщения: 227
Зарегистрирован: 28 апр 2015, 13:13

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

Сообщение Haus » 22 авг 2016, 14:22

Как по мне если любой порт можно будет задействовать как шину так просто ограничить количество датчиков на один порт. Если нужно больше чем ограничение задействуем другой порт. Ведь даже адаптер DS9490R имеет ограничение устройств-модулей до 256. Если память не изменяет в некоторых контролерах где есть шина для DS18B20 прописано ограничение 64 датчика. Если это коснется MegaD-328 было бы здорово, а так как их одной даже на этаж может не хватать то и 10-20 датчиков на этаж думаю вполне хватит.
Последний раз редактировалось Haus 22 авг 2016, 14:49, всего редактировалось 1 раз.

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

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

Сообщение Andrey_B » 22 авг 2016, 14:46

Мне не нравится идея выделения памяти для хранения показаний.
1. Даже если это будет лимит всего в 10 шт на порт - это 720 байт оперативной памяти (10 * 36 * 2). Гигантский объем, который можно было бы занять чем-то более полезным.
2. 10 шт на порт кажется даже мало.
3. Контроллер будет постоянно занят опросом шины/шин. И если в режиме SKIPROM, как сейчас, это практически не оказывает влияния на работу остальных функций, то в режиме MATCHROM при наличии нескольких шин на разных портах и двух-трех десятков датчиков на каждой, могут возникнуть вопросы (хотя и не обязательно).

Мне больше нравится вариант, который я бы условно назвал "busy bus". Ну запросил сервер данные, ну попал в момент, когда шина занята, сделал еще один запрос через секунду и получил данные.
При этом памяти не требуется. Контроллер в фоне не занимается бесполезной работой по опросу датчиков (когда в реальности данные нужны не чаще 1 раз в минуту или даже в 5). Лимит на количество датчиков будет определяться размером буфера под HTTP пакет (то есть это далеко не 10 датчиков на порт).

xsash
Сообщения: 239
Зарегистрирован: 08 авг 2016, 12:27

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

Сообщение xsash » 22 авг 2016, 15:09

Andrey_B, поправьте меня, если не прав

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

Haus
Сообщения: 227
Зарегистрирован: 28 апр 2015, 13:13

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

Сообщение Haus » 22 авг 2016, 15:19

Andrey_B писал(а): Мне больше нравится вариант, который я бы условно назвал "busy bus". Ну запросил сервер данные, ну попал в момент, когда шина занята, сделал еще один запрос через секунду и получил данные.
При этом памяти не требуется. Контроллер в фоне не занимается бесполезной работой по опросу датчиков (когда в реальности данные нужны не чаще 1 раз в минуту или даже в 5). Лимит на количество датчиков будет определяться размером буфера под HTTP пакет (то есть это далеко не 10 датчиков на порт).
Andrey_B
А термостат при этом варианте возможен на меге без сервера?

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

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

Сообщение Andrey_B » 22 авг 2016, 15:57

xsash писал(а):но почему не сделать тогда отдачу температуры с датчика не по запросу с внешнего сервера, а сразу слать get запросом и не хранить тогда ничего в памяти
К порту подключено, например, 30 датчиков. Учитывая, что нужно передавать символьное представление адреса датчика, URL будет длинной байт в 600-700. Но даже не это плохо. Плох с моей точки зрения вообще подход "ддосить" сервер информацией, которая ему, возможно, и не нужна в этот момент или с этой периодичностью. И потом какие-то датчики могут требовать опрос раз в 5-10 секунд, какие-то раз в 5-10 минут... И все это на одной шине. Нет, вариант спамить сервер мне совсем не нравится.
Haus писал(а):А термостат при этом варианте возможен на меге без сервера?
Конечно, нет. Термостат возможен только в случае, если к порту подключен один датчик. Если это шина с несколькими датчиками, термостат невозможен по определению, какой бы вариант реализации не был выбран.

xsash
Сообщения: 239
Зарегистрирован: 08 авг 2016, 12:27

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

Сообщение xsash » 22 авг 2016, 16:04

Да. Тоже подумал про большой объем информации, вероятно не всегда актуальной...

>И потом какие-то датчики могут требовать опрос раз в 5-10 секунд, какие-то раз в 5-10 минут...
Как вариант опционально настраивать в самой меге

Bluefox
Сообщения: 150
Зарегистрирован: 03 мар 2014, 20:02

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

Сообщение Bluefox » 22 авг 2016, 16:06

Как предложение:
Раз уж памяти снова стало больше, почему бы не облегчить жизнь тем, кто интегрирует MegaD-2561 в платформы?
Можно создать сервис, который в JSON или XML возвращает конфигурацию меги?

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

http://megaip/sec/config=all
=>

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

{
   "SERVER" : {
   	"ip": "192.168.0.1",
   	"port": "80",
   	"secret": "sec",
        "setting1": "blabla",
        "setting2": "blabla"
   },
   "P0": { 
        "type": "digital",
        "name": "Port 0",
        "setting1": "blabla",
        "setting2": "blabla"
   },   
   "P1": { 
        "type": "analog",
        "name": "Port 1",
        "setting1": "blabla",
        "setting2": "blabla"
   },
   ...
}
Так как существуют кастомные прошивки конфигурация осложняется.

alexsis_76

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

Сообщение alexsis_76 » 22 авг 2016, 16:37

И потом какие-то датчики могут требовать опрос раз в 5-10 секунд, какие-то раз в 5-10 минут...
дак никто не запрещает,адреса то на что, передаете соответствие ром, затем 44
время преобразования можно укоротить снизив разрешение
еще одна тонкость,если вы к примеру подключили 3 датчика, затем хотите добавить еше один, то он может оказаться первым, зависит от серийного номера все соберется в кучу и перестанет работать
к примеру делаете вы термостат(сделать его при наличии шины конечно же можно) связали второй датчик,если не принять некоторых мер при добавлении датчиков номер два может оказаться номером три,что мерить будем?

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

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

Сообщение Andrey_B » 22 авг 2016, 16:48

xsash писал(а):>И потом какие-то датчики могут требовать опрос раз в 5-10 секунд, какие-то раз в 5-10 минут...
Как вариант опционально настраивать в самой меге
Как вы это себе представляете? Мы тут говорим, что жалко 2 байт RAM на датчик, а вы предлагаете тратить минимум 8-9 байт EEPROM'а на датчик? Вы же понимаете, что в этом случае нужно будет хранить не только настройку времени, но и адрес датчика?

Все еще жду дельных предложений от уважаемой общественности.
Предлагаю смешанное решение.
Запрос на конвертацию температуры отправлять не каждые 5 секунд, а каждые 30-60 секунд. Это позволит существенно снизить вероятность "попадания" на занятую шину. Но актуальность данных, считываемых прямым запросом будет ниже.
Реализовать функцию конвертации температуры по запросу сервера.

Таким образом сервер/пользователь либо сможет воспользоваться уже готовыми, но не совсем свежими данными с небольшой вероятностью попадания на занятую шину, либо забрать свежие данные за два такта.
- Отправляем запрос на конвертацию
- Ждем одну секунду
- Считываем данные
Понятно, что такая реализация на сервере абсолютно проста - не сложнее одного отдельного запроса.

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

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

Сообщение Andrey_B » 22 авг 2016, 16:52

Bluefox писал(а): Можно создать сервис, который в JSON или XML возвращает конфигурацию меги?

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

http://megaip/sec/config=all
По этому поводу уже было обсуждение. Считаю реализацию подобных "штук" в микроконтроллере нецелесообразной тратой драгоценных ресурсов.
Считать конфигурацию и при необходимости конвертировать ее во что угодно можно простым скриптом. В megad-cfg реализован подобный механизм считывания/записи конфигурации.

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

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

Сообщение Andrey_B » 22 авг 2016, 17:05

alexsis_76 писал(а):
И потом какие-то датчики могут требовать опрос раз в 5-10 секунд, какие-то раз в 5-10 минут...
дак никто не запрещает,адреса то на что, передаете соответствие ром, затем 44
Еще раз. Вопрос заключается не в том, как работает шина 1-wire. Это хорошо и доступно описано в документации.
alexsis_76 писал(а):время преобразования можно укоротить снизив разрешение
Можно. Но с моей точки зрения необходимо:
а) вообще в принципе избежать каких-либо задержек при ответе на запрос сервера
б) максимально использовать возможности DS18B20
Не думаю, что следует снижать разрешение.
alexsis_76 писал(а):еще одна тонкость,если вы к примеру подключили 3 датчика, затем хотите добавить еше один, то он может оказаться первым, зависит от серийного номера все соберется в кучу и перестанет работать
Я не понимаю, о чем вы. Планируется, что сервер либо запрашивает значение конкретного датчика по адресу, либо считывает данные в формате адрес:температура;адрес:температура... Что тут может собраться в кучу я не понял.
alexsis_76 писал(а):к примеру делаете вы термостат(сделать его при наличии шины конечно же можно) связали второй датчик,если не принять некоторых мер при добавлении датчиков номер два может оказаться номером три,что мерить будем?
Я не планирую делать термостат для каждого датчика шины (напомню, что датчиков может быть, например 500. И это не много всего-лишь по 13-14 на порт), так как не представляю как это можно сделать.
Для реализации термостата необходимо хранить в EEPROM: адрес датчика, температуру, тип сравнения, Action, NetAction. Довольно просто посчитать, насколько датчиков хватит доступного объема EEPROM. Не намного. Пустая затея.

alexsis_76

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

Сообщение alexsis_76 » 22 авг 2016, 17:43

Как вы это себе представляете? Мы тут говорим, что жалко 2 байт RAM на датчик, а вы предлагаете тратить минимум 8-9 байт EEPROM'а на датчик? Вы же понимаете, что в этом случае нужно будет хранить не только настройку времени, но и адрес датчика?
хранить адреса все равно придется, сдесь сеть налагает свои требования
Запрос на конвертацию температуры отправлять не каждые 5 секунд, а каждые 30-60 секунд
сдесь возможны варианты
либо пропуск ром затем 0х44 т е всем
либо Соответствие ROM затем 0х44 кому то одному
Отправляем запрос на конвертацию
- Ждем одну секунду
- Считываем данные
можно сделать так отправляем запрос на конвертацию(с сервера) только одному устройству(данные температуры которого в данный момент нужны)сдесь нужно ждать те самые 750 мс затем читаем с целевого устройства(опять нужен адрес устройства в сети), можно отправлять запрос на конвертацию сразу всем но все равно нужен адрес
это проще не надо хранить массив адресов в контроллере, но сервер должен сначала узнать эти самые адреса
Я не понимаю, о чем вы
поймете когда начнете делать
Re: 1-Wire по Ethernet
Сообщение THK » 26 мар 2012, 14:34
Вот я и скопировал. :) Думал, если заработает как написано, то и неважно что исходников нет.
В результате обнаружил, что при добавлении на шину нового датчика, "номера" датчиков спутываются в клубок. После недолгой переписки с автором стало понятно, что исправлять что-либо он не собирается...
на пальцах у вас имеется 3 датчика включенных в сеть они находятся не абы как а в соответствии с номерами,появился четвертый датчик, после процедуры поиска он стал не четвертым как вы бы ожидали(а может и четвертым), а например первым или вторым(первым по моему находится датчик с наименьшим адресом)
Я не планирую делать термостат для каждого датчика шины (напомню, что датчиков может быть, например 500. И это не много всего-лишь по 13-14 на порт), так как не представляю как это можно сделать.
Для реализации термостата необходимо хранить в EEPROM: адрес датчика, температуру, тип сравнения, Action, NetAction. Довольно просто посчитать, насколько датчиков хватит доступного объема EEPROM. Не намного. Пустая затея.
да действительно задача не тривиальная, требует затрат

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

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

Сообщение Andrey_B » 22 авг 2016, 19:02

alexsis_76 писал(а):хранить адреса все равно придется, сдесь сеть налагает свои требования
Я не планирую хранить в контроллере адреса датчиков. Зачем это ему? Есть "сервер" - вот он пусть и хранит.
alexsis_76 писал(а):
Запрос на конвертацию температуры отправлять не каждые 5 секунд, а каждые 30-60 секунд
сдесь возможны варианты
либо пропуск ром затем 0х44 т е всем
либо Соответствие ROM затем 0х44 кому то одному
Я использую только режим "simultaneous temperature conversions" (Skip ROM + 0x44h). Не вижу смысла в рамках обсуждаемой реализации запрашивать конвертацию индивидуально.
alexsis_76 писал(а):можно сделать так отправляем запрос на конвертацию(с сервера) только одному устройству(данные температуры которого в данный момент нужны)сдесь нужно ждать те самые 750 мс затем читаем с целевого устройства(опять нужен адрес устройства в сети), можно отправлять запрос на конвертацию сразу всем но все равно нужен адрес
это проще не надо хранить массив адресов в контроллере, но сервер должен сначала узнать эти самые адреса
Я использую только режим "simultaneous temperature conversions". Для отправки запроса на конвертацию "всем" нужен только номер порта (шины). Не важно - делается ли запрос контроллером или сервером.
В контроллере никакого массива адресов не будет. Контроллер выдает адреса всех датчиков, подключенных к шине. Это уже дело сервера как обрабатывать и хранить эту информацию.
alexsis_76 писал(а):
Я не понимаю, о чем вы
поймете когда начнете делать
Что делать? Прошивка с поддержкой шины есть. Я задал вопрос относительно организации логики работы, обозначив конкретную проблему, которую нужно обсудить. Но что там должно "собираться в кучу" и зачем нам это вообще надо я не понял.
на пальцах у вас имеется 3 датчика включенных в сеть они находятся не абы как а в соответствии с номерами,появился четвертый датчик, после процедуры поиска он стал не четвертым как вы бы ожидали(а может и четвертым), а например первым или вторым(первым по моему находится датчик с наименьшим адресом)
Какая разница какой датчик: первый, пятый, десятый и в какой последовательности они подключаются?
Еще раз. Формат, который устройство отдает по запросу сервера [адрес:температура;адрес:температура... и т.д.] Никакой другой "нумерации" кроме реальных адресов датчиков не будет.
Сервер идентифицирует датчик по адресу. Также сервер может определить какой датчик выпал или появился. Я не вижу смысла что-то тут еще придумывать.

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

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

Сообщение filippovsky » 22 авг 2016, 22:24

Andrey_B, прошу прощения, что встреваю, но если я правильно понял мысль alexsis_76, он хочет сказать,что при подключении нового датчика в уже существующую сеть могут измениться адреса у тех датчиков, которые уже были подключены ранее и настроена их обработка на сервере.
Т.е. если у нас был датчик температуры с адресом 1, и мы настроили на сервере обработку его показаний, например, как показаний в гостиной, то когда мы подключим позже еще один датчик в гараже, у нас есть риск получения новым датчиком адреса 1, а датчик в гостиной вместо адреса 1 получит адрес 2. И сервер будет показывать температуру в гостиной, которая на самом деле будет читаться с датчика в гараже. Т.е. подключая новый датчик, мы рискуем нарушить логику уже настроенной системы. При наличии большого количества датчиков задача понять, какой из датчиков какой адрес имеет и перенастроить все скрипты - может потребовать некоторых усилий и времени. Как-то так. Т.е. это не проблема Меги, а проблема самой топологии сети. Мега отдаст, конечно, набор пар "адрес:значение", но эти адреса серверу надо будет как-то привязать к помещению, и здесь как раз и возникнет проблема, если адрес датчика меняется при изменении количества датчиков. Меге это не принципиально, а вот скрипту, который должен, например, принять решение о том, в каком именно помещении надо отключить или включить отопление - это будет важно.
alexsis_76, я правильно понял Вашу мысль? Извиняюсь за дилетантский вопрос, а нет возможности явно прошить в датчике адрес? Скажем, воткнув его предварительно в отдельный порт Меги и прошив в датчике нужный адрес какой-нибудь командой? Либо, может быть, есть возможность передавать от Меги к серверу не "адрес:температура" а "Серийный номер датчика:температура ", если датчик может его сообщить ? Еще раз прошу прощения за возможную ересь, т.к. с сетями 1-ware и принципом присвоения их адресов раньше не сталкивался.
Последний раз редактировалось filippovsky 22 авг 2016, 22:45, всего редактировалось 3 раза.

Ответить