Я не пробовал подключать 1-wire именно к WB, но у меня есть опыт нескольких проектов с ds18b20 с разными другими контроллерами (начиная с arduino и т.п.).
То, что плохой датчик может мешать другим – согласен, лучше сначала проверять их по одному. То, что 1-wire не может работать на “средних дистанциях” – совсем не согласен, у меня работает 5 датчиков в квартире (до 10 метров от контроллера), у товарища загородный дом вообще весь опутан 1-wire и все работает (там, наверное, на сотни метров счет идет). В литературе пишут, что 500 метров достижимо при аккуратном использовании. Вот фантомное питание – лучше вообще не использовать, это только для ключей от домофона хорошо.
Важно следовать рекомендациям, ставить pullup резисторы и т.п. Также важна топология сети: считается, что “шина” (когда на длинном проводе висят девайсы короткими ответвлениями) работает лучше, чем “звезда” (хотя у меня именно звезда). Есть много тонкостей, довольно хорошая статья вот: https://www.maximintegrated.com/en/app-notes/index.mvp/id/148
Ну и самое важное: как именно вы общаетесь с девайсами и чего от них требуете. Я не знаю, как устроена работа с 1-wire в WB, но я пробовал несколько готовых библиотек, и все они выполняют кучу “лишних” команд. Например, чтобы банально считать температуру с заданного датчика, библиотека: сканит шину (детектит все устройства), потом общается с каждым устройством и выясняет его разновидность, потом посылает какие-то дополнительные команды… При этом если хоть одна команда завершилась ошибочно – то все пропало. И дальше простая математика: если вероятность ошибки на отдельной команде, допустим, 10% – то когда команд выполняется штук 15, то вероятность ошибки в одной из них уже 80%. Разумеется, оно в таком режиме еле шевелится.
У меня были очень похожие симптомы (сперва работает, потом все умирает) – и я взял и выкинул все библиотеки, зашил в коде адреса датчиков и написал код, который делает только одно: посылает команду “измерь температуру” и через секунду посылает команду “дай ответ” и считывает ответ. Все, у меня теперь процент ошибочных считываний минимален – иногда сутками работает без ошибок (а измеряет каждые 30 секунд).
И да, конечно в софте надо предусмотреть, что температура может не считаться – это нормальная ситуация. Софт не должен сойти с ума, он должен просто подождать немного и попробовать еще раз, или еще как-либо корректно отработать. Например, в управлении теплым полом я заложил логику, что если температуру не удается считать в течение 5 минут – то на всякий случай нагрев отключается.