Добрый день.
Кажется я понял, почему отваливается датчик и идет куча ошибок.
Самый пик начинается, когда внутри теплоаккумулятора (ТА) включаю ТЭН 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 - дубли никуда не ушли
P.S. В силу обстоятельств, WB пока заниматься некогда. Может, получится после праздников доделать транслятор из owfs в MQTT, и выложить описание всего-того, что у меня, на текущий момент, получилось…
P.P.S. maxwolf - это я
Здравствуйте!
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 секунд.
Можно уменьшить разрешение на датчиках (т.е. увеличить скорость, уменьшив точность), но текущее ядро это не умеет - нужно обновлять.