Поддержка 1-wire устройств и всё-всё-всё


#1

Евгений,

Стал я баловаться с подключением 1-wire устройств, и сделал неприятное открытие. Оказалось, что кроме термометров (пресловутых DS18B20) никакие другие устройства “из коробки” не поддерживаются. То есть в /sys/bus/w1/devices они появляются, но в MQTT/www не транслируются. У меня почему-то было ощущение, что какой-то минимальный набор самых распространённых чипов должны поддерживаться “с ходу”… Есть ли у вас в ближайших планах реализация поддержки других 1-wire устройств? Меня, конкретно, интересуют DS2406/08/23/28.

P.S. Случайно обнаружил, что “Компания Бесконтактные устройства прекратила активность на хабре”. Какой-то очень тревожный звоночек :frowning: Я был бы Вам благодарен, если бы Вы озвучили планы компании “Бесконтактные устройства”, связанные с WirenBoard. Планируется ли расширять круг устройств, поддерживаемых “из коробки”? Если да, то хотелось бы увидеть примерный список и ориентировочные сроки. Планируется ли (всё ещё) реализовать поддержку какой-нибудь offline системы домашней автоматизации? Собираетесь ли вы выкладывать примеры использования WB (хотя бы как тут, только с описанием шагов, как оживить ту или иную железку, имея в руках базовую поставку WB… для меня, например, именно отсутствие подобных use-cases, а также бедность и слабая связанность http://contactless.ru/wiki сильно тормозит процесс “внедрения” прибора в домашнее хозяйство :frowning:

P.P.S. Если не секрет, сколько вы раздали устройств “за пол-цены” и был ли с получателей хоть какой-то “полезный выхлоп”?


#2

Добрый день,

  1. По 1-wire. К Wiren Board Smart Home можно теоретически подключить очень большое количество устройств, их поддержка в ПО - это огромная по затратам (времени и, следовательно, денег) задача. Собственными силами мы поддерживаем устройства в случае, если они нам кажутся перспективными: устройство должно быть качественное, недорого стоить, быть в свободной продаже и т.п. Кроме этого, мы реализуем поддержку устройств на коммерческой основе, кроме этого, мы иногда реализуем что-то нужное крупным заказчикам.
    Чипы 1-wire сейчас под эти критерии не подходят: готовых приличных устройств, которые можно свободно купить, на их основе я не знаю.
    В ближайшем будущем возможна поддержка DS2438/DS2436, т.к. существуют датчики на этом чипе и существует крупный заказчик, которому эти датчики нужны.
    Для остальных чипов из линейки остаётся надеятся только на помощь со стороны community. К счастью, реализуется это всё довольно просто.

  2. Про Хабр: подписка на Хабре - вещь довольно дорогая. Месяц назад у нас фактически кончились устройства из последней партии, больше выпускать Wiren Board Smart Home 3.5 не планируется. Новая аппаратная ревизия сейчас в тестировании, попадёт в продажу через пару месяцев. Тогда и планируем возобновить активность.

  3. Про круг поддерживаемых устройств. Ближайшие планы - поддержка Smart Bus G4 и, возможно, HDL. Хотя это конечно довольно специфические девайсы. Про поддержку Modbus и, соответственно, кучи устройств на Modbus вы наверное уже знаете.

Если есть пожелания/предложения про поддержку периферии - пожалуйста поделитесь.

  1. Про offline-систему. Domoticz есть и как-то работает, как раз сегодня собираюсь выложить собранный deb-пакет для тестирования.

Мы сейчас работаем над расширением функциональности родной offline системы, под эту задачу даже взяли ещё человека.

  1. Про примеры и т.д. Планируем, но см. п. 1. Подготовка одной такой статьи - это несколько полных рабочих дней работы 1-2 человек, поэтому, к сожалению, писать такие статьи не имея устройств в магазине (см. п.1) - экономически нецелесообразно.

Если в каком-то месте возникает вопрос - пишите пожалуйста сюда. Решить конкретную проблему естественно гораздо проще, чем постараться всё заранее предугадать. Wiki по результатам таких вопросов и ответов мы стараемся обновлять.

  1. У меня нет сейчас под рукой цифр, но наверное порядка 10 или 20. Нет, “полезный выхлоп”, по моим личным ощущениям, оказался ниже, чем хотелось бы.

#3

Понятно. Спасибо за оперативный и подробный ответ!

Про поддержку периферии - можете набросать коротенькую заметку (в wiki) как нужно (правильно) сделать поддержку нового 1-wire устройства? Хотя бы схематично - “тут (git) добавляем чтение/запись, здесь (URL) можно посмотреть как и что, сюда нужно передать такие-то и такие-то значения/поля, обратить внимание/учесть то-то и то-то”. Понятно, что обладая большим запасом времени, все это можно “раскопать”, но просто не хочется тратить несколько дней на то, что человек, в этом разбирающийся, может рассказать за 15 минут…

И Domoticz, конечно, хотелось бы посмотреть…


#4

1-wire - устройства в Linux исторически поддерживуются двумя способами: через ядерные драйверы и через юзерспейсовую штуку под названием owfs. Ядерные драйвера идеологически правильнее, owfs ест больше ресурсов, имеет своеобразную архитектуру и поддерживает больше девайсов и возможностей.

owfs имеет возможность работать поверх ядерного мастера шины 1-wire. Пакет owfs есть в Debian, в ядро вкомпилена поддержка, так что вы можете его поставить и попробовать работать.

В ядерном драйвере 1-wire есть общая поддержка любых w1-устройств, а также специфичный код для разных типов устройств.
Общая (generic) поддержка предоставляет файл в директории /sys/bus/w1/(директория девайса)/rw, через который из юзерспейса можно совершать операции чтения/записи с соответствующим девайсом. Соответственно, появляется возможность написать в userspace поддержку почти любого чипа, но нужно читать даташиты на чипы.
Пример реализации работы с разными чипами через rw можно посмотреть например в домотиксе: https://github.com/contactless/domoticz/blob/master/hardware/1Wire/1WireByKernel.cpp

Специфичные для отдельных типов устройств (family) драйвера в ядре предоставляют более высокоуровневый интерфейс в виде всё тех же файлов в sysfs. Например, позволяют напрямую запрашивать температуру у 1-wire термометров через чтение файла w1_slave.
Список поддерживаемых высокоуровнево устройств и описание можно посмотреть тут http://lxr.free-electrons.com/source/drivers/w1/slaves/
и тут http://lxr.free-electrons.com/source/Documentation/w1/slaves/ . Список поддерживаемых девайсов естественно растёт с увеличением версии ядра. У нас сейчас 3.13, но если что, то нужные драйвера можно портировать и из более свежего ядра.

Текущий “драйвер” для MQTT/Homa для 1-wire-термометров работает через высокоуровневый ядерный интерфейс, его исходники тут: https://github.com/contactless/wb-homa-drivers/blob/master/wb-homa-w1/sysfs_w1.cpp

Соответственно, чтобы поддержать какой-то чип в MQTT/Homa надо сначала каким-то образом научиться обмениваться информацией с чипом.
В порядке убывания “правильности”:

  1. Либо через высоуровневый ядерный интерфейс, если такая поддержка есть в ядре. Если нужно, то можно попробовать портировать драйвер из более свежей версии.
  2. Либо через низкоуровневыйц ядерный интерфейс, через файл rw
  3. Либо через owfs, используя какой-нибудь из нескольких способов общения с owfs

После этого вам надо или (в том же порядке):

  1. Добавить соответствующий код в wb-homa-w1
  2. Написать простой скрипт на любимом языке программирования (хоть на bash), который взаимодействует с mqtt в соответствии с конвенциями.

#5

Евгений, можно еще уточнение?

В версии 3.13 драйвер для (например) DS2413 есть, а моя система при загрузке пишет

[    9.020000] Driver for 1-wire Dallas network protocol.
[    9.590000] w1_master_driver w1_bus_master2: Family 3a for 3a.000000073ea6.d1 is not registered.

Где-то еще нужно подкрутить?


#6

странно, в ядре это кажется включено. Попробуйте обновить ядро:


apt-get update
apt-get install linux-latest

если давно не обновляли систему, то перед этим стоит сделать


apt-get update
apt-get install wb-configs


#7

С драйверами 1-wire какая-то фигня :frowning:
В очередной раз все, что мог, обновил. Добавил в /etc/modules

w1_ds2423
w1_ds2408
w1_ds2413

Всё равно при загрузке пишет

[   13.600000] w1_master_driver w1_bus_master2: Family 3a for 3a.000000073ea6.d1 is not registered.
[   14.260000] w1_master_driver w1_bus_master2: Family 26 for 26.000001526e8d.06 is not registered.
[   14.980000] w1_master_driver w1_bus_master2: Family 1d for 1d.000000066dd6.41 is not registered.

При этом:

В /sys/devices/w1_bus_master2/1d-000000066dd6/ пропал файл rw и появился файл w1_slave, из которого прекрасно читается память и счетчики (ура!).

В /sys/devices/w1_bus_master2/3a-000000073ea6/ пропал файл rw и появились файлы state и output. Чтение state возвращает иногда пустоту, а иногда Input/output error, а запись в output иногда кончается Input/output error, но в большинстве случаев наглухо вешает сессию.

В /sys/devices/w1_bus_master2/26-000001526e8d/ ничего не поменялось (остался файл rw).

P.S. Добрался даже до любимого развлечения линуксоидов - сборки ядра :slight_smile: Подскажите, достаточно ли мне просто взять содержимое drivers/w1/slaves/ из ядра 3.17 и подложить к себе (в 3.13), чтобы в ядро вошли все драйверы из последней версии?


#8

И про Domoticz что-то ничего не слышно…


#9
P.S. Добрался даже до любимого развлечения линуксоидов – сборки ядра :) Подскажите, достаточно ли мне просто взять содержимое drivers/w1/slaves/ из ядра 3.17 и подложить к себе (в 3.13), чтобы в ядро вошли все драйверы из последней версии?
не факт, но можно попробовать

#10

Domoticz: http://contactless.ru/domoticz-beta/


#11

Привет.
Есть вопрос. в лог сыпется постоянно такая ошибка:
w1_slave_driver 28-00043b6f28ff: Read failed CRC check
на кабель паралельно подклсчюено два датчика. иногда начинает работать и один показывает одну и туже температуру, сам датчик дохлый?
подключены по 3 проводам.


#12

ничего не понимаю.
если подключен только один датчик температуры, то он работает.
если подключить еще один, то он в начале работает, а потом начинается ошибка Read failed CRC check
Проверили три датчика. что за глюк может быть?


#13

Звучит очень сильно загадочно.

Кабель длинный? Напряжение питания - 5В?
Датчики - DS18B20? Настоящие или китайские?

Попробуйте ещё пожалуйста повесить второй датчик на второй канал и так же посмотреть что будет.


#14
  • клемма 1 -> кабель, на котором работает один датчик, длинной около 5м, витая пара.
<li>клемма 2 -&gt; кабель, на котором не работает два датчика, длинной около 3-4 м. витая пара.</li>

витая пара по схеме: б/г+б/к = data, б/о+б/з = vcc, все полные цвета общая масса.
напряжение беру с самого wirenboard, на клеммах +5V out, но там на клеммах напряжение 4.8в.

пробовал подключить два датчика вместе, без витой пары, как есть. но ни так же глючно работали.

http://www.aliexpress.com/snapshot/6171172639.html?orderId=63224024349781


#15
пробовал подключить два датчика вместе, без витой пары, как есть. но ни так же глючно работали.

А id у этих двух датчиков, которые вместе не работают, вообще разные?
Китайцы могут запихать внурь всё что угодно к сожалению. Могут быть чипы с одинаковым ID, тогда два на шине работать не будет.

Мы пробовали подключать такие же с виду датчики, тоже от китайцев с алиэкспресса - они нормально работали.


#16

Кстати, эти китайские датчики, которые точно работают параллельно, можно купить у нас в магазине по 400р. На сайт их по-моему ещё не выложили, если нужно - напишите пожалуйста на почту.


#17

Возможности подключить к wirenboard нет, она далеко, однако взял с собой кабель и оба датчика, что бы проверить дома на arduino.
Собственно на ней все работает. видит оба датчика и показывает температуру.
Может быть не хватает напряжения или подтягивающего резистора?
беру напряжения с Vout WB, на клеммах напряжение 4.8в! это может влиять?


#18

Не знаю, у меня больше идей нет. Как я говорил, у нас с несколькими китайскими датчиками всё работает нормально.
Если вы подключаете по трёхпроводной схеме, то подтягивающий резистор влиять не должен.
Рабочее напряжение чипов - от 3.0V, если я правильно помню, так что 4.8В должно хватать с большим запасом.


#19

Так, на других датчиках которые работали тоже появляются такие ошибки, но при этом они работают.
Может добавить, что-нибудь в схему, ферритовое кольцо или шоттки?


#20

причина таких проблем непонятна, соответственно и как их решать не ясно.
Как я говорил, у нас всё работает отлично.

Можно осциллографом и лог. анализатором посмотреть для интереса. Но я всё же бы советовал попробовать другие датчики сначала.
Если есть желание, то можете нам отправить (или в офис завезти) пару этих датчиков - посмотрим, когда будет время.