Доброго дня. Подскажите пожалуйста как перезагрузить сервис 1wire, зависают датчики все разом примерно раз в месяц, отключение шины питания 5вольт не помогает. После перезагрузки контроллера решается проблема на месяц. Интересует код перезагрузки сервиса, отслеживание ошибки уже есть. Нужен только код перезагрузки.
systemctl restart wb-mqtt-w1
благодарю! надеюсь это поможет. проверю недели через 3 как будет следующее зависание.
добрый день. прошло 24 дня и 14 часов. датчики опять зависли. куда копать?
вот ошибки из журнала.
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-0000108130ec/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00001081275e/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-0000108122e0/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-000010810b88/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00001080d173/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00000fdf74e7/temperature)
20-01-2026 17:51:23.930 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00000facd736/temperature)
20-01-2026 17:51:23.928 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00000fab6133/temperature)
20-01-2026 17:51:23.928 [wb-mqtt-w1.service]
ERROR: [w1 driver] Can't read temperature (/sys/bus/w1/devices/w1_bus_master1/28-00000d92a575/temperature)
Добрый день!
1-Wire сложнее в отладке и менее надежен, чем Modbus-RTU из-за особенностей протокола и физической реализации шины.
Чтобы яснее представлять артину происходящего, хотел задать много вопросов.
Скажите, датчики, которые подключены – вы приобретали их у нас? Как проложена шина? Каким кабелем/проводом? Какой длины? К каким жилам подсоединены датчики? Какая топология – чисто шина? Или есть фрагменты “звезды”?
Какой версии ПО контроллера? (Можете сделать архив с диагностической информацией и прислать его. Создание архива описано в документации.
Если датчики у вас остались в неработчем состоянии, можете измерить напряжение на клемме Wx относительно GND?
Очень часто один какой-то датчик становится причиной неисправности. Можно отключать их по одному, но с учетом того, как долго все работает нормально, такой эксперимент растянется надолго.
датчики приобретал у вас, один датчик пришлось заменить так как были запредельные показания и часто подвисал поставил maxim покупал в чип и дип, топология звезда витой парой не более 10 метров на линию.
6 лучей, 10 датчиков. обьект уже сдан доступа на данный момент нет. по wb-2507.
после перезагрузки контроллера все восстанавливается. сегодня ночью будет перезагрузка контроллера, чтоб не нарушать комфорт заказчиков
недавно обновил по до последней версии, где то в ноябре
Да, вижу в service/wb-mqtt-w1.service.log
большое количество записей
ERROR: [w1 driver] Can't read temperature... для всех датчиков,
а в ядре (dmesg.log) – ошибки вида
w1_master_driver w1_bus_master1: therm_bulk_read_store: unable to trigger a bulk read on the bus. err=-19
Waiting for family 40 to become free: refcnt=10
В логах за предыдущий запуск (dmesg.previous-boot.log) Видно, что модуль находит несуществующие устройства на шине:
kernel: w1_master_driver w1_bus_master1: Attaching one wire slave 50.0000210245c0 crc a0
Все указывает на нестабильность физического уровня, и топология типа “звезда” – скорее всего, источник проблем.
Но если доступ на объект невозможен и физически исправить ничего нельзя, то остается только реагировать: если датчики начинают сбоить – инициировать перезагрузку.
Если просто restart wb-mqtt-w1 не помогает, то, попробуйте, чтобы избежать перезагрузки контрроллера, перезагрузить еще и модули ядра тако последовательностью команд:
systemctl stop wb-mqtt-w1
modprobe -r w1_therm w1_gpio wire
modprobe wire
modprobe w1_gpio
modprobe w1_therm
systemctl start wb-mqtt-w1
Благодарю, буду пробовать. Причина похоже в самих датчиках, так как после запуска системы все работало без сбоев, есть еще пару датчиков у которых иногда скачут показания, возможно в них проблема. У меня дома топология звезда, и больше лучей и датчиков, причем датчики китайские, и таких проблем нет.
Хорошо! Если получится вариант с перегарузкой модулей, то можно подумать, как автоматизировать.
Может, да, какой-то конкретный датчик (или датчики) сбоит.
Какждая инсталляция ведет себя по разному: подключение лучей звезды по-разному отражает сигнал, и емкость кабелей разная. А поскольку 1-wire оказывается чувствительным к таким вещам, когда что-то не работает без понятных причин.
Если раньше все было хорошо, а потом стало сбоить, то да – возможно предположть отказ какого-либо датчика.
Напишите, получилось ли решить проблему перезагружая только модули ядра!
благодарю! буду пробовать при следующем сбое
Здравствуйте! Эта тема закроется через 14 дней. Если потом будут обновления – пишите, пожалуйста, в новую тему со ссылкой на эту
добрый день. к сожалению ничего не помогло. а есть ли способ отключить 1wire программно? так как при отключении питания датчика, на пине 1wire остается питание и датчики не сбрасываются, пытаясь питаться по паразитной схеме.
Пока Vcc не соединено с GND, паразитного питания быть не должно. Если вы оставитье +5V то, навреное, возможна обратная потпитка через вход данных, но до конца не уверен. Уточню у коллег, как быть…
Скажите, а вы пробовали перезагружать модули ядра и при этом физически отключать шину от контроллера, а потом подключать? Вернее, в такой последовательности:
выгрузить модули, отключить шину, подключить шину, загрузить модули? Так помогает?
нет, так не помогло. на следующей неделе поеду на обьект подключу датчики к контроллеру подругому, чтоб можно было их полностью отключать от шины. сделаю отслеживание по напряжению
Я вот как раз хотел предложить через релейный модуль шину попробовать подключить. Понятно, что это не решение проблемы, но понятная диагностика
Попробуйте такое правило поставить.
Суть: перезагружать сервис 1wire если любой датчик не обновляется более часа:
var updates = new PersistentStorage('wb-w1', {global: false});
runShellCommand('timeout 2 mosquitto_sub -v -t /devices/wb-w1/controls/+/meta/type', {
captureOutput: true,
exitCallback: function(code, result) {
if (code != 0 && code != 124) return;
else var parts, devices = [];
// Перебираем список контроллов чтобы оставить только датчики температуры
result.split(/\r?\n/).forEach(function(topic) {
if (parts = topic.match('/devices/(.+)/controls/([0-9]{1,2}-[A-Za-z0-9]{1,12})/meta/type (.+)')) {
devices.push('{}/{}'.format(parts[1], parts[2]));
updates['{}/{}'.format(parts[1], parts[2])] = Math.floor(new Date().getTime() / 1000);
}
});
// Создаем правило, отслеживающее изменения значения от датчиков
defineRule('last-update', {
whenChanged: devices,
then: function(value, name, control) {
updates['{}/{}'.format(name, control)] = Math.floor(new Date().getTime() / 1000);
}
});
// Создаем правило, которое проверяет раз в час время последнего обновления с датчика
defineRule('check-update', {
when: cron('@hourly'),
then: function() {
var last, now = Math.floor(new Date().getTime() / 1000);
devices.forEach(function(name) {
if (updates[name] == undefined) return;
if (isNaN(last = parseInt(updates[name], 10))) return;
if (now - last >= 60 * 60) runShellCommand('systemctl restart wb-mqtt-w1');
});
}
});
}
});
перезагрузка сервиса не помогает. подозрение что какой то датчик зависает и виснет вся шина.и пока полностью не отрубишь питание о подтяжку питания на шину все висит.
есть способ без реле, сегодня проверил на двух контроллерах, все работает. минус шины подключил на дискретный выход, о при включении замыкает на GND. таким способом отключив 5 вольт и GND обесточиваем полностью всю шину.