Nodes and media

Команда определения местоположения

Кратко

  • location.get — команда Node, вызываемая через node.invoke или openclaw nodes location get.
  • По умолчанию отключено.
  • В сторонних сборках для Android используется селектор: Off / While Using / Always. В сборках Play доступны только Off / While Using.
  • Precise Location — отдельный переключатель.

Почему селектор, а не просто переключатель

Разрешения ОС на доступ к местоположению имеют несколько уровней. Точное местоположение также предоставляется отдельным разрешением ОС (в iOS 14+ — «Precise», в Android — «fine» и «coarse»). Селектор в приложении определяет запрашиваемый режим, но фактически предоставляемый уровень по-прежнему определяет ОС.

Модель настроек

Для каждого устройства Node:

  • location.enabledMode: off | whileUsing | always
  • location.preciseEnabled: bool

Поведение интерфейса:

  • При выборе whileUsing запрашивается разрешение на доступ при использовании приложения.
  • При выборе always в сторонней сборке для Android сначала запрашивается разрешение на доступ при использовании приложения, затем объясняется необходимость фонового доступа и открываются настройки приложения Android для отдельного разрешения Allow all the time.
  • Сборки Android Play не объявляют разрешение на фоновый доступ к местоположению и не показывают always.
  • Если ОС отклоняет запрошенный уровень, приложение возвращается к наивысшему предоставленному уровню и показывает его статус.

Сопоставление разрешений (node.permissions)

Необязательно. Node для macOS сообщает location через карту permissions в node.list/node.describe; в iOS/Android это значение может отсутствовать.

Команда: location.get

Вызывается через node.invoke или вспомогательную команду CLI:

bash
openclaw nodes location get --node <idOrNameOrIp>openclaw nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000

Параметры:

json
{  "timeoutMs": 10000,  "maxAgeMs": 15000,  "desiredAccuracy": "coarse|balanced|precise"}

Флаги CLI сопоставляются напрямую: --location-timeout -> timeoutMs, --max-age -> maxAgeMs, --accuracy -> desiredAccuracy.

Полезная нагрузка ответа:

json
{  "lat": 48.20849,  "lon": 16.37208,  "accuracyMeters": 12.5,  "altitudeMeters": 182.0,  "speedMps": 0.0,  "headingDeg": 270.0,  "timestamp": "2026-01-03T12:34:56.000Z",  "isPrecise": true,  "source": "gps|wifi|cell|unknown"}

Ошибки (стабильные коды):

  • LOCATION_DISABLED: селектор выключен.
  • LOCATION_PERMISSION_REQUIRED: отсутствует разрешение для запрошенного режима.
  • LOCATION_BACKGROUND_UNAVAILABLE: приложение работает в фоновом режиме, но предоставлен доступ только While Using.
  • LOCATION_TIMEOUT: данные о местоположении не получены вовремя.
  • LOCATION_UNAVAILABLE: системный сбой или отсутствие поставщиков данных.

Поведение в фоновом режиме

  • Сторонние сборки для Android принимают фоновый запрос location.get, только если пользователь выбрал Always и Android предоставил фоновый доступ к местоположению. Существующая постоянная служба Node добавляет тип службы location и уведомляет об Location: Always, пока он активен.
  • Сборки Android Play и режим While Using отклоняют location.get при работе в фоновом режиме.
  • На других платформах Node поведение может отличаться.

Хост Node для Linux

Встроенный плагин Linux Node добавляет location.get в службу CLI openclaw node, включая безэкранные хосты без приложения Linux для настольных систем. По умолчанию доступ к местоположению отключён. Включите его в записи плагина, затем перезапустите службу Node:

json5
{  plugins: {    entries: {      "linux-node": {        config: {          location: { enabled: true },        },      },    },  },}

Установите GeoClue2 и его демонстрационную утилиту where-am-i (geoclue-2-demo в Debian и Ubuntu). Пользователь службы Node должен быть допущен политикой GeoClue хоста и агентом авторизации.

Плагин использует where-am-i вместо последовательности вызовов busctl. GeoClue привязывает создание клиента, свойства, запуск, обновления и остановку к одному клиентскому подключению D-Bus; демонстрационная утилита объединяет этот жизненный цикл, тогда как отдельные подпроцессы busctl этого не делают. Зависимости npm не добавляются.

В Linux значения coarse, balanced и precise сопоставляются с уровнями точности GeoClue 4, 6 и 8. Значение maxAgeMs проверяется по возвращённой временной метке. Демонстрационная утилита GeoClue не сообщает выбранного поставщика данных, поэтому source имеет значение unknown; isPrecise имеет значение true, только если сообщаемая точность составляет 100 метров или лучше.

В Linux используются те же стабильные ошибки: LOCATION_DISABLED, LOCATION_TIMEOUT и LOCATION_UNAVAILABLE.

Интеграция с моделью и инструментами

  • Инструмент агента: действие location_get инструмента nodes (требуется Node).
  • CLI: openclaw nodes location get --node <id>.
  • Рекомендации для агента: вызывайте только в том случае, если пользователь включил доступ к местоположению и понимает его область действия.

Тексты интерфейса (рекомендуемые)

  • Off: «Передача местоположения отключена».
  • While Using: «Только когда OpenClaw открыт».
  • Always: «Разрешить запрашиваемые проверки местоположения, когда OpenClaw работает в фоновом режиме».
  • Precise: «Использовать точное местоположение по GPS. Выключите этот параметр, чтобы передавать приблизительное местоположение».

Связанные материалы

Was this useful?
On this page

On this page