Ошибка «switch can not be unprovisioned when it is physically present» появляется в приложениях управления Bluetooth Mesh-сетями (например, nRF Mesh от Nordic Semiconductor) в момент, когда вы пытаетесь удалить узел — выключатель, реле или диммер — из сети, а устройство при этом находится в радиусе действия и отвечает на запросы. Система блокирует удаление, потому что «живой» узел нельзя просто стереть из списка: сначала он должен быть корректно выведен из сети штатной процедурой unprovision.

Логика защиты проста: если физически доступное устройство удалить из базы проприетарно, оно останется прошитым сетевыми ключами, но перестанет управляться — получится «зомби-узел», который занимает адрес и мешает повторному добавлению. Поэтому приложение требует сначала выполнить полноценный unprovision, а не простое удаление записи.

Что означает эта ошибка технически

В спецификации Bluetooth Mesh вывод устройства из сети выполняется через процедуру unprovisioning: провижионер отправляет узлу команду сброса (Node Reset), узел стирает у себя сетевые ключи, адрес и привязки моделей, после чего возвращается в состояние «не provisioned» и снова готов к добавлению. Пока узел физически доступен и отвечает, приложение ожидает именно этот сценарий.

Сообщение «can not be unprovisioned when it is physically present» — это, по сути, не сбой, а защитное ограничение интерфейса: приложение видит узел в эфире (через advertising-пакеты или ответы на запросы) и не позволяет удалить его «молча». Конфликт возникает, когда штатная команда сброса по какой-то причине не доходит или не выполняется.

💡

Ошибка означает: узел доступен в сети, поэтому удалить его можно только через штатную процедуру Node Reset, а не простым удалением из списка.