![Logo](../../admin/automatic-feeder.png) # ioBroker.automatic-feeder

## Адаптер automatic-feeder для ioBroker Этот адаптер превращает любой уже имеющийся в ioBroker выключатель (розетку, реле, выход GPIO …) в **кормушку с управлением по времени**. Он включает выход в заданное вами время на определённое количество секунд и при этом может учитывать температуру, а также смену дня и ночи, чтобы кормление никогда не происходило в неподходящее время. Этот документ представляет собой полное руководство. Если вы ещё ни разу не пользовались адаптером, читайте его сверху вниз — раздел **Быстрый старт** доведёт вас за несколько минут до первого кормления, а остальное подробно объясняет каждую настройку. --- ## Содержание 1. [Что делает адаптер](#1-что-делает-адаптер) 2. [Требования](#2-требования) 3. [Установка](#3-установка) 4. [Быстрый старт](#4-быстрый-старт--первое-кормление) 5. [Страница настроек в деталях](#5-страница-настроек-в-деталях) 6. [Объекты / точки данных](#6-объекты--точки-данных) 7. [Примеры / рецепты](#7-примеры--рецепты) 8. [Уведомления Telegram](#8-уведомления-telegram) 9. [Устранение неполадок и FAQ](#9-устранение-неполадок-и-faq) 10. [Логирование и поиск ошибок](#10-логирование-и-поиск-ошибок) --- ## 1. Что делает адаптер «Кормление» по своей сути совсем простое: **выход ВКЛ → подождать настраиваемое количество секунд → снова ВЫКЛ**. В переоборудованной кормушке в это время работает мотор и выдаёт корм. Адаптер управляет **до 5 выключателями**, каждый полностью независимо и с собственной вкладкой конфигурации, названной по имени выключателя. Для каждого выключателя вы задаёте: * **когда** кормить — либо в **фиксированное время** (например, 08:00 и 18:00), либо с **интервалом** внутри временного окна (например, каждые 60 минут между 08:00 и 18:00); * **как долго** выход остаётся включённым (длительность кормления в секундах); * **блокировать ли** кормление, если температура воды или воздуха слишком низкая/высокая; * **не кормить ли ночью** (на основе реального восхода/захода солнца для вашего местоположения); * **отслеживать ли процесс переключения** (проверка, действительно ли произошло включение и выключение) и при необходимости отправлять **Telegram**-сообщение с результатом; * **сокращать ли или приостанавливать** кормление во время повторяющегося **зимнего** сезона — при желании с напоминаниями в Telegram перед его началом и окончанием; * **подстраивать ли** интервал и порцию под температуру воды/воздуха автоматически (**динамическое кормление**, модель Q10); * **блокировать ли** кормление, когда содержание растворённого **кислорода** (O₂) слишком низкое. Вы можете в любой момент запустить кормление **вручную** — прямо на странице настроек (кнопка с произвольно выбираемой длительностью) или через точку данных (например, кнопкой в VIS-представлении). > Важно: адаптер не создаёт выключатель сам. Он **управляет уже существующим объектом** в > вашем ioBroker. Этот объект вы выбираете в конфигурации. --- ## 2. Требования | Вам нужно | Подробности | |-----------|-------------| | **ioBroker** с актуальным **admin** (≥ 7) | Страница конфигурации реализована на React. | | **Объект-выключатель** | Записываемая точка данных ioBroker, которая включает/выключает кормушку — например, розетка (`shelly.0.…`, `sonoff.0.…`, `zigbee.0.…`), реле или переменная скрипта. | | **Географические координаты** | Для расчёта восхода/захода солнца. Либо из системных настроек ioBroker, либо по адресу/карте. **Обязательно.** | | *(опционально)* Объекты температуры | Существующие точки данных с температурой воздуха и/или воды, для блокировки по температуре или динамического кормления. Назначаются **для каждого выключателя** на вкладке выключателя. | | *(опционально)* Объекты **кислорода (O₂)** | Существующие точки данных с содержанием растворённого кислорода, чтобы блокировать кормление, когда оно падает слишком низко. Назначаются **для каждого выключателя**. | | *(опционально)* Экземпляр **Telegram** | Официальный адаптер `telegram`, настроенный и запущенный, если вы хотите получать push-уведомления. | | Доступ в интернет на хосте ioBroker | Только для поиска адреса/карты в конфигурации. Обычная работа происходит офлайн. | --- ## 3. Установка 1. В ioBroker-**admin** открыть вкладку **Адаптеры**. 2. Найти **automatic-feeder** в списке адаптеров и нажать **Установить**. 3. Создать **экземпляр** адаптера. 4. Открыть настройки экземпляра (значок шестерёнки) — должна появиться страница конфигурации с вкладкой **Основные настройки** (Grundeinstellungen). Если она остаётся пустой, см. [Устранение неполадок](#9-устранение-неполадок-и-faq). --- ## 4. Быстрый старт – первое кормление Цель: один выключатель должен — сразу, для проверки — кормить в течение 5 секунд. 1. **Открыть настройки** экземпляра automatic-feeder. 2. На вкладке **Основные настройки** (Grundeinstellungen): * В разделе **Местоположение** оставить *Перенять системные настройки*, если у вашего ioBroker уже есть координаты. Иначе выбрать *Задать местоположение вручную*, ввести адрес, нажать **Искать** и подтвердить маркер на карте. * Прокрутить вниз к разделу **Выключатели** и нажать **Добавить выключатель**. * Задать **имя** (например, `Koi-Teich`). Это имя становится заголовком отдельной вкладки. * Рядом с **Объект-выключатель** нажать значок списка и выбрать точку данных, которая переключает вашу кормушку (например, вашу розетку). Выключатель должен быть **активным** (галочка слева). 3. **Сохранить** (дискета/галочка внизу). Появится новая вкладка с именем вашего выключателя. 4. Открыть эту **вкладку выключателя**. В самом верху, в разделе **Ручное кормление**, установить длительность (например, `5` секунд) и нажать **Покормить сейчас**. Выход должен включиться на 5 секунд, а затем снова выключиться. 5. На той же вкладке настроить настоящее расписание в разделе **План кормления** (например, фиксированное время 08:00 и 18:00) и задать **длительность кормления** в разделе **Процесс кормления**, затем **Сохранить**. Готово — с этого момента адаптер кормит автоматически. Всё остальное подробно объясняет параметры. --- ## 5. Страница настроек в деталях Конфигурация имеет вкладку **Основные настройки** (Grundeinstellungen), а также **по одной вкладке на каждый выключатель** (создаётся автоматически, как только у выключателя появляется имя). Если страница не прокручивается, увеличьте окно или воспользуйтесь полосой прокрутки справа — все разделы доступны. ### 5.1 Вкладка «Основные настройки» (Grundeinstellungen) #### Местоположение (обязательно) Адаптеру нужна ваша географическая позиция, чтобы рассчитать восход и заход солнца (для ночной блокировки). Есть два способа: * **Перенять системные настройки** — берёт широту/долготу из системной конфигурации ioBroker (рекомендуется, если они там уже заданы). Текущие значения отображаются. * **Задать местоположение вручную** — определить позицию самостоятельно: * Ввести **адрес** и нажать **Искать**. Адаптер разрешит его (через OpenStreetMap / Nominatim) и поставит маркер. * Или **кликнуть по карте** / **перетащить маркер**, чтобы выбрать точное место. * Широту/долготу можно также ввести напрямую; карта последует за ними. > Поиск адреса выполняется в бэкенде адаптера, поэтому **экземпляр должен работать**. Карта и > поиск требуют доступа в интернет. #### Солнечное окно (нет кормления ночью) Задаёт временное окно, в течение которого разрешено кормление: * **Минут после восхода солнца** — кормить только спустя столько минут *после* восхода. * **Минут до заката солнца** — прекращать за столько минут *до* заката. Пример: при восходе в 06:30, закате в 21:00 и смещениях 30 / 30 кормление разрешено только между **07:00 и 20:30**. Каждый выключатель может учитывать это окно по отдельности или игнорировать его (см. *Ограничения* на вкладке выключателя). Рассчитанные значения находятся также в точках данных `sunrise` / `sunset` и каждую ночь автоматически пересчитываются. #### Выключатели Список кормушек (до 5). Для каждой записи: * **Активен** (галочка) — планируются только активные выключатели. * **Имя** — произвольный текст; становится заголовком вкладки выключателя и именем канала в дереве объектов. * **Объект-выключатель** — существующая точка данных ioBroker, которой управляют. Выбирается через значок списка, очищается через крестик. Кнопкой **Добавить выключатель** вы создаёте ещё один (макс. 5), значком корзины — удаляете. При удалении удаляются и его точки данных. ### 5.2 Вкладки выключателей Каждый сконфигурированный выключатель получает собственную вкладку со своим именем. Она содержит следующие разделы. #### Ручное кормление * **Длительность ручного кормления (секунды)** — длительность, используемая кнопкой. * **Покормить сейчас** — немедленно запускает кормление с этой длительностью. Удобно для проверки или для дополнительной порции. (Игнорируются ли блокировки, зависит от *Ручной запуск игнорирует все блокировки* в разделе *Ограничения*.) * Для кнопки экземпляр должен работать, а конфигурация быть **сохранена**. #### План кормления Выбрать **один** режим: * **Фиксированное время** — список значений времени (`HH:mm`). Добавить можно любое количество; автомат срабатывает ежедневно в каждое из них. Пример: `08:00` и `18:00`. * **Интервал внутри периода** — повторять кормление внутри окна: * **Начало периода** / **Конец периода** — например, с 08:00 до 18:00. * **Интервал (минуты)** — например, 60 → кормит ежедневно в 08:00, 09:00, … до конца окна. Ближайшее запланированное время в любой момент находится в точке данных `status.nextFeeding`. #### Процесс кормления * **Длительность кормления (секунды)** — как долго выход остаётся ВКЛ при запланированном кормлении. * **Значение ВКЛ** / **Значение ВЫКЛ** — значения, которые записываются в объект-выключатель. По умолчанию это `true` и `false`, что подходит большинству розеток/реле. Если ваше устройство ожидает числа или текст, введите здесь, например, `1` / `0` или `ON` / `OFF`. #### Источники температуры и кислорода Каждый выключатель (станция кормления) имеет **свои собственные** датчики — разные пруды/резервуары могут использовать разные объекты: * **Температура воздуха** — поставьте галочку и выберите точку данных с температурой воздуха этой станции. * **Температура воды** — поставьте галочку и выберите точку данных с температурой воды этой станции. * **Кислород (O₂)** — поставьте галочку и выберите точку данных с содержанием растворённого кислорода. Имеют смысл только числовые точки данных. Текущие значения отражаются в точках данных этого выключателя `status.airTemperature`, `status.waterTemperature` и `status.oxygen`. Пороги задаются ниже (*Блокировка по температуре*), а температуры также управляют *Динамическим кормлением*. #### Блокировка по температуре Отображается только для источников температуры, активированных выше (*Источники температуры и кислорода*). Для каждого выключателя: * **Блокировать по температуре воды** — *Блокировать, если ниже* и/или *Блокировать, если выше* (°C). * **Блокировать по температуре воздуха** — то же самое для воздуха. Если текущая температура выходит за пределы разрешённого диапазона, кормление пропускается, а причина записывается в `status.blockReason`. (Если значение температуры неизвестно, этот источник не блокирует.) #### Ограничения * **Не кормить ночью** — учитывает солнечное окно (включая смещения). Отключить, если этому выключателю разрешено кормить круглосуточно. * **Ручной запуск игнорирует все блокировки** — если активно, кнопка и точка данных `feedNow` кормят даже при активной блокировке по температуре/ночи. #### Динамическое кормление Опционально: подстраивает **интервал и длительность кормления под температуру** по модели Q10 (обмен веществ примерно удваивается на каждые +10 °C). Требуется активный источник температуры; фиксированные времена заменяются интервалом внутри окна. * **Включение / источник** – включите и выберите температуру воды или воздуха. * **Опорная / Q10** – базовый интервал и длительность действуют при опорной температуре (например, 20 °C); Q10 обычно 2–2,5. * **Интервал / длительность (база, мин, макс)** – границы вычисляемого интервала (минуты) и длительности (секунды). **Базовый интервал и максимальный интервал должны быть больше 0**, иначе кормление не может быть запланировано. * **Окно усреднения / гистерезис** – скользящее среднее (например, 24 ч) сглаживает всплески; гистерезис предотвращает перепланирование при малых изменениях. Текущие значения доступны в `status.dynamicAvgTemperature`, `status.dynamicRate`, `status.dynamicIntervalMin` и `status.dynamicDurationSec`. Опциональный источник **кислорода (O₂)** может блокировать кормление при падении содержания кислорода ниже порога. Зимняя пауза имеет приоритет над динамическим кормлением. > Если динамическое кормление включено, но действительный интервал вычислить невозможно (базовый или максимальный интервал равен 0 либо задано недопустимое временное окно), ничего не планируется: `status.nextFeeding` остаётся пустым, а `status.blockReason` показывает подсказку. Задайте базовый интервал и максимальный интервал больше 0. #### Зимняя пауза Для каждого переключателя можно задать повторяющуюся **зимнюю паузу** (сезонную, в виде дат `ММ-ДД`, которые повторяются каждый год и могут переходить через Новый год). * **Включить зимнюю паузу** – включить паузу. * **Начало / Конец зимы** – выберите день и месяц из календаря (отображается как дд.мм), например с 01.11 по 15.03. * **Режим** – во время паузы либо **приостановить кормление**, кормить с **ограниченным** собственным интервалом, либо **один раз в день** в заданное время; действует отдельная **длительность кормления зимой**. * **Напоминания (Telegram)** – в дни перед началом и перед окончанием ежедневно (последний раз в сам день) в заданный час отправляется напоминание. Требуется экземпляр Telegram (см. ниже). Текущее состояние отображается в точке данных `status.winterActive`. После окончания паузы кормление возобновляется автоматически. #### Контроль переключения После переключения адаптер может проверить, **действительно ли** выключатель достиг состояний ВКЛ и ВЫКЛ, и сообщает по каждому кормлению один из трёх результатов: | Результат | Значение | Сообщение | |-----------|----------|-----------| | ✅ Успех | выключатель включился и выключился, как ожидалось | „Кормление запущено на x с." | | ❌ Включение не удалось | выключатель так и не подтвердил состояние ВКЛ | „Не удалось выполнить кормление. Проверьте переключатель!" | | ❌ Выключение не удалось | он включился, но не выключился снова | „Неисправность: кормушка не выключилась!" | > Сообщение отправляется на установленном системном языке ioBroker (по умолчанию английский). * **Проверять, действительно ли выключатель включается и выключается** — активирует контроль. * **Тайм-аут контроля (секунды)** — как долго ожидать подтверждения. * **Попытки проверки** — сколько проверок с интервалами выполняется перед сообщением о неисправности (по умолчанию 3). Каждая попытка дополнительно активно считывает текущее значение, поэтому задержка обратной связи (например, радио Homematic) больше не вызывает ложную ошибку. > **Важно:** контроль работает только в том случае, если выключатель **возвращает своё > фактическое состояние**, т. е. целевой объект обновляется с `ack=true` (типично для > розеток/реле с обратной связью по статусу). Простой вспомогательный булев, который никто не > подтверждает, всегда сообщал бы о неисправности — тогда отключите контроль для этого > выключателя. Результат также находится в точках данных `status.lastResult` (текст) и `status.error` (boolean), так что вы можете на него реагировать (например, запускать собственное уведомление). #### Уведомления Telegram Отправляет сообщения контроля переключения в Telegram — настраивается **для каждого выключателя**: * **Экземпляр Telegram** — выбрать один из установленных экземпляров `telegram.*` (или *Нет*, чтобы отключить Telegram для этого выключателя). Если ни один не установлен, поле укажет на это. * **Получатель Telegram (опционально)** — определённое имя пользователя/чата, как настроено в адаптере telegram; оставить пустым, чтобы отправлять всем настроенным получателям. * **Флажки** — выбрать, какие сообщения отправлять: успешное кормление, кормление невозможно и/или неисправность выключения. **Напоминания о зимней паузе** (если включены, см. *Зимняя пауза*) отправляются в тот же экземпляр Telegram, независимо от этих флажков контроля. Полная настройка описана в разделе [Уведомления Telegram](#8-уведомления-telegram). --- ## 6. Объекты / точки данных Адаптер создаёт следующие точки данных в своём пространстве имён (`automatic-feeder..`). **Глобальные** | Точка данных | Тип | Значение | |--------------|-----|----------| | `info.connection` | boolean (ro) | Адаптер работает и конфигурация действительна. | | `sunrise` / `sunset` | string (ro) | Рассчитанный восход/заход солнца на сегодня. | **На каждый выключатель в `switches..`** (`` — это внутренний ID вроде `sw-0`) Прямо под выключателем находятся ручной триггер и две подгруппы: * **`status`** (`switches..status.*`) — доступные только для чтения точки данных состояния, перечисленные ниже. * **`settings`** (`switches..settings.*`) — **редактируемое** отражение конфигурации этого выключателя. Запись нового значения туда (из VIS или скрипта) изменяет конфигурацию и перезапускает экземпляр, чтобы изменение вступило в силу. Некоторые производные поля доступны только для чтения (например, `winterWindow`). | Точка данных | Тип | Значение | |--------------|-----|----------| | `feedNow` | boolean (rw) | Записать `true`, чтобы покормить вручную. | | `status.feedingActive` | boolean (ro) | Прямо сейчас идёт кормление. | | `status.lastFeeding` | string (ro) | Момент последнего кормления. | | `status.nextFeeding` | string (ro) | Момент следующего запланированного кормления. | | `status.blocked` | boolean (ro) | Последняя попытка была заблокирована. | | `status.blockReason` | string (ro) | Причина блокировки (ночь/температура/кислород). | | `status.lastResult` | string (ro) | Текст результата последней попытки кормления. | | `status.error` | boolean (ro) | У последней попытки была неисправность переключения. | | `status.winterActive` | boolean (ro) | Зимняя пауза сейчас активна. | | `status.winterLastStartReminder` | string (ro) | Дата последнего отправленного напоминания «начинается зима». | | `status.winterLastEndReminder` | string (ro) | Дата последнего отправленного напоминания «зима заканчивается». | | `status.dynamicAvgTemperature` | number (ro) | Усреднённая температура, используемая динамическим кормлением. | | `status.dynamicRate` | number (ro) | Коэффициент Q10, применяемый динамическим кормлением в данный момент. | | `status.dynamicIntervalMin` | number (ro) | Текущий вычисленный динамический интервал (минуты). | | `status.dynamicDurationSec` | number (ro) | Текущая вычисленная динамическая длительность (секунды). | | `status.airTemperature` | number (ro) | Значение собственного источника температуры воздуха этого выключателя. | | `status.waterTemperature` | number (ro) | Значение собственного источника температуры воды этого выключателя. | | `status.oxygen` | number (ro) | Значение собственного источника растворённого кислорода этого выключателя. | Эти точки данных можно использовать в VIS, скриптах или других адаптерах — например, показывать `status.nextFeeding` на дашборде или запускать собственный сигнал тревоги при `status.error = true`. --- ## 7. Примеры / рецепты **Пруд с кои, дважды в день, только при достаточном тепле** * Режим *Фиксированное время* → `08:00`, `18:00`; длительность `6` с. * На вкладке выключателя, в разделе *Источники температуры и кислорода*, активировать *Температуру воды* и выбрать датчик; затем *Блокировать по температуре воды* → *Блокировать, если ниже* `8` °C (нет кормления при слишком холодной воде). * *Не кормить ночью* включить. **Вольер, частые маленькие порции в течение дня** * Режим *Интервал внутри периода* → 07:00–19:00, интервал `90` мин; длительность `3` с. **Пруд с кои, с подстройкой под температуру (динамическое кормление)** * На вкладке выключателя, в разделе *Источники температуры и кислорода*, активировать *Температуру воды* и выбрать датчик. * Затем открыть *Динамическое кормление*, включить его, источник *Температура воды*. * Опорная `20` °C, Q10 `2.2`, базовый интервал `60` мин (мин `30`, макс `480`), базовая длительность `5` с (мин `2`, макс `15`). Тогда при тепле кормит чаще и немного больше, а при холоде — меньше. **Зимний перерыв для пруда** * На вкладке выключателя открыть *Зимняя пауза*, включить её, задать *Начало зимы* `01.11` и *Конец зимы* `15.03`, режим *Приостановить кормление*. * При желании отметить напоминания, чтобы получать сообщение в Telegram за несколько дней до начала/окончания. **Ручная дополнительная порция кнопкой VIS** * Создать в VIS кнопку, которая записывает `true` в `automatic-feeder.0.switches.sw-0.feedNow`. * При желании активировать *Ручной запуск игнорирует все блокировки*, чтобы кормление происходило всегда. --- ## 8. Уведомления Telegram 1. Установить и настроить адаптер **telegram** (создать бота через @BotFather, ввести токен, начать чат с ботом). Экземпляр Telegram должен **работать**. 2. В **вкладке выключателя** automatic-feeder открыть раздел **Уведомления Telegram**: * Выбрать **экземпляр Telegram** в выпадающем списке (например, `telegram.0`). * При желании указать **получателя** (имя пользователя/чата, отображаемое в адаптере telegram); оставить пустым, чтобы уведомлять всех. * Отметить нужные сообщения: *успешное кормление*, *невозможно выполнить*, *неисправность выключения*. 3. Сохранить. С этого момента выбранные результаты контроля отправляются в Telegram (с именем выключателя в начале). Условие — чтобы *Контроль переключения* был активирован для этого выключателя. 4. **Напоминания о зимней паузе** используют тот же экземпляр Telegram и того же получателя. Они управляются в разделе *Зимняя пауза* (за сколько дней до начала/окончания и в какой час отправлять) и **не** требуют, чтобы контроль был включён. --- ## 9. Устранение неполадок и FAQ **Страница настроек пустая / белая.** Перезагрузить браузер с помощью **Strg+Shift+R**. Если это не помогает, перезапустить экземпляр и снова открыть настройки. **Новый значок / изменение не появляется.** Кэш браузера. Жёстко перезагрузить страницу (**Strg+Shift+R**). **Кормление вообще не происходит.** Проверить по порядку: выключатель **Активен**; выбран **объект-выключатель**; **расписание** действительно (`status.nextFeeding` показывает время); нет **блокировки** (посмотреть `status.blocked` / `status.blockReason`); **солнечное окно** не исключает это время; установить **уровень логирования** экземпляра на `debug` и наблюдать за журналом. **Никогда не происходит кормление ночью, хотя я этого хочу.** Либо отключить *Не кормить ночью* для этого выключателя, либо настроить солнечные смещения. Без действительных координат ночная блокировка отключена (и в журнал записывается предупреждение). **Контроль всегда сообщает о неисправности.** Ваш объект-выключатель, вероятно, не возвращает своё фактическое состояние (`ack=true`). Либо использовать выключатель с обратной связью по статусу, либо отключить *Контроль переключения* для этого выключателя. **Динамическое кормление ничего не меняет.** Убедитесь, что выбранный источник температуры (вода или воздух) активирован на вкладке выключателя (*Источники температуры и кислорода*) и передаёт значения. Сразу после перезапуска скользящее среднее ещё наполняется, поэтому расчёт начинается с базовых значений. Следите за `status.dynamicAvgTemperature` и `status.dynamicIntervalMin`. **Динамическое кормление включено, но кормление никогда не происходит (`status.nextFeeding` пуст).** **Базовый интервал или максимальный интервал равен 0** (или временное окно недопустимо), поэтому интервал невозможно вычислить — тогда `status.blockReason` показывает подсказку. Задайте базовый интервал и максимальный интервал больше 0 (и действительное окно). Примечание: если оставить *и* минимальный, *и* максимальный интервал равными 0, результат также принудительно становится 0. **Ничего не кормится, хотя сейчас не зима (или кормит, хотя должно быть на паузе).** Проверьте даты *Зимней паузы* (`Начало зимы` / `Конец зимы`, формат дд.мм) и режим. Точка данных `status.winterActive` показывает, активна ли пауза в данный момент. **Поиск адреса говорит, что экземпляр должен работать.** Запустить экземпляр automatic-feeder — геокодирование выполняется в бэкенде. **Сообщения Telegram не приходят.** Выбран ли на вкладке выключателя экземпляр Telegram? Настроен ли и запущен ли адаптер telegram? Отмечен ли хотя бы один тип сообщений и активирован ли *Контроль переключения*? --- ## 10. Логирование и поиск ошибок Адаптер ведёт журнал на обычных уровнях ioBroker. Для подробных сообщений повысьте уровень логирования экземпляра (Экземпляры → automatic-feeder.x → Уровень логирования) до **debug** или **silly**: * **error** — ошибки, требующие внимания (например, не удалось записать в выключатель). * **warn** — ошибка конфигурации (нет координат, недействительное расписание …). * **info** — вехи (запуск, выполнено или заблокировано кормление, ручной запуск). * **debug** — подробный ход (решения планирования, обновления температуры, геокодирование, значения ВКЛ/ВЫКЛ, верификация подтверждена/тайм-аут). * **silly** — очень подробная трассировка (каждый таймер, каждая проверка блокировки, каждое изменение состояния). --- 📖 [Основная документация (английский)](../../README.md)