Стал я баловаться с подключением 1-wire устройств, и сделал неприятное открытие. Оказалось, что кроме термометров (пресловутых DS18B20) никакие другие устройства “из коробки” не поддерживаются. То есть в /sys/bus/w1/devices они появляются, но в MQTT/www не транслируются. У меня почему-то было ощущение, что какой-то минимальный набор самых распространённых чипов должны поддерживаться “с ходу”… Есть ли у вас в ближайших планах реализация поддержки других 1-wire устройств? Меня, конкретно, интересуют DS2406/08/23/28.
P.S. Случайно обнаружил, что “Компания Бесконтактные устройства прекратила активность на хабре”. Какой-то очень тревожный звоночек Я был бы Вам благодарен, если бы Вы озвучили планы компании “Бесконтактные устройства”, связанные с WirenBoard. Планируется ли расширять круг устройств, поддерживаемых “из коробки”? Если да, то хотелось бы увидеть примерный список и ориентировочные сроки. Планируется ли (всё ещё) реализовать поддержку какой-нибудь offline системы домашней автоматизации? Собираетесь ли вы выкладывать примеры использования WB (хотя бы как тут, только с описанием шагов, как оживить ту или иную железку, имея в руках базовую поставку WB… для меня, например, именно отсутствие подобных use-cases, а также бедность и слабая связанность http://contactless.ru/wiki сильно тормозит процесс “внедрения” прибора в домашнее хозяйство
P.P.S. Если не секрет, сколько вы раздали устройств “за пол-цены” и был ли с получателей хоть какой-то “полезный выхлоп”?
По 1-wire. К Wiren Board Smart Home можно теоретически подключить очень большое количество устройств, их поддержка в ПО - это огромная по затратам (времени и, следовательно, денег) задача. Собственными силами мы поддерживаем устройства в случае, если они нам кажутся перспективными: устройство должно быть качественное, недорого стоить, быть в свободной продаже и т.п. Кроме этого, мы реализуем поддержку устройств на коммерческой основе, кроме этого, мы иногда реализуем что-то нужное крупным заказчикам.
Чипы 1-wire сейчас под эти критерии не подходят: готовых приличных устройств, которые можно свободно купить, на их основе я не знаю.
В ближайшем будущем возможна поддержка DS2438/DS2436, т.к. существуют датчики на этом чипе и существует крупный заказчик, которому эти датчики нужны.
Для остальных чипов из линейки остаётся надеятся только на помощь со стороны community. К счастью, реализуется это всё довольно просто.
Про Хабр: подписка на Хабре - вещь довольно дорогая. Месяц назад у нас фактически кончились устройства из последней партии, больше выпускать Wiren Board Smart Home 3.5 не планируется. Новая аппаратная ревизия сейчас в тестировании, попадёт в продажу через пару месяцев. Тогда и планируем возобновить активность.
Про круг поддерживаемых устройств. Ближайшие планы - поддержка Smart Bus G4 и, возможно, HDL. Хотя это конечно довольно специфические девайсы. Про поддержку Modbus и, соответственно, кучи устройств на Modbus вы наверное уже знаете.
Если есть пожелания/предложения про поддержку периферии - пожалуйста поделитесь.
Про offline-систему. Domoticz есть и как-то работает, как раз сегодня собираюсь выложить собранный deb-пакет для тестирования.
Мы сейчас работаем над расширением функциональности родной offline системы, под эту задачу даже взяли ещё человека.
Про примеры и т.д. Планируем, но см. п. 1. Подготовка одной такой статьи - это несколько полных рабочих дней работы 1-2 человек, поэтому, к сожалению, писать такие статьи не имея устройств в магазине (см. п.1) - экономически нецелесообразно.
Если в каком-то месте возникает вопрос - пишите пожалуйста сюда. Решить конкретную проблему естественно гораздо проще, чем постараться всё заранее предугадать. Wiki по результатам таких вопросов и ответов мы стараемся обновлять.
У меня нет сейчас под рукой цифр, но наверное порядка 10 или 20. Нет, “полезный выхлоп”, по моим личным ощущениям, оказался ниже, чем хотелось бы.
Понятно. Спасибо за оперативный и подробный ответ!
Про поддержку периферии - можете набросать коротенькую заметку (в wiki) как нужно (правильно) сделать поддержку нового 1-wire устройства? Хотя бы схематично - “тут (git) добавляем чтение/запись, здесь (URL) можно посмотреть как и что, сюда нужно передать такие-то и такие-то значения/поля, обратить внимание/учесть то-то и то-то”. Понятно, что обладая большим запасом времени, все это можно “раскопать”, но просто не хочется тратить несколько дней на то, что человек, в этом разбирающийся, может рассказать за 15 минут…
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 надо сначала каким-то образом научиться обмениваться информацией с чипом.
В порядке убывания “правильности”:
Либо через высоуровневый ядерный интерфейс, если такая поддержка есть в ядре. Если нужно, то можно попробовать портировать драйвер из более свежей версии.
Либо через низкоуровневыйц ядерный интерфейс, через файл rw
Либо через owfs, используя какой-нибудь из нескольких способов общения с owfs
После этого вам надо или (в том же порядке):
Добавить соответствующий код в wb-homa-w1
Написать простой скрипт на любимом языке программирования (хоть на bash), который взаимодействует с mqtt в соответствии с конвенциями.
В версии 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.
С драйверами 1-wire какая-то фигня
В очередной раз все, что мог, обновил. Добавил в /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. Добрался даже до любимого развлечения линуксоидов - сборки ядра Подскажите, достаточно ли мне просто взять содержимое drivers/w1/slaves/ из ядра 3.17 и подложить к себе (в 3.13), чтобы в ядро вошли все драйверы из последней версии?
P.S. Добрался даже до любимого развлечения линуксоидов – сборки ядра :) Подскажите, достаточно ли мне просто взять содержимое drivers/w1/slaves/ из ядра 3.17 и подложить к себе (в 3.13), чтобы в ядро вошли все драйверы из последней версии?
Привет.
Есть вопрос. в лог сыпется постоянно такая ошибка:
w1_slave_driver 28-00043b6f28ff: Read failed CRC check
на кабель паралельно подклсчюено два датчика. иногда начинает работать и один показывает одну и туже температуру, сам датчик дохлый?
подключены по 3 проводам.
ничего не понимаю.
если подключен только один датчик температуры, то он работает.
если подключить еще один, то он в начале работает, а потом начинается ошибка Read failed CRC check
Проверили три датчика. что за глюк может быть?
клемма 1 -> кабель, на котором работает один датчик, длинной около 5м, витая пара.
<li>клемма 2 -> кабель, на котором не работает два датчика, длинной около 3-4 м. витая пара.</li>
витая пара по схеме: б/г+б/к = data, б/о+б/з = vcc, все полные цвета общая масса.
напряжение беру с самого wirenboard, на клеммах +5V out, но там на клеммах напряжение 4.8в.
пробовал подключить два датчика вместе, без витой пары, как есть. но ни так же глючно работали.
пробовал подключить два датчика вместе, без витой пары, как есть. но ни так же глючно работали.
А id у этих двух датчиков, которые вместе не работают, вообще разные?
Китайцы могут запихать внурь всё что угодно к сожалению. Могут быть чипы с одинаковым ID, тогда два на шине работать не будет.
Мы пробовали подключать такие же с виду датчики, тоже от китайцев с алиэкспресса - они нормально работали.
Кстати, эти китайские датчики, которые точно работают параллельно, можно купить у нас в магазине по 400р. На сайт их по-моему ещё не выложили, если нужно - напишите пожалуйста на почту.
Возможности подключить к wirenboard нет, она далеко, однако взял с собой кабель и оба датчика, что бы проверить дома на arduino.
Собственно на ней все работает. видит оба датчика и показывает температуру.
Может быть не хватает напряжения или подтягивающего резистора?
беру напряжения с Vout WB, на клеммах напряжение 4.8в! это может влиять?
Не знаю, у меня больше идей нет. Как я говорил, у нас с несколькими китайскими датчиками всё работает нормально.
Если вы подключаете по трёхпроводной схеме, то подтягивающий резистор влиять не должен.
Рабочее напряжение чипов - от 3.0V, если я правильно помню, так что 4.8В должно хватать с большим запасом.
Так, на других датчиках которые работали тоже появляются такие ошибки, но при этом они работают.
Может добавить, что-нибудь в схему, ферритовое кольцо или шоттки?
причина таких проблем непонятна, соответственно и как их решать не ясно.
Как я говорил, у нас всё работает отлично.
Можно осциллографом и лог. анализатором посмотреть для интереса. Но я всё же бы советовал попробовать другие датчики сначала.
Если есть желание, то можете нам отправить (или в офис завезти) пару этих датчиков - посмотрим, когда будет время.