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

Добрый день.
Кажется я понял, почему отваливается датчик и идет куча ошибок.
Самый пик начинается, когда внутри теплоаккумулятора (ТА) включаю ТЭН 2.5кВт, датчик временно расположен внутри медной трубки и соответственно его металлический корпус соприкасается. Трубы отопления с чугунным котлом естественно не заземлены, т.к. до некоторого момента использовалось твердое топливо. Сейчас появился ТА с ТЭНом+анод. Скорее всего это чудо и дает помех и постоянную ошибку CRC error. Если на туже линию подключить новые датчики с них так же идет куча ошибок или они вовсе не видны в системе.
Попробую в предстоящие выходные добавить прямое заземление бака и посмотреть, как будет работать.
наверное, лучший вариант посмотреть форму сигнала нечем, но нечем.

Думаю то, что корпус соприкасается - это не важно, т.к. металлическая гильза в датчиках никуда не подключена. Другое дело, что у вас там 10А переменного тока, от него на неэкранированный кабель 1-wire могут быть наводки.

от него на неэкранированный кабель 1-wire могут быть наводки
хм. об этом я не подумал, как-то. у меня получается от датчика с металлической гильзой идет "их" провод, а дальше витая пара. А есть идеи, как это дело можно победить?

Использовать экранированный кабель, не прокладывать сигнальные провода рядом с силовыми.

hamster А вы не подскажете конектится к owfs к 1wire надо через i2c,или как то иначе? Можете выложить owfs.conf ?

owfs (по крайней мере у меня) работает через ядерный драйвер. Конфиг, без комментариев, такой:


! server: server = localhost:4304
server: w1
mountpoint = /mnt/1wire
allow_other
http: port = 2121
server: port = localhost:4304

Выяснилась, однако, одна неприятная особенность: дублируются устройства. Т.е. через http и через FS некоторые устройства видны по два раза. Как-то так:

root@wirenboard:~# ls -l /mnt/1wire/uncached/
total 0
drwxrwxrwx 1 root root  8 Мар 25 12:36 1D.D66D06000000
drwxrwxrwx 1 root root  8 Мар 25 12:36 1D.D66D06000000
drwxrwxrwx 1 root root  8 Мар 25 12:36 26.8D6E52010000
drwxrwxrwx 1 root root  8 Мар 25 12:36 26.8D6E52010000
...


На первый взгляд, никаких других проблем это не вызывает, хотя выглядит странно. Я уже пробовал и выгружать ядерные драйверы клиентских устройств (через modprobe -r и через /etc/modprobe.d/w1slave.conf), и собрал owfs версии 3.0p2 - дубли никуда не ушли :frowning:

P.S. В силу обстоятельств, WB пока заниматься некогда. Может, получится после праздников доделать транслятор из owfs в MQTT, и выложить описание всего-того, что у меня, на текущий момент, получилось…
P.P.S. maxwolf - это я :slight_smile:

Здравствуйте!

WB SH 3.5
При загрузке устройства и примерно каждую минуту выводятся такие ошибки:

root@wirenboard:/sys/bus/w1/devices# dmesg | grep w1
[   17.570000] w1_master_driver w1_bus_master1: w1_search: max_slave_count 64 reached, will continue next search.
[   18.120000] w1_master_driver w1_bus_master2: w1_search: max_slave_count 64 reached, will continue next search.
[   73.240000] w1_master_driver w1_bus_master1: Family 0 for 00.800000000000.8c is not registered.
[   74.320000] w1_master_driver w1_bus_master2: Family 0 for 00.800000000000.8c is not registered.
[   74.350000] sysfs: cannot create duplicate filename '/bus/w1/devices/00-800000000000'
[   74.360000] Modules linked in: rtl8192cu rtl_usb rtl8192c_common rtlwifi smsc95xx w1_gpio wire cn
[   74.370000] CPU: 0 PID: 253 Comm: w1_bus_master2 Not tainted 3.19.0-imxv5-x0.1 #343
[   74.440000] [<c02758f8>] (device_add) from [<bf00a920>] (w1_attach_slave_device+0x1a0/0x38c [wire])
[   74.450000] [<bf00a920>] (w1_attach_slave_device [wire]) from [<bf00abbc>] (w1_slave_found+0xb0/0xb4 [wire])
[   74.460000] [<bf00abbc>] (w1_slave_found [wire]) from [<bf00b39c>] (w1_search+0x1e4/0x234 [wire])
[   74.470000] [<bf00b39c>] (w1_search [wire]) from [<bf00b464>] (w1_search_process_cb+0x78/0x124 [wire])
[   74.480000] [<bf00b464>] (w1_search_process_cb [wire]) from [<bf00b69c>] (w1_process+0x114/0x1a0 [wire])
[   74.490000] [<bf00b69c>] (w1_process [wire]) from [<c00365d8>] (kthread+0xc0/0xdc)
[   74.550000] w1_slave_driver 00-800000000000: Device registration [00-800000000000] failed. err=-17
[   74.560000] w1_master_driver w1_bus_master2: w1_attach_slave_device: Attaching 00-800000000000 failed.
[  140.450000] w1_master_driver w1_bus_master1: Family 0 for 00.400000000000.46 is not registered.
[  141.580000] w1_master_driver w1_bus_master2: Family 0 for 00.400000000000.46 is not registered.
[  141.600000] sysfs: cannot create duplicate filename '/bus/w1/devices/00-400000000000'
[  141.610000] Modules linked in: rtl8192cu rtl_usb rtl8192c_common rtlwifi smsc95xx w1_gpio wire cn
[  141.620000] CPU: 0 PID: 253 Comm: w1_bus_master2 Tainted: G        W      3.19.0-imxv5-x0.1 #343
[  141.690000] [<c02758f8>] (device_add) from [<bf00a920>] (w1_attach_slave_device+0x1a0/0x38c [wire])
[  141.700000] [<bf00a920>] (w1_attach_slave_device [wire]) from [<bf00abbc>] (w1_slave_found+0xb0/0xb4 [wire])
[  141.710000] [<bf00abbc>] (w1_slave_found [wire]) from [<bf00b39c>] (w1_search+0x1e4/0x234 [wire])
[  141.720000] [<bf00b39c>] (w1_search [wire]) from [<bf00b464>] (w1_search_process_cb+0x78/0x124 [wire])
[  141.730000] [<bf00b464>] (w1_search_process_cb [wire]) from [<bf00b69c>] (w1_process+0x114/0x1a0 [wire])
[  141.740000] [<bf00b69c>] (w1_process [wire]) from [<c00365d8>] (kthread+0xc0/0xdc)
[  141.770000] w1_slave_driver 00-400000000000: Device registration [00-400000000000] failed. err=-17
[  141.780000] w1_master_driver w1_bus_master2: w1_attach_slave_device: Attaching 00-400000000000 failed.

....

И постоянно появляются различные “фантомные” устройства вида 00-xx0000000000, даже если на шине ничего нет.

root@wirenboard:/sys/bus/w1/devices# ls
00-680000000000  00-a80000000000  w1_bus_master1  w1_bus_master2

Вопрос 1: это нормально?
Вопрос 2: что нужно сделать, чтобы считать id с домофонного ключа (DS1990A)?
Подключаю просто к 1-wire (паразитное питание), 3.3 v есть, но в /sys/bus/w1/devices только 00-xx0000000000.

Залил старый образ на флешку (20140614, а был 20150528), “фантомные” устройства пропали, а домофонные ключи появились (ура!).

Теперь вопрос: как поменять в модуле wire параметры timeout и slave_ttl, чтобы поиск устройств на шине происходил чаще? Все-таки 10 секунд держать ключ слишком долго).

думаю через /etc/modprobe.d/ или /etc/modules

Датчик температуры и влажности am2321 работает и с 1-wire тоже судя по даташиту, может добавите поддержку?
http://www.aosong.com/en/products/details.asp?id=137

Нет, он не 1-wire, там свой проприетарный протокол (такой же как в DHT11/DHT21). Эти датчики работают ещё и по i2c, я даже какой-то код на C находил и на wirenboard запускал. Задача подключать их напрямую к WB достаточно маргинальная, поэтому делать для них MQTT-драйвер в планах нет. Как обычно, только если найдутся энтузиасты, крупный заказ, либо желающие оплатить поддержжку.

Евгений, гугленье и попытки применения рецептов оттуда ни к чему не привели, не могли бы how to накидать,
заранее спасибо

Попробуйте сначала вручную:

service wb-homa-w1 stop
modprobe -r w1-gpio
modprobe -r wire

modprobe wire timeout=1 slave_ttl=5
modprobe w1-gpio

ну а дальше создаёте файл, например /etc/modprobe.d/w1_options.conf

туда пишете

options wire  timeout=1 slave_ttl=5

похоже что это всё работает, надо ещё сделать:
modprobe -r w1_therm

на самом деле пытаюсь решить вопрос как можно увеличить refresh rate опроса датчиков, сейчас получается ~1 раз в 25 секунд, можно как-то увеличить частоту опроса?

заранее спасибо

каких датчиков?

датчики ds18b20, ~ 30 шт

А у вас на шине 1w ещё что-то поддерживается разве?

“Поддерживается” - это понятие довольно условное. В нашем ПО поддерживаются только термометры, в том смысле, что есть спец. программа, которая считывает с них показания через ядерный интерфейс и публикует в MQTT.

Параметры ядерного модуля, про которые тут писали, и про которые вы сейчас спрашивали, не имеют никакого отношения к частоте опроса датчиков. За частоту опроса (в смысле отправки сообщений в MQTT и обновления циферок в веб-интерфейсе) отвечает как раз наш демон wb-homa-w1.

Можно запустить его с параметром “-i 1”, чтобы опрос был раз в секунду, а не раз в десять секунд. Отдельно это не настраивается, так что нужно открыть файл /etc/init.d/wb-homa-w1 и поменять строчку

DAEMON_ARGS=""

на

DAEMON_ARGS=" -i 1"

после этого перезагрузить сервис:

service wb-homa-w1 restart

сделал

DAEMON_ARGS=" -i 1"

и перезагрузил сервис, субъективно стало лучше: вместо раз в ~25 секунда стала раз в ~17 секунд публиковаться температура. Субъективно, так как смотрю на временные интервалы между появлением новых данных:

mosquitto_sub -v -t /devices/wb-w1/controls/28-00000625ee6d

можно ещё как-то “ускорить” публикацию данных?
Спасибо! =)

Насколько я помню, через ядерную подсистему нельзя сделать одновременный опрос датчиков. Конверсия у датчика занимает 600мс, вот у вас и получается, что 30 датчиков опрашиваются 17 секунд.

Можно уменьшить разрешение на датчиках (т.е. увеличить скорость, уменьшив точность), но текущее ядро это не умеет - нужно обновлять.