Проблема с 1wire

Доброго дня. Подскажите пожалуйста как перезагрузить сервис 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 метров на линию.

приложен диагностический архив, доступен только сотрудникам поддержки
(551,5 КБ)

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 обесточиваем полностью всю шину.