Škoda Public API

Чтение и управление транспортными средствами Škoda через официальный общедоступный API MyŠkoda.

Текущий релиз
0.1.11
Разработчик
Thomas Marthy
Лицензия
MIT

skoda-public-api адаптер для ioBroker

Управление автомобилями Škoda осуществляется через официальный API MyŠkoda Public .

Адаптер опубликован в npm. Включен в ioBroker. latest Информация о репозитории отслеживается в ioBroker.repositories#6592 . Статус разработки и открытые проекты задокументированы в HANDOFF.md .

Единственное ограничение, которое определяет всё.

API допускает 20 запросов в час на каждый VIN . Имеется одна конечная точка для чтения, несколько конечных точек для команд, отсутствуют функции push-уведомлений, веб-хуки и конечная точка для отображения статуса работы — команда возвращает результат. 202 Accepted И вы узнаете результат только из последующего опроса, который снова будет стоить квоты. Мониторинг в режиме, близком к реальному времени, с помощью этого API невозможен, как и зарядка избыточной мощности солнечных батарей с модуляцией тока. Планируйте соответственно.

Получение ключа API

Адаптер использует официальный публичный API MyŠkoda, а не интерфейс приложения, полученный путем обратной разработки. iobroker.vw-connect разговаривает с.

  1. Откройте приложение MyŠkoda (версия 8.16 или новее) и перейдите в раздел «Ключ API» .
  2. Выберите транспортные средства, к которым может быть подключен ключ. Ключ привязан к этому выбору: если VIN-номер не был выбран, он выдаст ответ. 403, независимо от того, насколько правильно это выглядит.
  3. Скопируйте ключ в экземпляр адаптера. Через некоторое время он истечет — адаптер отслеживает дату истечения срока действия и предупреждает вас (см. Истечение срока действия ключа ).

Ключ хранится в зашифрованном виде (encryptedNative Введите его в административном интерфейсе, а не в обозревателе объектов: там незашифрованное значение при запуске обрабатывается как зашифрованное и превращается в ненужный мусор.

Конфигурация

ПолеПо умолчаниюЧто это делает
ключ API—Ключ из приложения. Обязательно.
Транспортные средства—Одна строка на каждый VIN. В API нет списка транспортных средств , поэтому каждый VIN вводится вручную.
Базовый интервал15 минРитм, когда ничего не происходит. Минимум 5.
Интервал во время зарядки или кондиционирования5 минЧастота вращения педалей во время движения транспортного средства. Минимум 3.
Максимальный интервал для спального вагона60 минМаксимальный предел для снижения уровня свежести, см. ниже.
Запросы, зарезервированные для команд6Опрос прекращается, когда остается только это количество запросов.
Срок службы команды10 минКоманда, находящаяся в очереди, которую не удалось отправить в течение указанного времени, отбрасывается.
ВРАЩАТЬСЯ—Требуется только для дополнительного отопления. Никогда не переводите его в режим обогрева.
Прочитайте информацию о парковочном месте.наВ выключенном состоянии запрос на определение позиции через API даже не производится .

Есть кнопка «Проверить соединение» . Она отправляет ровно один запрос (из 20) и сообщает, в чем проблема, простыми словами — опечатка в VIN-коде и ключ, не подходящий к автомобилю, дают одинаковый результат. 403 И никто не догадается об этом, исходя из исходных данных об ошибке.

Поле для API-сервера намеренно отсутствует . Видимое поле «API-сервер» позволяет указать адаптеру — и его ключу — адрес на другом хосте. Для разработки базовый URL-адрес берется из переменной окружения. SKODA_API_BASE_URL.

Что вы получите

Дерево объектов находится ниже. <vin> Точное соответствие ответу API. Объекты создаются только для тех частей, которые транспортное средство фактически доставляет — у электромобиля Enyaq таких частей нет. fuelStatus Таким образом, подобные состояния не появляются. Ничего не удаляется автоматически.

Представления, специфичные для адаптера:

  • <vin>.parkingPosition.position —lat;lon в одном штате, для карт VIS и адаптеров геозон.
  • <vin>.chargingProfiles.profiles.<id>.* — Списание средств с профилей происходит по идентификатору профиля , а не по индексу. В противном случае удаление профиля в приложении незаметно изменит все остальные. configurationJson Предоставляет полный профиль для атомарных операций чтения/записи.

Кнопка обновления

Каждый сконфигурированный автомобиль имеет <vin>.refresh кнопка. Написать true с ack: false например, чтобы запросить предварительный опрос, когда ваш настенный блок обнаружит подключенный кабель:

setState('skoda-public-api.0.<VIN>.refresh', true);

Кнопка сбрасывается в исходное положение. false с ack: true Когда триггер обрабатывается, это не подтверждает получение новых данных об автомобиле. Запросы, поступившие до или во время одного и того же опроса, объединяются. Опрос включает в себя данные о парковочном положении, если эта функция включена и поддерживается. Обычные квоты, резерв команд и задержки обработки ошибок по-прежнему применяются. После этого автоматический опрос продолжается с интервалом, соответствующим сообщенному состоянию автомобиля и актуальности данных. Более короткий активный интервал применяется во время зарядки или работы климат-контроля, а не только при подключении к сети. Эта кнопка не может заставить Škoda предоставить более новые данные о положении и не планирует дополнительный проверочный опрос, если данные о положении все еще устарели.

Он info штаты

СостояниеЗначение
info.connectionfalse Когда ключ отклоняется (401/403). Остается true Когда квота исчерпана , пустой бюджет — это нормальная работа, а не ошибка.
<vin>.rateLimit.*limit, remaining, resetAt, lastRequestAt — отдельный бюджет для этого VIN-номера, не связанный с... RateLimit-* заголовки и память адаптера при перезагрузках.
info.apiKey.expiresAt, .daysRemainingИз X-API-Key-Expires-At заголовок каждого ответа.
<vin>.info.dataAgeСекунды с момента последнего carCapturedTimestamp в ответе.
<vin>.info.lastErrorsОн errors[] последний ответ в формате JSON.
<vin>.info.lastCommand.*name, result, timestamp, problemType последней команды.
<vin>.info.commandConfirmation.<group>.*Принятие, цель, крайний срок и подтвержденное наблюдением выполнение последней принятой команды в каждой контрольной группе.
<vin>.info.polling.nextPollAtЗапланированное время следующей попытки опроса, в миллисекундах Unix; 0 во время опроса, приостановления или повторной попытки записи в локальное состояние.
<vin>.info.polling.lastSuccessfulPollAtВремя последнего успешного ответа API автомобиля в миллисекундах Unix; сохраняется после перезапуска. 0 если таковой не зафиксирован.
<vin>.info.polling.reasonТекущее состояние планировщика или причина ожидания с читаемыми метками в обозревателе объектов.

Неполные ответы являются нормой. Когда API сообщает о неисправности детали или об исчезновении поля из возвращаемой детали, ее состояние сохраняет свое последнее значение с качеством «неудовлетворительное». Это также относится к состояниям, сохраняющимся после перезапуска и удаления профилей зарядки. Возвращаемые значения восстанавливают хорошее качество, даже если их значение не изменилось. Детали, намеренно исключенные из запроса, остаются без изменений. dataAge Измеряет возраст самого нового транспортного средства по метке времени последнего успешного опроса; это не часы в реальном времени и не гарантия актуальности данных для каждого отдельного штата.

Диагностика опроса

Трое info.polling Состояния поддерживаются отдельно для каждого настроенного транспортного средства, в том числе до получения первого успешного ответа. Они обновляются при изменении плана планировщиком и не обрабатывают дополнительные запросы к API.

reasonЗначение
STARTUPОжидается проведение первого опроса.
POLLINGЗаявка на предоставление транспортного средства находится в процессе обработки.
IDLE_INTERVALОжидание нормального интервала.
ACTIVE_INTERVALОжидание интервала зарядки/подогрева.
COMMAND_INTERVALИспользование более короткого интервала после выполнения команды.
UNCHANGED_DATAВременные метки транспортного средства не изменились, поэтому интервал был увеличен. Это не является доказательством того, что транспортное средство находится в спящем режиме.
MANUAL_REFRESHОбновление данных вручную перенесло следующий опрос на более ранний срок.
VERIFICATIONПосле принятия команды запланирована контрольная проверка.
COMMAND_RESERVEОпрос достиг резерва команд; запросы на команды удерживаются до сброса квоты.
QUOTAОжидание квоты, включая ответы API по ограничению скорости запросов.
STARTUP_GUARDОжидание защиты сохраненной квоты после перезапуска.
AUTH_ERRORКлюч API был отклонен; частота опроса сокращена до интервала ошибок.
ERROR_RETRYОжидание перед повторной попыткой выполнения неудачного запроса.
ERROR_INTERVALОжидание истечения установленного интервала после неудачного запроса или исчерпания попыток повторного выполнения.
WRITE_RETRYПолучен ответ от API, но необходимо повторить попытку записи в локальное состояние; новые запросы к API пока не запланированы.
SUSPENDEDAPI вернул ошибку 404; опрос для этого VIN-кода приостановлен до перезапуска адаптера.

nextPollAt Это запланированное время, а не обещание получения свежих данных в данный момент. Квота проверяется повторно перед отправкой, и запрос от другого транспортного средства может задержать ее. Успешный опрос может содержать неизмененные или неполные данные о транспортном средстве: сравните info.dataAge, отдельный человек carCapturedTimestamp Значения и флаги качества для проверки свежести. Команды и проверка подключения администратора не продвигаются дальше. lastSuccessfulPollAt Локальные повторные попытки записи также сохраняют время первоначального успешного ответа. Когда адаптер останавливается, эти состояния сохраняют свои последние значения; расписание действительно только пока экземпляр работает и заменяется при следующем запуске.

Витрины

Следующие числовые значения отображаются в более удобных для чтения единицах измерения. Идентификаторы состояний сохраняют имена полей API, включая исходные суффиксы единиц измерения:

Укажите ниже <vin>ВитринаПример
charging.status.battery.remainingCruisingRangeInMetersкмAPI 352000 → штат 352
activeVentilation.durationInSecondsминAPI 600 → штат 10
auxiliaryHeating.durationInSecondsминAPI 90 → штат 1.5

Другие диапазоны и одометр уже используют километры; время зарядки уже использует минуты. Значения делятся без округления. Существующие единицы измерения объекта и описания по умолчанию обновляются при следующем получении соответствующего значения; пользовательские имена сохраняются. Скрипты, считывающие эти три состояния, должны использовать км/мин. Существующие записанные временные ряды не перезаписываются. Ответы API и полезные нагрузки команд сохраняют единицы измерения API.

Управление транспортным средством

Для каждого домена, который поддерживает транспортное средство, предусмотрено три состояния, например, в рамках <vin>.charging:

  • enabled (Переключатель) передает состояние цели . Запись в него отправляет команду — если только цель уже не совпадает с тем, что было обнаружено при последнем опросе, в этом случае ничего не отправляется. info.lastCommand.result читает COALESCED.
  • start и stop (Кнопки) принудительно вызывают систему. Они являются выходом, когда полученные данные устарели на десять минут и перестали быть актуальными.

Он enabled переключатели принимают только логические значения. true и false Другие значения, включая строки, такие как "true", числа и null Команды игнорируются без запроса API или подтверждения. Они не заменяют ожидающие команды и не обновляют данные. info.lastCommand.

** ack = true Это означает «передано API», а не «это сделал автомобиль».** API отвечает на команду следующим образом: 202 Accepted и не предоставляет конечной точки, которая бы сообщала о результате; адаптер планирует проверочный опрос через 60 секунд, и только этот опрос показывает, что произошло на самом деле. Любой, кто создает автоматизацию на основе этого, должен это знать.

Пока команда ожидает подтверждения, повторное использование того же значения переключателя также считается выполненным. COALESCED; противоположное значение все еще может отправить команду. Соответствующая метка времени транспортного средства, более новая, чем принятая команда, завершает эту фазу ожидания. Без подтверждения она длится максимум заданное время жизни команды (по умолчанию 10 минут), после чего можно повторить попытку записи нового переключателя. Истечение срока действия не приводит к автоматической повторной отправке команды.

Визуальное подтверждение команды

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

После получения команды, принятой через API, выполните проверку. <vin>.info.commandConfirmation.<group>.status:

СтатусЗначение
WAITINGAPI принял команду; более новые данные о транспортном средстве пока не обнаружены.
CONFIRMEDВ более позднем опросе было указано запрошенное значение с меткой времени, более поздней, чем момент принятия API.
TIMED_OUTВ течение заданного времени выполнения команды, измеренного с момента принятия API, подтверждения не наблюдалось. Это не доказывает, что транспортное средство не выполнило команду.
INTERRUPTEDПерезапуск настроенного адаптера завершил незавершенное наблюдение из предыдущего процесса. Команда не отправляется повторно автоматически.

Группы — это charging, airConditioning, auxiliaryHeating, activeVentilation, chargingLimit, chargingMode и chargingProfiles.<id> Каждый файл содержит последнюю принятую команду для данного элемента управления; это не история команд. Новая принятая команда заменяет предыдущее наблюдение в той же группе. Другие группы и транспортные средства остаются независимыми. Повторные объединенные записи не продлевают срок подтверждения. Команды, находящиеся в очереди, недействительные или отклоненные, не создают и не заменяют записи подтверждения; их результат остается доступным в файле. info.lastCommand.

Каждая группа также предоставляет:

  • name: принятая команда, например charging.start.
  • target: запрошенное значение в формате JSON (true, 90, "TIMER" или полный профиль).
  • sentAt Время принятия API, в миллисекундах Unix.
  • expiresAt: крайний срок подтверждения, в миллисекундах Unix.
  • confirmedAt: время наблюдения соответствующих данных, в миллисекундах Unix; 0 в противном случае.

Например, JavaScript-скрипт ioBroker может отслеживать подтверждение без повторного опроса:

on({ id: 'skoda-public-api.0.<VIN>.info.commandConfirmation.charging.status', change: 'any' }, obj => {
    if (obj.state.ack && obj.state.val === 'CONFIRMED') {
        log('The requested charging state was observed in newer vehicle data.');
    }
});

Статус записывается после остальных полей записи, в том числе, когда новая принятая команда заменяет уже имевшуюся. WAITING. Читать name, target и sentAt для идентификации наблюдения. Подтверждение не меняет сути. info.lastCommand.result или повторно запишите значение элемента управления: SENT и ack: true «Продолжать» означает принятие API.

Соответствующий блок ответа должен иметь свой собственный более новый формат. carCapturedTimestamp Отсутствующие или неисправные детали, несвязанные временные метки и неизвестные состояния транспортного средства не могут подтвердить команду. Более новое соответствующее состояние является наблюдением, а не подтверждением операции на стороне сервера; другой клиент мог запросить ту же настройку. Данные, впервые полученные после истечения крайнего срока, оставляют запись в состоянии TIMED_OUT При перезапуске по заданной конфигурации отображаются только незавершенные процессы. WAITING записи становятся INTERRUPTED Завершенные записи остаются доступными. Пока адаптер остановлен, локальные таймеры подтверждения не запускаются, и сохраненные значения остаются неизменными.

Лимит зарядки

Напишите число с помощью ack = false к skoda-public-api.0.<vin>.charging.settings.targetStateOfChargeInPercent Чтобы установить максимальный уровень заряда, например, 80, 90 или 100. Это состояние отображается, когда транспортное средство сообщает о целевом уровне заряда. В JavaScript-адаптере ioBroker:

setState('skoda-public-api.0.<vin>.charging.settings.targetStateOfChargeInPercent', 90, false);

Адаптер принимает только значения 50, 60, 70, 80, 90 и 100 процентов , что соответствует 10-процентным шагам в приложении. Другие значения отклоняются локально без вызова API. После записи отображается запрошенное значение, которое обновляется на основе опросов транспортного средства. Существующие объекты автоматически обновляются, становясь доступными для записи, с минимальным значением 50, максимальным 100 и шагом 10 при первом опросе после перезапуска адаптера. ack = true После отправки это означает принятие API; проверьте это состояние после опроса для подтверждения того, что автомобиль применил ограничение. Повторение уже сообщенной или ожидающей принятия цели объединяется. Ожидающие изменения ограничения заменяют друг друга независимо от включения/выключения зарядки. Недопустимые входные данные локально завершаются с ошибкой без использования квоты API; результаты записываются в info.lastCommand Отклонённое значение не будет автоматически повторено.

Режим зарядки

Напишите строку, содержащую ack: false к <vin>.charging.settings.preferredChargeMode:

setState('skoda-public-api.0.<VIN>.charging.settings.preferredChargeMode', 'TIMER', false);

Адаптер принимает MANUAL, TIMER, TIMER_CHARGING_WITH_CLIMATISATION, PREFERRED_CHARGING_TIMES, ONLY_OWN_CURRENT, IMMEDIATE_DISCHARGING и HOME_STORAGE_CHARGING **только если в автомобиле указан этот режим. charging.settings.availableChargeModes ** После запуска требуется успешный опрос. Неизвестные, недоступные или нестроковые значения приводят к локальной ошибке без расходования квоты. Существующее состояние режима становится доступным для записи после первого опроса после обновления.

Профили зарядки

Редактируйте отдельные поля и применяйте их все вместе.

После успешного проведения опроса, для каждого полностью заполненного профиля назначается местный редактор. <vin>.chargingProfiles.profiles.<id>.edit:

  1. Изменять name или доступные поля в settings, такой как settings.targetStateOfChargeInPercent и settings.maxChargingCurrent.
  2. Отрегулируйте существующие таймеры в разделе timers.<timerId> (enabled, type, time, oneOffDay и индивидуальный recurringOn.MONDAY …SUNDAY переключатели), или существующие окна под preferredChargingTimes.<windowId> (enabled, startTime, endTime).
  3. Написать логическое значение true с ack: false к edit.apply ( Применить изменения профиля ). Адаптер проверяет и отправляет полный профиль через существующую очередь.

Несколько изменений приводят к одному обновлению профиля , а не к одному запросу на каждое поле. Подготовка, сброс и проверка не используют запросы к API транспортного средства. Перед применением не выполняется дополнительное чтение, не производится новый опрос, а также не применяется автоматическое применение или повторная отправка. Существующие правила квотирования, повторных попыток и проверки по-прежнему применяются к отправленной команде. Применение без изменений ничего не отправляет; повторение той же принятой цели объединяется в очередь.

Например, в JavaScript-адаптере ioBroker:

const edit = 'skoda-public-api.0.<VIN>.chargingProfiles.profiles.1.edit';
await setStateAsync(`${edit}.name`, 'Home', false);
await setStateAsync(`${edit}.settings.targetStateOfChargeInPercent`, 90, false);
await setStateAsync(`${edit}.apply`, true, false);

edit.reset ( Сброс черновика профиля ) отменяет локальные изменения и использует последний уже проверенный профиль. edit.dirty Отображает изменения относительно исходного варианта; остается верным после отправки до тех пор, пока опрос не сообщит о целевом значении или вы его не сбросите. edit.conflict указывает на измененный или недоступный базовый профиль; edit.message Разъясняет процедуры проверки и отправки. Поле ack: true Это означает, что данные хранятся локально , а не отправляются или выполняются. Результаты команд остаются в памяти. info.lastCommand и info.commandConfirmation.chargingProfiles.<id>.

Опросы сохраняют отредактированные черновики. Если профиль изменяется во время редактирования, применение блокируется: сбросьте и повторно примените изменения к новой базе. Другое ожидающее/в процессе обновления профиля также блокирует отправку редактором до тех пор, пока проблема не будет решена или не истечет срок действия. Черновики не восстанавливаются после перезапуска адаптера: первый действительный опрос инициализирует их заново, и сохраненные значения редактора не могут быть отправлены до этого опроса. Отсутствующие/неудачные профили не могут быть применены. Дополнительные настройки отображаются только в том случае, если они предоставлены транспортным средством; идентификаторы таймеров/окон и неизвестные поля API сохраняются, и записи здесь не могут быть созданы или удалены.

Логические и числовые поля редактора используют роли конфигурации, если они уникальны в пределах канала. switch.setting, level.setting.battery, level.setting.battery.min Текстовые поля используют общий формат. text Использование переключателей ролей и дней недели switch Таким образом, подробные роли никогда не встречаются дважды в одном и том же канале. Это по-прежнему локальные черновики; их отправляет только Apply. Названия полей и справочные тексты поддерживают все языки ioBroker; метки выбора, сообщения редактора и метки статуса опроса/подтверждения используют системный язык ioBroker (перезапустите адаптер после изменения языка). Значения API, такие как ONE_OFF и диагностические коды, такие как WAITING или QUOTA Остаются без изменений. Существующие карты диагностических меток перенесены, включая завершенные подтверждения. Журналы бэкэнда остаются на английском языке.

edit.available указывает, содержит ли последний опрос действительный профиль. Удаленные поля, таймеры или профили сохраняют свои последние значения, но их элементы управления становятся доступными только для чтения. common.read: true, common.write: false) с качеством q: 1 и пояснительное описание. Их роли становятся indicator для логических значений (включая отключенные кнопки), value для чисел, и text для строк. Возвращаемые поля вновь обретают свои первоначальные функции управления; активные кнопки остаются только для записи. read: false, write: true Прямая запись в недоступные поля игнорируется, и их сохраненные значения восстанавливаются. Когда поле возвращается, его параметры и качество сохраняются. q: 0 Восстанавливаются автоматически. Сохраненные элементы управления редактора также отключаются при запуске до первого корректного опроса. Эти проверки доступности используют только существующие опросы и локальные данные ioBroker.

Существующие объекты получают обновленные метаданные, принадлежащие адаптеру, без их удаления; пользовательские имена и несвязанные настройки, такие как конфигурация истории, сохраняются.

Обновите весь JSON напрямую.

Для каждого полного профиля с безопасным целочисленным идентификатором создается строковое JSON-состояние, доступное для записи: <vin>.chargingProfiles.profiles.<id>.configurationJson Он содержит полный профиль, включая id, name, settings, timers и preferredChargingTimes Прочитайте это состояние, измените нужные поля и запишите обратно полный JSON:

const id = 'skoda-public-api.0.<VIN>.chargingProfiles.profiles.1.configurationJson';
const state = getState(id);
if (state && state.ack && state.q === 0) {
    const profile = JSON.parse(state.val);
    profile.settings.maxChargingCurrent = 'REDUCED';
    setState(id, JSON.stringify(profile), false);
}

API заменяет весь профиль . Сохраните все поля, которые вы не изменяете, включая дополнительные поля, предоставленные API; не отправляйте частичный объект настроек. Адаптер проверяет обязательные поля, числовые идентификаторы, проценты (0–100), поддерживаемые значения настроек, логические флаги, уникальные идентификаторы таймера, дни недели и время. HH:mm Для включения таймеров также требуется указать время и выбрать соответствующий день недели. Время соответствует местному времени автомобиля. Идентификатор профиля должен совпадать с путем к состоянию и полным профилем из последнего опроса. Этот элемент управления обновляет существующие профили; он не создает и не удаляет их. Существующие подробные состояния профиля остаются представлениями только для чтения; используйте отдельный edit Ниже приведена область для поэтапных изменений.

Если последующий опрос изменяет, удаляет или исключает профиль до отправки обновления из очереди, обновление локально завершится неудачей. Прочитайте последний профиль и снова отправьте свои изменения. Изменения, внесенные в приложение после последнего опроса, могут по-прежнему конкурировать с операцией записи: API не имеет механизма условного обновления, поэтому избегайте одновременного редактирования одного и того же профиля.

Режим, ограничение зарядки, запуск/остановка и каждый профиль имеют независимые записи в очереди. Новые записи заменяют ожидающие обновления для той же настройки или профиля; идентичные сообщаемые или ожидающие подтверждения значения объединяются. Недопустимый ввод оставляет ожидающие подтверждения команды без изменений и отправляет отчеты. FAILED без указания источника. ack: true Это означает принятие API; после проверки проверяется заявленный режим/профиль с учетом обычной квоты. Истечение времени ожидания подтверждения не приводит к автоматической повторной отправке обновления. Публичный API также сообщает о поддерживаемых операциях в <vin>.operations.

info.lastCommand.result является одним из:

РезультатЗначение
SENTПередано в API.
QUEUEDОжидаем квоты; отправится в путь самостоятельно.
COALESCEDНет запроса: цель соответствует известному состоянию или команда все еще ожидает подтверждения.
EXPIREDУронили, не удалось отправить в течение срока службы.
REJECTED_BY_VEHICLEТранспортное средство отказалось в обслуживании (не поддерживается, неисправно или занято).
FAILEDВсё остальное — см. журнал.

Частота обновления данных, или почему ваши данные могут быть часовой давности.

Припаркованный автомобиль сообщает о том же самом. carCapturedTimestamp При каждом опросе. Запрос на более высокую частоту расходует всю квоту и не дает абсолютно никакого результата, поэтому адаптер удваивает свой интервал каждый раз, когда метка времени не меняется, вплоть до заданного предела. Как только транспортное средство сообщает что-то новое — или вы отправляете команду — оно немедленно возвращается к базовому ритму.

Чего этот API не может вам предоставить, независимо от его конфигурации:

  • Нет посекундного мониторинга. 20 запросов в час — это один запрос каждые три минуты, и это весь бюджет.
  • Никакого уведомления об окончании зарядки сразу не будет. Вы узнаете об этом на следующем опросе.
  • Отсутствует модуляция тока в амперах. API позволяет установить целевое состояние заряда, режим зарядки и профиль. REDUCED /MAXIMUM Предварительно настроенный режим. Он не может плавно регулировать силу тока, поэтому в примере с избыточной зарядкой используется управление включением/выключением.

Зарядка излишков фотоэлектрической энергии

examples/pv-surplus-charging.js Это закомментированный шаблон для JavaScript-адаптера ioBroker: пороговое значение включения, пороговое значение выключения с задержкой, минимальное время включения и выключения, ограничение на количество операций переключения в час и оценка info.lastCommand.result Логика управления намеренно размещена вне адаптера — каждая фотоэлектрическая система имеет разные идентификаторы состояний и семантику счетчика.

Подойдет ли это вам по двум причинам:

  • Установите ток зарядки переменным током на REDUCED в приложении MyŠkoda или в соответствующем профиле зарядки. Поддержка обновления профиля. settings.maxChargingCurrent; отсутствует специальная команда для глобальной настройки тока или произвольной силы тока. MAXIMUM Транспортное средство тянет то, что предлагает настенный блок, и небольшого излишка недостаточно, чтобы это покрыть.
  • Измерьте фактическое потребление энергии вашим автомобилем (charging.status.chargePowerInKw) и устанавливайте пороговые значения, исходя из этого числа, а не из надписи на настенной коробке.

Срок действия ключа

Ключ нельзя обновить автоматически — API этого не предоставляет, а для создания нового требуется человек с телефоном под рукой. Поскольку значения в дереве сохраняют свое последнее состояние при сбое опроса, просроченный ключ в противном случае останется незамеченным в течение нескольких недель. Поэтому адаптер обновляет свой ключ один раз в день: info Сообщение приходит через 14 дней, предупреждение — через 7, ошибка — через 2, а также уведомление от ioBroker начиная с 7-го дня и оповещение, как только ключ будет утерян.

Поиск неисправностей

СимптомПричина
403 api-key-not-authorizedЛибо в VIN-коде допущена опечатка, либо автомобиль не был выбран при создании ключа. Кнопка «Проверить соединение» указывает на конкретную причину.
401 api-key-expiredНужен новый ключ. info.connection идет к false а частота опросов сократится до одного раза в час.
429 rate-limit-exceededБюджет израсходован. Нормальная работа; адаптер ожидает появления окна и продолжает работать. info.connection в true.
Команды ничего не делаютПроверять info.lastCommand.result. COALESCED означает, что целевой объект уже соответствует последнему известному состоянию — используйте start /stop кнопки для принудительного вызова.
Штаты прекращают обновлениеПосмотрите на <vin>.info.dataAge Опросы в спальных вагонах проводятся все реже и реже, и это делается намеренно.
Неясно, когда состоится следующий опрос.Проверять <vin>.info.polling.nextPollAt и .reason; .lastSuccessfulPollAt Отображает последний успешный ответ API.

Компактный режим

Адаптер поддерживает компактный режим ioBroker с независимыми экземплярами в общем процессе. Назначение компактной группы контролируется вашей установкой ioBroker. См. поведение при проверке и завершении работы .

Языки

Конфигурация адаптера и дерево объектов переведены. Журналы бэкэнда, уведомления и результаты проверки соединения всегда на английском языке, поэтому они остаются полезными при запросах в службу поддержки независимо от языка системы ioBroker.

Отказ от ответственности

Škoda и MyŠkoda являются товарными знаками Škoda Auto. Этот проект представляет собой независимый адаптер с открытым исходным кодом и не связан с Škoda Auto, а также не поддерживается ею. Он использует общедоступный API MyŠkoda с ключом, который владелец автомобиля создает самостоятельно. Значок адаптера является оригинальным, нейтральным по отношению к бренду изображением проекта и не воспроизводит официальный логотип Škoda; он распространяется под лицензией MIT этого проекта.

Changelog

0.1.11 (2026-09-20)

  • Use a catalogued ioBroker role for editable profile names, complete the instance-object name translations, and fill missing translations on existing info.connection objects at startup.

0.1.10 (2026-09-20)

  • Add a writable charging limit with input validation, quota handling and verification polling.
  • Ignore non-boolean on/off switch writes instead of interpreting them as stop commands.
  • Add writable charging mode and complete charging-profile JSON controls with validation, independent queues and verification polling.
  • Expose per-vehicle polling diagnostics: next due time, persistent last successful poll and the current waiting reason.
  • Expose per-control command confirmation and local timeouts using existing polls only, without additional API requests.
  • Add local charging-profile editors with individual fields, weekday switches, apply/reset buttons and conflict detection; batch changes into one profile update.
  • Refine editor setting roles and translated help/choices; migrate existing metadata and mark unavailable controls read-only until their data returns.
  • Keep unavailable roles consistent with access rights, avoid repeated detailed roles per channel, and localize editor messages and polling/confirmation labels without changing state codes.

0.1.9 (2026-09-06)

  • Used ioBroker-managed request timers and removed news for the skipped npm version 0.1.7.

0.1.8 (2026-09-06)

  • Kept Windows CI stable while retaining Compact Mode controller coverage on Unix hosts.

0.1.7 (2026-09-06)

  • Added and verified ioBroker Compact Mode support.

0.1.6 (2026-09-06)

  • (Thomas Marthy) limited adapter news to the seven entries supported by the repository builder

0.1.5 (2026-09-06)

  • (Thomas Marthy) aligned the test workflow and changelog archive with repository checker requirements

0.1.4 (2026-09-06)

  • (Thomas Marthy) added complete backend translations for all supported ioBroker languages

0.1.3 (2026-09-06)

  • (Thomas Marthy) completed missing admin UI translations for all supported languages

0.1.2 (2026-09-06)

  • (Thomas Marthy) resolved repository checker warnings for CI test discovery, environment access, changelog archiving and npm packaging

0.1.1 (2026-09-06)

  • (Thomas Marthy) completed ioBroker object name translations for all supported languages

0.1.0 (2026-09-05)

  • (Thomas Marthy) fixed ioBroker state roles reported by object structure validation
  • (Thomas Marthy) added German and English backend messages, notifications, connection-test results and object names
  • (Thomas Marthy) ensured compiled code and backend translations are included in the npm package

0.0.2 (2026-09-05)

  • (Thomas Marthy) enabled npm Trusted Publishing for automated releases

0.0.1 (2026-09-05)

  • (Thomas Marthy) initial release

License

MIT License

Copyright (c) 2026 Thomas Marthy iobroker@marthy.ch

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.