Ошибка «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, а не простым удалением из списка.

Типичные причины блокировки unprovision

Прежде чем предпринимать действия, полезно понять, какой сценарий реализовался. Возможные причины:

  • 📡 Нестабильная связь — команда Node Reset отправляется, но узел её не получает из-за расстояния, помех или разряженной батареи устройства.
  • 🔑 Устаревшие ключи в приложении — после смены NetKey или AppKey приложение не может корректно обратиться к узлу.
  • 🧱 Проблемы прошивки узла — устройство отвечает в эфире, но его Mesh-стек завис и не обрабатывает управляющие команды.
  • 👥 Узел добавлен другим провижионером — текущий смартфон не является «владельцем» устройства и не имеет нужных ключей.
  • 🔁 Повторное добавление без сброса — устройство уже было provisioned ранее, и в базе возник конфликт записей.

Каждая из этих ситуаций требует своего порядка действий, поэтому диагностику стоит вести от простого к сложному.

Пошаговая диагностика и решение

Начните с самого безопасного сценария — повторного штатного удаления в непосредственной близости от устройства. Поднесите смартфон к узлу на расстояние 1–2 метра, убедитесь, что устройство запитано, и повторите операцию unprovision из приложения. Часто этого достаточно: команда сброса проходит со второй попытки, когда уровень сигнала выше.

☑️ Порядок действий при ошибке unprovision

Выполнено: 0 / 6

Если повторные попытки не помогают, перезапустите Bluetooth на смартфоне и само приложение. В некоторых случаях помогает обновление базы узлов — принудительное сканирование сети, чтобы приложение увидело актуальное состояние устройств. Точные названия пунктов меню зависят от версии приложения, поэтому сверяйтесь с его документацией.

💡

Перед удалением узла полезно сначала отправить на него любую тестовую команду (включить/выключить). Если команда не срабатывает — проблема в связи или ключах, а не в процедуре удаления.

Если штатный unprovision не проходит

Когда программный сброс недоступен, остаётся аппаратный сброс самого устройства. У большинства Mesh-выключателей и реле предусмотрена процедура возврата в заводское состояние — обычно длительное удержание сервисной кнопки или определённая последовательность включений питания. Конкретная комбинация строго зависит от модели и производителя, поэтому её нужно брать из официальной инструкции к устройству — универсальной комбинации не существует.

⚠️ Внимание: аппаратный сброс стирает все настройки узла, включая привязки к группам и сценам. После сброса устройство придётся добавлять в сеть и настраивать заново.

После заводского сброса устройство перестаёт отвечать в сети — и только тогда приложение позволит удалить его запись из базы как «физически отсутствующий» узел. Это и есть обход исходной блокировки: вы переводите устройство в состояние, при котором ограничение перестаёт действовать.

Сравнение сценариев удаления узла

СценарийСостояние устройстваДействиеРезультат
Штатный unprovisionДоступен, отвечаетNode Reset из приложенияУзел сброшен и удалён корректно
Ошибка «physically present»Доступен, но команду не выполняетПовтор рядом с устройствомЧасто решается со 2–3 попытки
Потеря связи с узломНе отвечаетАппаратный сброс устройстваЗапись удаляется после сброса
Чужой провижионерДоступен, ключей нетЗаводской сброс устройстваУдаление и повторное добавление

Как избежать проблемы в будущем

Главная профилактика — дисциплина при работе с сетью. Всегда удаляйте узлы через штатный unprovision, пока устройство физически доступно и запитано, а не после его демонтажа. Если выключатель нужно снять со стены, сначала выведите его из сети программно.

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

Что делать, если устройство уже демонтировано

Если узел физически недоступен, но запись о нём осталась, приложения обычно позволяют удалить его принудительно — именно ситуация «physically present» блокирует удаление, а отсутствующий узел стирается свободно. Проблема возникает только с устройствами, которые ещё «живы» в эфире.

⚠️ Внимание: не удаляйте узел из базы до аппаратного сброса, если планируете использовать устройство снова. Удалённая запись не сбрасывает прошитые в устройстве ключи — оно останется «привязанным» к несуществующей сети.

FAQ: частые вопросы

Почему приложение не даёт просто удалить устройство из списка?

Это защита от рассинхронизации: если стереть запись, не сбросив сам узел, устройство сохранит сетевые ключи и адрес, но перестанет управляться. Повторное добавление такого узла потребует аппаратного сброса.

Поможет ли переустановка приложения?

Нет, и это ухудшит ситуацию: при переустановке без экспорта конфигурации вы потеряете сетевые ключи, и штатный unprovision станет невозможен в принципе. Сначала экспортируйте сеть, если функция доступна.

Устройство рядом, но сброс из приложения не проходит. Что проверить?

Проверьте питание узла, уровень сигнала (поднесите смартфон вплотную), перезапустите Bluetooth и повторите попытку несколько раз. Если узел отвечает на команды включения, но не на сброс — вероятна проблема прошивки, и потребуется аппаратный сброс по инструкции производителя.

Можно ли удалить узел, добавленный с другого смартфона?

Только если вы импортировали конфигурацию сети с ключами на текущее устройство. Без ключей штатный unprovision невозможен — остаётся заводской сброс самого устройства.

Что происходит с адресом узла после unprovision?

После корректного Node Reset unicast-адрес освобождается и может быть назначен другому устройству при следующем добавлении в сеть.