 # 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.