Неофициальный адаптер ioBroker для роботизированных газонокосилок Anthbot Genie , ориентированный на подробную телеметрию, диагностику и управление газонокосилками Genie 600/1000/3000/5000 и более новыми моделями M5/M9.
Адаптер подключается к облачной учетной записи Anthbot, обнаруживает подключенные газонокосилки, считывает теневые данные из облака и IoT, а также предоставляет в ioBroker обширное дерево состояний, содержащее информацию о статусе, настройках, командах для газонокосилок, данных о зонах, расходных материалах, местоположении, диагностике и необработанных данных для устранения неполадок.
Он предназначен для пользователей, которым требуется больше, чем просто просмотр информации о состоянии устройства в режиме онлайн/заряда батареи/статуса: состояние RTK и базовой станции, сведения о прошивке и OTA-обновлениях, информация о сети и SIM-карте, данные GPS и координаты местоположения, временные метки жизненного цикла карты, сведения об ошибках газонокосилки, сроки службы расходных материалов, настройки дождя, метаданные зон и записываемые элементы управления скашиванием доступны в виде состояний ioBroker.
Этот адаптер доступен в ioBroker.latest Репозиторий. Пожалуйста, оставляйте отзывы и результаты тестирования в теме на форуме ioBroker .
Пример использования ioBroker Blockly с условиями для автоматизации газонокосилки можно найти в примере автоматизации Blockly .
Функции
- Вход в облако Anthbot с зашифрованным хранением паролей в собственной конфигурации ioBroker.
- Автоматическое обнаружение газонокосилок, привязанных к настроенной учетной записи Anthbot.
- Поиск региона и конечной точки IoT для каждой газонокосилки
- Автоматическое обновление временных учетных данных IoT после AWS IoT
403ответы - Опрос представителей теневой экономики в сфере собственности и услуг
- Подробная информация о состоянии подключения, состоянии сети, состоянии батареи, состоянии газонокосилки, состоянии зарядки, времени кошения, площади кошения, общем времени кошения/площади, состоянии карты, состоянии задачи картирования, ошибках, активном режиме кошения, точечном кошении и количестве зон.
- Диагностические состояния для RTK-установки, базовой станции RTK, предупреждений о перемещении антенны, версий прошивки, хода OTA-обновления, Wi-Fi, сотовой связи, SIM-карты, Bluetooth, флагов камеры/карты, системы предотвращения столкновений, флагов безопасности, системных временных меток и данных об ошибках газонокосилки, хранящихся в облаке.
- Информация о местоположении для GPS-координат, предотвращающих потерю, и локального положения газонокосилки.
- Срок службы расходных материалов и кнопки сброса для зарядного порта, камер и лезвий.
- Настраиваемые параметры управления для кошения по всей карте, зонального кошения, высоты среза, громкости голоса, пользовательского направления кошения, обхода препятствий, настроек на случай дождя и кошения вблизи зарядной станции.
- Команды управления для полного скашивания, остановки, возврата на зарядную станцию, паузы при возврате на зарядную станцию, сброса травы, режима обслуживания дисков, скашивания краев, скашивания возле зарядной станции, точечного скашивания, обновления, ручного зонирования и автоматического зонирования.
- Метаданные зон, созданные вручную и автоматически, представлены в формате JSON, включая активные идентификаторы зон, созданных вручную.
- Состояния изображения карты в формате PNG (только для чтения) для исходной карты, маски скошенной области RTK и исторической траектории скашивания.
- Исходные теневые свойства, теневые сервисы, преобразования кодов событий Anthbot и полезные нагрузки определений областей для устранения неполадок и автоматизированной отладки.
Требования
- ioBroker с js-контроллером
>= 6.0.11 - администратор ioBroker
>= 7.6.20 - Node.js
>= 22 - Учетная запись Anthbot, содержащая как минимум одну привязанную газонокосилку Genie.
- Доступ в Интернет с хоста ioBroker к облаку Anthbot и конечной точке AWS IoT.
Установка
Адаптер доступен в ioBroker.latest репозиторий, который можно установить из интерфейса адаптера ioBroker или из командной строки.
Администратор ioBroker
Еслиlatest Если репозиторий еще не активен, откройте административную панель ioBroker, перейдите в «Настройки» -> «Репозитории» , выберите или включите его.latest и обновите список адаптеров.
Затем откройте окно адаптера и найдите...anthbot-genie и установите адаптер изlatest репозиторий.
CLI
Установка:
iobroker repo set latest
iobroker update
iobroker add anthbot-genie
или явно с указанием версии:
iobroker add anthbot-genie@0.1.13
Поддерживаемые устройства
- Genie 600
- Джин 1000
- Genie 3000
- Genie 5000
- М5
- М9
Другие модели Anthbot могут по-прежнему работать, если они предоставляют ту же структуру облачных и теневых данных, но они пока не указаны и не задокументированы здесь явно.
Разработка
npm installУстанавливает зависимости среды выполнения и разработки.npm run lintПроверяет стиль кода с помощью ESLint.npm run lint:fixПрименяет автоматически исправляемые изменения ESLint.npm run checkВыполняет проверку синтаксиса TypeScript и Node.js для точки входа адаптера, модулей разделенной библиотеки и тестовых файлов.npm run test:jsВыполняет модульные тесты.npm run test:packageВыполняет тесты проверки пакета.npm run test:integrationзапускает интеграционные тесты.npm run testпробегиcheckмодульные тесты и проверка пакетов.npm run check:repoзапускает средство проверки репозитория ioBroker.npm run translateзапускает рабочий процесс преобразования адаптера ioBroker adapter-dev.npm run releaseСоздаёт новый релиз пакета ioBroker.
Переводы
- Переводы Admin/JSON Config доступны в режиме реального времени.
admin/i18n/<lang>.json. - Перевод имен объектов бэкенда/среды выполнения доступен в
i18n/<lang>.json. - После добавления или удаления переводимых строк обновите исходные файлы на английском языке и запустите программу.
npm run translateтаким образом, будущие синхронизации Weblate и adapter-dev будут оставаться согласованными.
Конфигурация
Откройте конфигурацию экземпляра адаптера в административной панели ioBroker и установите следующие параметры:
| Параметр | Описание | По умолчанию |
|---|---|---|
| Имя пользователя аккаунта Anthbot | Имя пользователя или адрес электронной почты учетной записи Anthbot | пустой |
| пароль от аккаунта Anthbot | Пароль от учетной записи Anthbot хранится в зашифрованном виде на сервере ioBroker. | пустой |
| код города | Например, телефонный или банковский код города.49 для Германии | 49 |
| хост API | Хост API облака Anthbot | api.anthbot.com |
| Интервал опроса в секундах | Интервал опроса данных о работе газонокосилки. Адаптер устанавливает интервал не менее 10 секунд. | 60 |
| Загрузка карты (высокая загрузка ЦП) | Загрузите и визуализируйте исходную карту, RTK-маску и историческую траекторию скашивания. | false |
| Создание карты с путями (ещё более высокая загрузка ЦП) | Загрузите и отобразите исторический маршрут скашивания травы на карте. Требуется загрузка карты. | false |
| Язык описания ошибки | Язык, используемый для описания ошибок в облаке Anthbot. | English |
Если какой-либо из параметров карты отключен, адаптер прекращает запрашивать или отображать данные карты, оставляя существующие значения состояния карты без изменений.
После сохранения конфигурации запустите или перезапустите экземпляр адаптера.
Штаты
Адаптер создает отдельное дерево устройств для каждого серийного номера газонокосилки. Если Anthbot когда-либо вернет серийный номер с символами, небезопасными для идентификаторов объектов ioBroker, адаптер нормализует только эти символы, сохраняя при этом исходный серийный номер в собственных метаданных объекта устройства:
anthbot-genie.<instance>.<serial>.*
Информация
| Состояние | Тип | Описание |
|---|---|---|
info.connection | логический | Состояние глобального облачного подключения адаптера |
<serial>.info.alias | нить | Псевдоним газонокосилки от Anthbot |
<serial>.info.model | нить | Модель/категория газонокосилки |
<serial>.info.region | нить | Регион Anthbot/AWS IoT |
<serial>.info.endpoint | нить | IoT-терминал используется для теневого доступа |
<serial>.info.online | логический | Состояние газонокосилки, отображаемое в режиме онлайн. |
<serial>.info.charging | логический | Заряжается ли газонокосилка в данный момент |
<serial>.info.lastServiceCommand | нить | Последнее зарегистрированное служебное командование |
<serial>.info.lastPoll | нить | ISO-метка времени последнего успешного опроса |
Метрики
| Состояние | Тип | Единица | Описание |
|---|---|---|---|
<serial>.metrics.batteryLevel | число | % | Уровень заряда батареи |
<serial>.metrics.status.mower | нить | Нормализованное состояние газонокосилки | |
<serial>.metrics.status.robotRaw | нить | Необработанное состояние робота | |
<serial>.metrics.status.modeRaw | нить | Сыройmode.value статус, сообщаемый моделями M5/M9 | |
<serial>.metrics.mowing.time | число | s | Указанное время кошения |
<serial>.metrics.mowing.area | число | m2 | Сообщенная площадь скашивания |
<serial>.metrics.mowing.totalTime | число | s | Общее время кошения, указанное моделями M5/M9 |
<serial>.metrics.mowing.totalArea | число | m2 | Общая площадь скашивания, отображаемая моделями M5/M9. |
<serial>.metrics.mowing.borderActive | логический | активно ведется работа по покосу травы вдоль границы. | |
<serial>.metrics.mowing.nearChargerActive | логический | Активна функция кошения травы рядом с зарядной станцией. | |
<serial>.metrics.mowing.fullYardActive | логический | Стрижка всего газона в режиме реального времени | |
<serial>.metrics.pointMowing.active | логический | Точечное скашивание активно | |
<serial>.metrics.pointMowing.x | число | Последняя точка кошения, координата X | |
<serial>.metrics.pointMowing.y | число | Последняя точка скашивания, координата Y | |
<serial>.metrics.zones.manualCount | число | Количество зон ручного управления | |
<serial>.metrics.zones.autoCount | число | Количество автоматических зон | |
<serial>.metrics.map.totalArea | число | m2 | Общая картографированная площадь |
<serial>.metrics.map.status | нить | Исходный статус карты | |
<serial>.metrics.map.mappingTaskState | нить | Состояние задачи сопоставления, сообщаемое моделями M5/M9 | |
<serial>.metrics.error.code | число | Код ошибки последней газонокосилки | |
<serial>.metrics.error.description | нить | Удобочитаемое описание ошибки из кэшированного списка кодов событий Anthbot, если таковое известно. | |
<serial>.metrics.error.active | логический | Активна ли ненулевая ошибка газонокосилки? |
Адаптер сохраняет одно и то же дерево состояний для всех поддерживаемых моделей газонокосилок. На моделях, которые не предоставляют поля полезной нагрузки, специфичные для M5/M9, состоянияmetrics.status.modeRaw ,metrics.mowing.totalTime ,metrics.mowing.totalArea , иmetrics.map.mappingTaskState создаются, но остаются пустыми илиnull .
Изображения карт
| Состояние | Тип | Описание |
|---|---|---|
<serial>.map.image | нить | Карта навигации в исходном виде в формате PNG (URI данных) |
<serial>.map.imageWithRtkMask | нить | Встроенная навигационная карта с использованием Anthbotrtk_mask_map в виде URI данных PNG |
<serial>.map.imageWithMowedPath | нить | Карта навигации с загруженными историческими данными о траектории скашивания в формате PNG (URI данных). |
<serial>.map.mowedPath | нить | JSON-массив с точными историческими точками пути, использованными дляmap.imageWithMowedPath |
Три состояния изображения доступны только для чтения и используютmedia.image роль.map.mowedPath Состояние доступно только для чтения и используетjson роль. Адаптер загружает Anthbot.multi_maps файл карты, выдержкиmaps/remote_map_navi.map и отображает исходный растр с использованием совместимой с приложением палитры освещения.map.image содержит только карту;map.imageWithRtkMask добавляет полныйmaps/rtk_mask_map Растровое изображение скошенной площади;map.imageWithMowedPath запросыreq_history_mapping_path , загрузкиpath_<SN>.txt , отображает исторический маршрут синим цветом и добавляет текущую позу газонокосилки в виде желтой иконки робота, а также встроенный маркер зарядного устройства под ней.map.mowedPath Содержит те же точки пути JSON, что и этот PNG-файл.x иy Значения используют исходные сантиметровые координаты исторического маршрута; разделите их на100 для преобразования их в локальные метры карты, используемые для состояний положения. Встроенные ресурсы приложения ориентированы таким образом, что передняя часть газонокосилки направлена вниз, и поворачиваются с помощьюlocation.pose.yaw - 90° (например, реальное отклонение примерно на 100 градусов)-16° указывает на переднюю правую сторону); сгенерированный резервный вариант использует ту же ориентацию. Маркер зарядного устройства и только для чтения.location.charger.x /location.charger.y Штаты считываются изcharger_point вmaps/remote_map.json Координаты штата указаны в метрах. Оба наложенных изображения отображают настроенные запрещенные зоны красным цветом. Историческое изображение никогда не возвращается к короткоживущему режиму.curpath Состояния изображений и пути обновляются при изменении идентификатора карты, метки времени, истории пути, положения газонокосилки или точки зарядки. Отсутствие или некорректность данных карты приводит к тому, что состояния остаются пустыми, пока адаптер продолжает опрос.
Эти два параметра карты намеренно управляют разными видами работ:
fetchMap = false: не запрашивается путь к архиву карты, растровому изображению, PNG-файлу или истории изменений. Существующие значения координат карты и зарядного устройства остаются неизменными, поэтому ранее сгенерированные координаты карты и зарядного устройства могут отображаться, но не обновляются.fetchMap = trueиgenerateMapWithPaths = falseОбновлены исходная карта и состояние RTK-маски. Исторический путь не запрашивается, иmap.imageWithMowedPathиmap.mowedPathостаются без изменений. Использоватьmap.imageилиmap.imageWithRtkMaskдля отображения карты с меньшим потреблением ресурсов процессора.- Обе настройки
true: все три состояния изображения иmap.mowedPathгенерируются состояния;map.imageWithMowedPathСодержит исторический маршрут и текущую иконку робота.
VIS: карта со встроенным значком робота
Используйте этот прямой путь, если включены обе настройки карты. Привяжите виджет изображения VIS к<serial>.map.imageWithMowedPath Адаптер уже отображает исторический путь и иконку робота в текущей позе. Второй виджет иконки VIS не требуется. Сохраняйте контейнер изображения с исходным соотношением сторон PNG.404:488 ).
ВИС: карта с отдельным значком наложения
Используйте этот путь с меньшей загрузкой ЦП, когдаfetchMap = true иgenerateMapWithPaths = false Привяжите виджет изображения к<serial>.map.image или<serial>.map.imageWithRtkMask Затем разместите прозрачный виджет значка абсолютно над ним. Привяжите или вычислите его положение на основе этого значения.<serial>.location.pose.x и<serial>.location.pose.y Эти значения указаны в метрах; метаданные карты содержат начало координат и разрешение. Разместите оба виджета в одном и том же относительно расположенном контейнере и используйте одинаковое соотношение сторон.404:488 ), в противном случаеobject-fit: contain может добавить черные полосы по бокам и сместить наложенную иконку. ЕслиfetchMap = false Изображение на карте может по-прежнему отображать старое состояние, но ни сама карта, ни ее отдельное положение в наложении не обновляются адаптером.
После развертывания системы преобразования измерителя положения в измерение состояния,location.pose.x иlocation.pose.y Это метры. Преобразуйте их в пиксели карты, используя значения заголовка карты из...maps/remote_map.json :
const map = {
width: 404,
height: 488,
resolution: 0.05,
xMin: -15.353175,
yMin: -9.549684,
};
const pixelX = (poseX - map.xMin) / map.resolution;
const pixelY = map.height - 1 - (poseY - map.yMin) / map.resolution;
const poseYaw = Number(poseYawState); // <serial>.location.pose.yaw
icon.style.left = `${(pixelX / map.width) * 100}%`;
icon.style.top = `${(pixelY / map.height) * 100}%`;
icon.style.transform = `translate(-50%, -50%) rotate(${poseYaw - 90}deg)`;
Для текущего снимка,pose.x = 0.094 иpose.y = 0.356 Разместите значок примерно в пикселях.(309, 289) , илиleft: 76.5% иtop: 59.2% . ОпределятьposeYaw от<serial>.location.pose.yaw ; с иконкой, расположенной спереди вниз, применитьposeYaw - 90 так что происходит вращательное движение в реальном времени.-16 Направляет переднюю часть вправо. В настоящее время адаптер не публикует ширину карты, высоту, разрешение или начало координат в качестве состояний, поэтому эти значения необходимо обновлять при создании новой карты газонокосилкой; не смешивайте пиксели массива карты с координатами газонокосилки в метрах.
Рыскание: происхождение и расчет
<serial>.location.pose.yaw Это обозначение головки косилки, указанное Anthbot как...pose.yaw Значение выражено в градусах и не переводится из миллиметров. Адаптер осуществляет только преобразование.pose.x иpose.y От миллиметров до метров; угол рыскания передается без изменений. X/Y описывают положение косилки, поэтому угол рыскания нельзя рассчитывать только на основе текущего положения.
Для отдельного значка VIS, на исходном изображении которого передняя часть газонокосилки направлена вниз, рассчитайте поворот изображения с фиксированным значением.90° компенсировать:
const yawDeg = Number(yawState); // <serial>.location.pose.yaw
const iconRotationDeg = yawDeg - 90;
icon.style.transform = `translate(-50%, -50%) rotate(${iconRotationDeg}deg)`;
Он-90° Параметр offset выравнивает соглашение об отображении заголовков Anthbot с основным элементом. Та же формула используется для встроенной иконки карты и ее резервного варианта. Примеры:yaw = 90° результаты в0° Поворот изображения (спереди вниз), при этом значение в реальном времениyaw = -16° результаты в-106° (эквивалентно254° ) и направляет переднюю часть вправо. Если рыскание недоступно, оставьте объект в его стандартной ориентации — передней частью вниз.
Источник иконки робота
Проверенный пакет приложений Anthbot содержит локальные ресурсы для отображения маркеров на карте, включая Genie.pic_device_map актив, варианты S2/S3/M9Pro, специфичные для конкретной модели, иview_map_battery_position Маркер зарядного устройства. Это упакованные файлы пользовательского интерфейса, выбранные приложением; полезная нагрузка облака/API и загруженный архив карты не предоставляют многоразовый URL-адрес значка или состояние значка. Адаптер упаковывает соответствующие ресурсы маркеров, полученные из приложения, для известных моделей и использует собственный автономный маркер робота, если какой-либо ресурс отсутствует, нечитаем или модель неизвестна. Адаптер не зависит от установленного приложения.
Расположение
| Состояние | Тип | Описание |
|---|---|---|
<serial>.location.gps.latitude | число | Определение широты по GPS на основе данных о местоположении с защитой от потери. |
<serial>.location.gps.longitude | число | Определение долготы по GPS на основе данных о местоположении с защитой от потери. |
<serial>.location.pose.x | число | Местоположение косилки: позиция X в метрах |
<serial>.location.pose.y | число | Местоположение косилки: Y-образная позиция в метрах |
<serial>.location.pose.yaw | число | Положение местной газонокосилки, угол поворота |
<serial>.location.pose.type | нить | Сообщенный тип позы |
<serial>.location.charger.x | число | Координаты зарядного устройства X в метрах взяты из исходных метаданных карты. |
<serial>.location.charger.y | число | Координаты зарядного устройства по оси Y в метрах взяты из исходных метаданных карты. |
Диагностика
Онdiagnostics Канал предоставляет данные для устранения неполадок, доступные только для чтения, полученные из тени газонокосилки, включая состояние RTK, состояние базовой станции RTK, флаги камеры/карты/сети, предотвращение столкновений, версии прошивки, ход обновления OTA, сведения о Wi-Fi/SIM-карте, временные метки и следующую встречу. На моделях M5/M9 адаптер также отображаетnet_config.* ,mode.value ,error.value ,map.map_area ,mapping_task.state ,mowing_time.value , иmowing_area.value в существующее дерево состояний ioBroker, где значения совпадают.
Расходные материалы
| Состояние | Тип | Единица | Описание |
|---|---|---|---|
<serial>.consumable.chargingPort.life | число | % | Срок службы зарядного порта |
<serial>.consumable.chargingPort.reset | логический | Сбросить срок службы зарядного порта | |
<serial>.consumable.cameras.life | число | % | Срок службы камер |
<serial>.consumable.cameras.reset | логический | Сбросить срок службы камер | |
<serial>.consumable.blades.life | число | % | Срок службы лезвий |
<serial>.consumable.blades.reset | логический | Сбросить срок службы лезвий |
Газонокосилка принимает команды сброса расходных материалов только тогда, когда соответствующий ресурс расходных материалов равен 5% или ниже.
Элементы управления
Записываемые состояния управления обновляют настройки газонокосилки через теневой сервис Anthbot IoT. Адаптер обрабатывает кодирование полезной нагрузки теневого сервиса, специфичное для каждой модели, внутри себя, поэтому одни и те же состояния управления ioBroker могут использоваться для всех поддерживаемых моделей газонокосилок.
| Состояние | Тип | Диапазон | Описание |
|---|---|---|---|
<serial>.controls.fullMapMowing.mowHeight | число | 30..70 mm шаг 5 мм | Установить высоту среза по всей карте |
<serial>.controls.fullMapMowing.includeEdgeTrimming | логический | true /false | Включите обрезку краев в процесс кошения по всей карте. |
<serial>.controls.fullMapMowing.customMowingDirection | число | 0..180 deg | Задайте пользовательское направление скашивания на всей карте |
<serial>.controls.fullMapMowing.customMowingDirectionEnabled | логический | true /false | Включить или отключить возможность настройки направления скашивания на всей карте |
<serial>.controls.zoneMowing.mowHeight | число | 30..70 mm шаг 5 мм | Установите высоту скашивания в зоне скашивания. |
<serial>.controls.zoneMowing.mowCount | число | 1..3 | Заданные проходы для скашивания в заданной зоне |
<serial>.controls.zoneMowing.customMowingDirection | число | 0..180 deg | Установить направление скашивания в зоне |
<serial>.controls.zoneMowing.customMowingDirectionEnabled | логический | true /false | Включить или отключить направление скашивания в зоне |
<serial>.controls.zoneMowing.obstacleAvoidanceEnabled | логический | true /false | Включить или отключить предотвращение столкновений в зоне |
<serial>.controls.zoneMowing.obstacleAvoidanceLevel | число | 0..2 | Установить уровень обхода препятствий в зоне |
<serial>.controls.voiceVolume | число | 0..100 % | Установить громкость голоса |
<serial>.controls.rain.perceptionEnabled | логический | true /false | Включить или отключить отображение дождя |
<serial>.controls.rain.continueTimeHours | число | 0..8 h | Продолжительность дождя в часах |
<serial>.controls.nearChargerMowing.enabled | логический | true /false | Включить или отключить кошение травы рядом с зарядной станцией. |
<serial>.controls.nearChargerMowing.mowHeight | число | 30..70 mm шаг 5 мм | Установите высоту скашивания для кошения рядом с накопительной площадкой. |
<serial>.controls.nearChargerMowing.mowCount | число | 1..3 | Расположите косильные полосы рядом с зарядной площадкой. |
<serial>.controls.nearChargerMowing.obstacleAvoidanceEnabled | логический | true/false | Включить или отключить функцию предотвращения столкновений с препятствиями вблизи зарядной станции. |
<serial>.controls.nearChargerMowing.obstacleAvoidanceLevel | число | 0..2 | Установите уровень обхода препятствий рядом с зарядной станцией. |
Команды
Состояния команд доступны для записи. Состояния кнопок сбрасываются.false После выполнения команды зоны ее состояние сбрасывается до пустой строки. Кнопки сброса расходуемых ресурсов отображаются в разделеconsumable .
| Состояние | Тип | Описание |
|---|---|---|
<serial>.commands.device.find | логический | Найдите робота |
<serial>.commands.device.refresh | логический | Запросить все характеристики газонокосилки и обновить данные по штатам. |
<serial>.commands.device.cancelRtkAntennaMoved | логический | Отменить предупреждение о перемещении RTK-антенны |
<serial>.commands.docking.startReturn | логический | Вернитесь к зарядной станции |
<serial>.commands.docking.pauseReturn | логический | Пауза, возврат к зарядной станции |
<serial>.commands.maintenance.startGrassDump | логический | Начало сброса травы |
<serial>.commands.maintenance.startDiskMaintenance | логический | Запуск режима обслуживания диска |
<serial>.commands.mowing.startFullMap | логический | Начать кошение по всей карте |
<serial>.commands.mowing.startZone | нить | Начните косить одну или несколько зон вручную. |
<serial>.commands.mowing.startAutoZone | нить | Начать покос одной или нескольких автоматических зон |
<serial>.commands.mowing.startPoint | нить | Начните кошение с точкиx,y или {"x":123,"y":456} |
<serial>.commands.mowing.startEdge | логический | Начните косить по краям. |
<serial>.commands.mowing.startNearCharger | логический | Начинайте косить рядом с зарядной площадкой. |
<serial>.commands.mowing.pause | логический | Приостановить кошение |
<serial>.commands.mowing.resume | логический | Возобновить покос травы |
<serial>.commands.mowing.stop | логический | Прекратите все работы по уходу за газонокосилкой. |
<serial>.commands.mowing.end | логический | Завершение скашивания |
<serial>.commands.mowing.stopPoint | логический | Остановить покос в точке остановки |
Наличиеcommands.maintenance.startDiskMaintenance ,commands.maintenance.startGrassDump ,commands.mowing.startEdge ,commands.mowing.startNearCharger , иcommands.mowing.startPoint Это может зависеть от модели газонокосилки, прошивки, текущего режима работы газонокосилки и данных карты/краев.
Зоны
| Состояние | Тип | Описание |
|---|---|---|
<serial>.zones.manual.list | строка JSON | Известные ручные/пользовательские зоны |
<serial>.zones.manual.activeIds | строка JSON | В настоящее время активны идентификаторы зон, созданные вручную. |
<serial>.zones.autoList | строка JSON | Известные автоматические/региональные зоны |
Исходные данные
| Состояние | Тип | Описание |
|---|---|---|
<serial>.raw.shadow.property | строка JSON | Исходные свойства теневой полезной нагрузки |
<serial>.raw.shadow.service | строка JSON | Необработанная теневая полезная нагрузка сервиса |
<serial>.raw.shadow.event-code | строка JSON | Кэшированная полезная нагрузка для преобразования кода события Anthbot, используемая для описания ошибок. |
<serial>.raw.areaDefinition | строка JSON | Полезная нагрузка с определением исходной области |
Зональная стрижка газонов
Адаптер обеспечивает доступ к ручным/настраиваемым зонам косилки в следующих местах:
<instance>.<serial>.zones.manual.list
В этом штате содержится JSON-массив с известными зонами. Используйте его.id или точноname Из этого списка начнём косить.
Запишите выделенный фрагмент в:
<instance>.<serial>.commands.mowing.startZone
Допустимые значения:
- одна зона по идентификатору:
3 - одна зона по названию:
Front yard - несколько зон в виде идентификаторов или названий, разделенных запятыми:
3,5,Back yard - несколько зон в виде JSON-массива:
[3,5,"Back yard"]
После успешной записи адаптер отправляетcustom_area_mow_start с соответствующими идентификаторами зон, заданными вручную, и очищенными зонами.commands.mowing.startZone снова.
Автоматические зоны работают аналогичным образом:
<instance>.<serial>.zones.autoList
<instance>.<serial>.commands.mowing.startAutoZone
Для автоматических зон адаптер преобразует выбранные идентификаторы или имена зон в координаты зоны и отправляет их.region_mow_start .
Поиск неисправностей
Адаптер не подключается
- Проверьте имя пользователя, пароль и код города.
- Убедитесь, что газонокосилка отображается в приложении Anthbot с той же учетной записью.
- Повысьте уровень логирования адаптера до
debugи перезапустить экземпляр. - Проверять
anthbot-genie.<instance>.info.connection.
Объекты газонокосилки не создаются.
- В учетной записи Anthbot должна быть как минимум одна подключенная газонокосилка.
- Проверьте журнал адаптера на наличие
No Anthbot devices found for this account. - Убедитесь, что хост ioBroker имеет доступ к интернету.
Команды не работают
- Сначала проверьте, работает ли опрос состояния.
- Убедитесь, что целевой штат соответствует правильному серийному номеру газонокосилки.
- Для команд зон сравните записанное значение с идентификаторами и именами в
zones.manual.listилиzones.autoList. - Адаптер автоматически обновляет временные учетные данные IoT один раз после завершения операции AWS IoT.
403Если после этой повторной попытки команды по-прежнему не выполняются, проверьте журнал адаптера на наличие ошибок, связанных с полезной нагрузкой или состоянием газонокосилки, характерных для данной модели. - Проверять
raw.shadow.serviceа также журнал адаптера для проверки ошибок команд.
Кредиты
Особая благодарность проектам сообщества Anthbot Genie, которые значительно упростили понимание облачных потоков и сопоставления команд Anthbot:
Особая благодарность @Riza-Aslan за исследования поддержки M5/M9 и работу по сопоставлению полезной нагрузки, которые легли в основу этого обновления адаптера.
Этот адаптер ioBroker — независимый проект, но он основан на исследованиях и идеях реализации общедоступных API, полученных в ходе работы сообщества.
Юридическое уведомление
Данный проект является неофициальным и не связан с компанией Anthbot, не поддерживается ею, не спонсируется ею и не одобрен ею.
Названия, товарные знаки и логотипы Anthbot и Genie принадлежат их соответствующим владельцам. Подробности см. в файле NOTICE.md .
Более старые записи в журнале изменений архивируются в файле CHANGELOG_OLD.md.
Changelog
WORK IN PROGRESS
- Add separate read-only PNG map image states for the native map, RTK mowed-area mask, and downloaded historical mowing path.
- Add an opt-in Admin checkbox for map downloads and rendering because map generation can use significant CPU.
- Add a second opt-in Admin checkbox for historical path rendering because it uses additional CPU and cloud requests.
- Expose local mower pose X/Y states in metres for direct map positioning.
- Expose charger point X/Y states in metres from the native map metadata.
- Expose the historical mowing path used by the PNG as a JSON state.
- Rotate the integrated robot map icon according to the mower pose yaw.
- Render the native charger marker from the map metadata below the mower icon.
0.1.13 (2026-06-08)
- Add M5/M9 payload parity for status, battery, error, network, RTK, map, and total mowing metrics while keeping the existing ioBroker state tree stable.
- Refresh temporary IoT credentials once on AWS IoT
403responses and retry the failed shadow read or command publish automatically. - Refactor the large adapter sources into focused CommonJS modules for Anthbot cloud/shadow clients, payload helpers, adapter object definitions, state derivation, and command handling without changing state IDs or command payload behavior.
- Expand
npm run checkso syntax validation covers the splitlib/anthbot,lib/adapter, and unit test files through the dedicated syntax-check helper.
0.1.12 (2026-06-06)
- (reloxx13) FIXED: Create the global
infochannel and correct the mower status role so the adapter object structure passes ioBroker review checks.
0.1.11 (2026-06-06)
- Refresh existing mower device/channel/state objects with
extendObjectAsyncso updated runtime i18n names are applied to already-created objects, not only new ones.
0.1.10 (2026-06-06)
- Align ioBroker object metadata with the repository object-structure checker by creating the global
infochannel, correcting the mower status role, and emitting full recommended i18n keys for object names. - Keep admin translations in the repository-checker-friendly
admin/i18n/<lang>.jsonlayout and load backend/runtime object-name translations from rooti18n/<lang>.jsonfiles via adapter-coreI18n.
0.1.9 (2026-06-06)
- Drop the temporary
--legacy-peer-depsGitHub Actions install override now that the lockfile supports plainnpm ciagain. - Re-enable ESLint in the GitHub Actions quick-check job and align the local lint config with the checked JavaScript codebase.
- Clean up repository metadata so local
repocheckerno longer reports actionable findings.
License
MIT License
Copyright (c) 2026 reloxx13
See LICENSE for details.