Автоматическая кормушка

Автоматическая кормушка по расписанию: включает существующий объект ioBroker на заданное время, с ограничениями по температуре и дню/ночи.

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


🔌 Соответствующее оборудование - плата таймера Feeder-Relais > > Собираете фидер и предпочитаете использовать готовую плату таймера, а не самостоятельно подключать реле? Обратите внимание на Feeder-Relais (Timer-Ersatzplatine) - самодельная плата таймера для ESP32, идеально сочетающаяся с этим адаптером ([онлайн-обзор]](https://ssbingo.github.io/timer-ersatzplatine/)).

Это отдельный, автономный проект - независимый от адаптера. Плата и этот адаптер соответствуют друг другу, но они полностью независимы: адаптер полностью работает без платы, а плата работает без адаптера.


Адаптер автоматической подачи данных для ioBroker

Этот адаптер превращает любой существующий выключатель ioBroker (умную розетку, реле, выход GPIO и т. д.) в автоматический податчик с заданным расписанием. Он включает выход на определенное количество секунд в настроенное вами время и может учитывать температуру и цикл день/ночь, поэтому подача электроэнергии никогда не происходит в неподходящий момент.

Этот документ представляет собой полное руководство. Если вы никогда раньше не использовали адаптер, прочтите его от начала до конца - раздел «Быстрый старт» позволит вам начать первое кормление за несколько минут, а остальная часть подробно описывает все доступные опции.

🇩🇪 Deutsche Anleitung: doc/de/README.md · другие языки: см. > Документация внизу.


Оглавление

  1. Требования
  2. Установка
  3. [Подробное описание страницы настроек](#5-Подробное описание страницы настроек)
  4. Примеры / рецепты
  5. [Устранение неполадок и часто задаваемые вопросы](#9-устранение неполадок--FAQ)

1. Для чего нужен адаптер

Процесс "кормления" прост: включить выход → подождать заданное количество секунд → снова выключить. В случае переоборудованной кормушки работающий двигатель в течение этих секунд выдает корм.

Адаптер может управлять до 5 коммутаторами, каждый из которых полностью независим и имеет собственную вкладку конфигурации, названную в честь коммутатора. Для каждого коммутатора вы сами выбираете конфигурацию:

  • когда его кормят - либо в фиксированное время (например, с 08:00 до 18:00), либо с интервалом.

в пределах определенного временного окна (например, каждые 60 минут в период с 08:00 до 18:00);

  • Как долго работает выход (продолжительность подачи в секундах);
  • следует ли блокировать кормление, если температура воды или воздуха слишком низкая/высокая;
  • следует ли ограничивать подачу сигнала только астрономическим дневным окном (восход/закат с возможностью выбора времени включения/выключения).

смещения (от системного, общего или индивидуального местоположения коммутатора);

  • следует ли контролировать работу выключателя (проверять, действительно ли он включен и выключен) и, при необходимости,

Отправьте сообщение в Telegram о результате;

  • Следует ли сократить или приостановить кормление во время повторяющегося зимнего сезона - по желанию с

Напоминания в Telegram перед началом и окончанием мероприятия;

  • следует ли автоматически адаптировать интервал и размер порции к температуре воды/воздуха

(динамическая подача корма, модель Q10);

  • следует ли блокировать кормление, если содержание растворенного кислорода (O₂) слишком низкое;
  • до 3 разовых перерывов в кормлении (абсолютные временные рамки, например, карантин после

пополнение запасов) с сообщением в Telegram в начале и в конце каждого;

  • Главный переключатель паузы (Приостановить кормление), который мгновенно приостанавливает все кормления.

Для переключателя, пока вы его снова не выключите, с сообщением Telegram на каждом переключателе.

Вы также можете запустить подачу данных вручную в любое время - со страницы настроек адаптера (кнопка с возможностью выбора продолжительности) или из точки данных (например, кнопка в окне VIS).

В качестве опции адаптер интегрирует плату реле Automatic-Feeder (ESP32 с тремя кнопками таймера и собственным веб-интерфейсом). Вы сами решаете, использовать ли такую плату для каждого выключателя; при включении этой функции для выключателя в общих настройках, у этого выключателя появляется вкладка Relay, где вы можете установить сетевой адрес платы, проверить соединение и настроить время подачи сигнала тремя кнопками (S1-S3) непосредственно с адаптера.

Важно: адаптер никогда не создает сам коммутатор. Он управляет объектом, который уже > существует в вашей системе ioBroker. Вы выбираете этот объект в конфигурации.


2. Требования

Вам необходимоПодробности
ioBroker с admin ≥ 7.8.23, js-controller ≥ 6.0.11 и Node.js ≥ 22Требуемые минимальные версии. Страница конфигурации построена на React 19.
Объект переключателяЛюбое записываемое состояние ioBroker, которое включает/выключает ваш фидер - например, умная розетка (shelly.0.…, sonoff.0.…, zigbee.0.…), реле, переменная скрипта.
(необязательно) ГеокоординатыИспользуются для расчета времени восхода/захода солнца для астрономического окна каждого коммутатора. Требуются только в том случае, если коммутатор использует это окно; берутся из системных настроек ioBroker, одной общей позиции или настраиваются для каждого коммутатора отдельно.
(необязательно) Температурные объектыСуществующие состояния с температурой воздуха и/или воды для блокировки температуры или динамической подачи. Назначаются для каждого переключателя на вкладке переключателей.
(необязательно) Экземпляр TelegramОфициальный адаптер telegram, настроенный и работающий, если вам нужны push-уведомления.
(необязательно) Экземпляр TelegramОфициальный адаптер telegram, настроенный и работающий, если вам нужны push-уведомления.
Доступ к интернету на хосте ioBrokerТолько для поиска адреса/карты в конфигурации. В обычном режиме работает в автономном режиме.

3. Установка

  1. В административной панели ioBroker откройте вкладку «Адаптеры».
  2. Найдите automatic-feeder в списке и нажмите Установить.
  3. Создайте экземпляр адаптера.
  4. Откройте настройки экземпляра (значок шестеренки) - вы должны увидеть страницу конфигурации с

Вкладка Общие настройки. Если она остается пустой, см. Поиск неисправностей.


4. Быстрый старт - ваше первое кормление

Цель: прямо сейчас включить один переключатель на 5 секунд, чтобы доказать, что всё работает.

  1. Откройте настройки экземпляра автоматической кормушки.
  2. На вкладке Общие настройки:
  • В разделе Местоположение оставьте выбранным параметр Использовать системные настройки для всех переключателей (актуально только если

(позже вы включите астрономическое окно). Вы также можете выбрать общее местоположение или настроить его для каждого переключателя отдельно.

  • Прокрутите вниз до раздела Переключатели и нажмите Добавить переключатель.
  • Присвойте ему имя (например, «Пруд с карпами кои»). Это имя станет заголовком отдельной вкладки.
  • Щелкните значок списка рядом с Переключить объект и выберите состояние, которое переключает ваш объект.

питающий кабель (например, ваша умная розетка). Убедитесь, что выключатель активен (флажок слева).

  1. Сохранить (значок диска/галочка внизу). Откроется новая вкладка, названная в честь вашей консоли.
  2. Откройте вкладку переключателя. Вверху, в разделе Ручная подача, установите продолжительность (например, 5).

секунд) и нажмите Загрузить сейчас. Выход должен включиться на 5 секунд и снова выключиться.

  1. Оставаясь на вкладке «Переключатели», настройте фактическое расписание в разделе Расписание кормления (например, фиксированное).

укажите время 08:00 и 18:00) и продолжительность кормления в разделе Действия с кормлением, затем Сохранить.

Вот и всё - адаптер теперь будет работать автоматически. Ниже подробно описаны все доступные опции.


5. Страница настроек подробно

В настройках есть вкладка Общие настройки, а также по одной вкладке для каждого переключателя (создается автоматически после присвоения переключателю имени). Если страница не прокручивается, увеличьте окно, перетащив его, или используйте полосу прокрутки справа - все разделы будут доступны.

5.1 Вкладка «Общие настройки»

Местоположение (для астрономического окна)

Местоположение используется для расчета времени восхода/захода солнца для астрономического окна приема сигнала, которое можно включить для каждого выключателя (см. Ограничения на вкладке «Выключатели»). Оно необходимо только в том случае, если хотя бы один выключатель использует это окно. Три варианта:

  • Использовать системные настройки для всех переключателей - широта/долгота берется из системы ioBroker.

Настройки (рекомендуется, если они уже заданы). Отображаются текущие значения.

  • Одно общее местоположение для всех переключателей - задайте одно положение, которое будут использовать все переключатели:

  • Введите адрес и нажмите Поиск. Адаптер найдет его (через OpenStreetMap /

    Nominatim) и ставит маркер.

  • Или щёлкните по карте / перетащите маркер в нужное место.

  • Широту/долготу также можно ввести напрямую; карта отобразится ниже.

  • Настройте местоположение индивидуально для каждого коммутатора - каждый коммутатор определяет свое собственное местоположение на

Отдельная вкладка (полезно, когда кормушки, например, пруды, находятся в разных местах).

Поиск адресов выполняется в бэкенде адаптера, поэтому для этого экземпляр должен быть запущен.

Для отображения фрагментов карты и поиска требуется доступ в интернет.

Смещение времени восхода/захода солнца настраивается для каждого выключателя (в разделе Ограничения), а рассчитанное время публикуется для каждого выключателя как status.sunrise / status.sunset и пересчитывается автоматически каждую ночь.

Переключатели

Список кормушек (до 5). Для каждой записи:

  • Активно (флажок) - запланированы только активные коммутаторы.
  • Имя - произвольный текст; становится заголовком вкладки переключателя и именем канала в дереве объектов.
  • Объект переключения - текущее состояние ioBroker для управления. Используйте значок списка для просмотра или

Крест нужно убрать.

Используйте кнопку Добавить переключатель, чтобы создать еще один (максимум 5), и значок корзины, чтобы удалить существующий. Удаление переключателя также удаляет его точки данных.

  • Этот переключатель использует плату реле автоматической подачи электроэнергии (переключатель для каждого переключателя) - включайте только его.

для коммутатора, станция питания которого использует дополнительную плату реле автоматического питания (ESP32). Включенный коммутатор получает дополнительную вкладку Реле (см. 5.4).

5.2 Вкладка «Список лент»

Централизованный, поддерживаемый пользователем список типов продуктов питания, доступный для всех пользователей, выбравших данный канал. Для каждого введенного вами продукта:

  • Название корма и поставщик/дилер,
  • Размер гранул (мм),
  • четыре стандартных пищевых значения из аналитических компонентов производителя - **сырой

белок / жир / клетчатка / зола (%)**,

  • Дополнительная ссылка на предложение/покупку (скрытое поле, которое отображается при нажатии кнопки ссылки) для повторного заказа онлайн.

Добавьте столько лент, сколько хотите, с помощью кнопки Добавить ленту, и удалите их с помощью значка корзины. Список хранится централизованно и также публикуется в формате JSON в info.feeds для виджетов VIS. В каждой вкладке переключения вы затем выбираете в разделе Текущая загруженная лента, какая из этих лент в данный момент загружена в этот фидер - ее название, размер и содержание отображаются как status.activeFeed* и могут быть переключены также из виджета VIS.

5.3 Переключить вкладки

Для каждого настроенного переключателя создается отдельная вкладка, озаглавленная его именем. Она содержит следующие разделы.

Ручная подача

  • Продолжительность ручной подачи (в секундах) - время, в течение которого нажимается кнопка.
  • Начать кормление - запускает кормление немедленно в течение указанного времени. Полезно для тестирования или

Дополнительная порция. (Игнорирует ли это блоки, зависит от параметра Ручной триггер игнорирует все блоки в разделе Ограничения.)

  • Для корректной работы кнопки необходимо, чтобы экземпляр был запущен, а конфигурация сохранена.

График кормления

Выберите один режим:

  • Фиксированное время - список временных интервалов (ЧЧ:мм). Добавьте столько, сколько хотите; подача данных продолжается.

каждый из них ежедневно. Пример: 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.waterTemperatureDeep, status.oxygenstatus.waterStratification = от мелкого к глубокому уровню). Пороговые значения установлены ниже (Температурная блокировка), а температура также управляет динамической подачей.

Блокировка температуры

Отображается только для включенных вами выше источников температуры (Источники температуры и кислорода). Для каждого переключателя можно выполнить следующие действия:

  • Блокировка по температуре воды - установите Блокировка, если ниже и/или Блокировка, если выше (°C).
  • Блокировка по температуре воздуха - то же самое, для воздуха.

Если текущая температура выходит за пределы допустимого диапазона, подача пропускается, и причина записывается в status.blockReason. (Если значение температуры неизвестно, этот источник не блокируется.)

Качество воды (аммиак / нитриты)

При желании переключатель отслеживает содержание аммиака (NH₃/NH₄) и/или нитритов (NO₂) в воде - «если эти значения повышаются, уменьшайте подачу корма» (из руководства по эксплуатации кормушки). Назначьте каждому параметру существующее состояние и включите функцию «Блокировать/уменьшить подачу корма при плохом качестве воды». Для каждого вещества установите два пороговых значения:

  • Снижение выше - когда значение достигает или превышает этот пороговый уровень предупреждения, **суточная сумма составляет

уменьшено** до настраиваемого процента (Уменьшить суточную норму до (%)). Это действует только в режиме контроля количества корма (в фиксированном/динамическом режимах нет значения для уменьшения).

  • Блокировка выше - когда значение превышает этот максимум, подача полностью блокируется.

В каждом режиме (например, в блоках температуры/кислорода) причина записывается в status.blockReason.

Чтобы отключить этот уровень, оставьте поле «Порог» пустым. Текущие значения отображаются в разделах status.ammonia и status.nitrite. Универсальных безопасных пределов нет (они зависят от pH и температуры) - в качестве ориентира, поддерживайте уровни аммиака и нитритов близкими к нулю и устанавливайте пороговые значения, используя свой собственный набор для тестирования.

Ограничения

  • Ограничьте кормление периодом астрономического дня (восход/закат + смещения) - когда кормление включено,

Подача данных ограничена дневным окном, вычисленным на основе местоположения этого переключателя. Для интервальной и динамической подачи данных это окно заменяет фиксированные начало/конец окна; для фиксированного времени оно действует как дневной/ночной ограничитель (время вне окна пропускается). При включении можно установить:

  • Минуты после восхода солнца - отсчет начинается через указанное количество минут после восхода солнца (по умолчанию 0).
  • Минуты до захода солнца - остановиться за это количество минут до захода солнца (по умолчанию 0).
  • Расположение этого переключателя - отображается только в том случае, если для общего Расположение установлено значение индивидуальное:

Выберите Использовать системные настройки или Указать конкретное местоположение (поиск адреса + карта) для этого переключателя. Вычисленное время отображается в status.sunrise / status.sunset.

  • Ручной запуск игнорирует все блоки - при включении кнопки ручного запуска и функции feedNow /

feedFor Данные поступают даже при активном блоке температуры/окна.

Динамическая подача

Дополнительно: адаптируйте интервал и продолжительность кормления к температуре, используя модель Q10 (метаболизм примерно удваивается на каждые +10 °C). Требуется активный источник температуры; фиксированные временные интервалы заменяются интервалом в пределах заданного диапазона.

  • Включить / источник - включите и выберите температуру воды или воздуха. При настройке второго (глубокого) датчика температуры воды, используемая здесь температура воды суммируется из обоих слоев в соответствии с выбранным режимом объединения (см. Источники температуры и кислорода).
  • Референтный интервал / Q10 - базовый интервал и продолжительность указаны для эталонной температуры (например, 20 °C); Q10 обычно составляет 2-2,5 (метаболизм примерно удваивается на каждые +10 °C - см. Динамическое кормление - фон и источники).
  • Интервал / длительность (базовый, мин, макс) - границы вычисляемого интервала (минуты) и длительности (секунды). Базовый интервал и максимальный интервал должны быть больше 0, в противном случае планирование кормления невозможно.
  • Окно усреднения / гистерезис - скользящее среднее (например, за 24 часа) сглаживает пики; гистерезис позволяет избежать перепланирования при незначительных изменениях.

Текущие значения указаны в разделах status.dynamicAvgTemperature, status.dynamicRate, status.dynamicIntervalMin и status.dynamicDurationSec. Дополнительный источник кислорода (O₂) может блокировать питание, когда содержание растворенного кислорода падает ниже порогового значения. Зимняя пауза имеет приоритет над динамическим питанием.

Если динамическая подача данных включена, но не удается вычислить допустимый интервал (базовый или максимальный интервал равен 0, или недопустимое временное окно), ничего не планируется: status.nextFeeding остается пустым, а status.blockReason отображает подсказку. Установите базовый интервал и максимальный интервал больше 0.

Модель расчета количества корма (рекомендации)

При желании адаптер может рассчитать рекомендуемое суточное количество корма для перехода на новый корм из рыбного поголовья и температуры воды в соответствии с инструкцией к кормушке: daily amount [g] = total fish weight × percentage(water temperature). Вам нужно ввести только количество рыб каждого размера (15/20/30/40/50/60 см) в небольшую таблицу со значком рыбы соответствующего размера; вес каждого размера является фиксированной оценкой из инструкции (60/125/350/1000/2000/4000 г). Также можно установить процент подачи воды для каждого температурного диапазона (по умолчанию 0 % ниже 15 °C, 1 % при 15-18 °C, 1,5 % при 18-21 °C, 2 % при 21-23 °C, 3 % при 23-28 °C, затем повторное регулирование при повышении температуры: 1,5 % при 28-30 °C и 0,5 % выше 30 °C - температурная реакция достигает пика в районе 24-26 °C и снижается выше этого значения). Для работы переключателя необходим источник температуры воды.

Это калькулятор сам по себе - он вычисляет и отображает рекомендации. Результаты публикуются в status.fishTotalWeight (г), status.feedPercentToday (%) и status.feedTargetGramsToday (г); на вкладке переключения дополнительно отображается расчетный общий вес и пример.

При желании вы можете использовать это количество для контроля кормления: включите Контроль кормления этим количеством, и рекомендуемое суточное количество граммов будет преобразовано во время работы двигателя и распределено между кормлениями в течение дня. Для этого вы калибруете скорость подачи (г/с) - небольшой помощник запускает двигатель на несколько секунд, чтобы вы могли взвесить выданный корм и позволить адаптеру рассчитать скорость - и можете установить дополнительный суточный максимум (г) в качестве защиты от перекармливания. Этот режим взаимоисключающий с динамическим (Q10) кормлением; "когда" (фиксированное время / интервал / астрономическое окно) и все блоки (ночь, температура, O₂, паузы, зима) остаются неизменными и сохраняют приоритет. Полученное время работы публикуется в status.feedTargetSecondsToday (с в сутки) и status.feedEffectiveDurationSec (с за кормление); продолжительность одного кормления ограничена в целях безопасности.

В данный момент в подающее устройство загружается корм, который выбирается каждым переключателем в разделе «Загруженный корм» из центрального списка кормов (см. 5.2). Его название, размер гранул и питательная ценность публикуются в status.activeFeed*, а также могут быть переключены с помощью виджета VIS через записываемое состояние settings.activeFeed (идентификатор корма). Скорость подачи (г/с) калибруется каждым переключателем (зависит от механики подающего устройства) независимо от того, какой корм загружен.

Зимняя пауза Для каждого переключателя можно задать повторяющуюся зимнюю паузу (сезонную, обозначаемую как MM-DD даты, которые повторяются каждый год и могут совпадать с Новым годом).

  • Включить зимнюю паузу - активируйте паузу.
  • Начало/конец зимы - выберите день и месяц из календаря (обозначаются как дд.мм), например, с 01.11 по 15.03.
  • Режим - во время паузы можно либо приостановить кормление, либо кормить с сокращенным интервалом, либо один раз в день в установленное время; для зимнего кормления применяется отдельный режим.
  • Напоминания (Telegram) - ежедневное напоминание отправляется за несколько дней до начала и до конца (последнее в сам день) в указанное время. Требуется экземпляр Telegram (см. ниже).

Текущее состояние отображается в точке данных status.winterActive. Подача возобновляется автоматически по окончании паузы.

Паузы в кормлении

Приостановить кормление сейчас (главный выключатель). В верхней части этого раздела находится единственный переключатель включения/выключения, позволяющий немедленно и на неопределенный срок приостановить все кормления для этого переключателя - он отменяет временные паузы, указанные ниже, и все режимы кормления (фиксированное время, интервальное, динамическое кормление, зимняя пауза). Выключите его снова, и кормление возобновится точно так, как было настроено ранее; ничего больше менять не нужно. Переключение отправляет сообщение Telegram (вкл / выкл). Типичное использование: спонтанное прерывание (лекарства, техническое обслуживание, обработка воды) без изменения расписания. Его можно редактировать на странице настроек и из VIS/scripts через settings.pauseNow, а его текущее состояние отображается в status.pauseManual.

Под главным выключателем можно запланировать до 3 разовых пауз для кормления на каждый выключатель, что позволяет установить абсолютные временные интервалы, в течение которых кормление полностью приостанавливается (более высокий приоритет, чем у любого другого режима кормления). Типичное использование: карантин после пополнения запасов, когда новых рыб не следует кормить некоторое время.

  • Пауза 1 / 2 / 3 - поставьте галочку, чтобы включить, затем выберите Начало и Конец (дата + время, отображаемые в формате ДД.ММ.ГГГГ ЧЧ:мм), например, с 15.07.2026 08:00 по 22.07.2026 18:00.
  • Кормление прекращается, пока сейчас находится в пределах разрешенной паузы, и автоматически возобновляется по ее окончании.
  • Сообщение в Telegram отправляется точно в начале и конце каждой паузы (требуется экземпляр Telegram, см. ниже). Если адаптер запускается во время активной паузы, отправляется только сообщение конца.
  • Редактируется на странице настроек и из VIS/scripts через состояния settings.* (например, settings.pause1Start).

Текущее состояние показано в status.pauseActive и status.pauseActiveUntil (главный выключатель также управляет status.pauseActive).

Переключение контроля

После переключения адаптер может убедиться, что переключатель действительно перешел в состояние «включено» и «выключено», и сообщить один из трех результатов для каждого кормления:

РезультатСмыслСообщение
✅ УспехПереключатель включен и выключен, как и ожидалось"Кормление запущено на x с."
❌ при сбоепереключатель так и не подтвердил состояние «ВКЛ»«Не удалось выполнить подачу питания. Проверьте переключатель!»
❌ Сбой выключенияОн включился, но больше не выключился"Неисправность: кормушка не выключилась!"

Сообщение отправляется на языке, настроенном в системе ioBroker (по умолчанию - английский).

  • Убедитесь, что переключатель действительно включается и выключается - это включает функцию контроля.
  • Время ожидания подтверждения (в секундах) - как долго ждать подтверждения.
  • Попытки проверки - сколько поэтапных повторных проверок следует выполнить перед сообщением о неисправности (по умолчанию 3). Каждая попытка также считывает текущее состояние, поэтому отложенная обратная связь о состоянии (например, радио Homematic) больше не приводит к ложной ошибке.

Важно: контроль работает только в том случае, если переключатель отправляет обратно свое реальное состояние, т.е. целевой объект обновляется значением ack=true (типично для умных розеток/реле с обратной связью о состоянии).

Обычная вспомогательная логическая переменная, которую никто не подтверждает, всегда будет сообщать о неисправности - в этом случае контроль для этого переключателя будет отключен.

Результат также сохраняется в точках данных status.lastResult (текст) и status.error (логическое значение), поэтому вы можете реагировать на него (например, запускать собственное уведомление).

Уведомления в Telegram

Отправляйте сообщения управления в Telegram - настройка для каждого коммутатора:

  • Язык сообщений - язык всех исходящих сообщений для этого коммутатора (Telegram, Sayit и т. д.).

(объявление о подаче данных): Системный язык (системный язык ioBroker) или определенный язык. Данные о состоянии не затрагиваются.

  • Экземпляр Telegram - выберите один из установленных экземпляров telegram.* (или None для

(Отключить Telegram для этого переключателя). Если Telegram не установлен, об этом будет сообщено в соответствующем поле.

  • Получатель Telegram (необязательно) - конкретное имя пользователя/чата, указанное в настройках Telegram.

адаптер; оставьте поле пустым, чтобы отправить всем указанным получателям.

  • Флажки - выберите, какие сообщения отправлять: успешное кормление, не удалось покормить и/или

Ошибка выключения.

Напоминания о зимней паузе (если включены, см. Зимняя пауза) отправляются в тот же экземпляр Telegram, независимо от этих флажков контроля.

Полную информацию о настройке см. в разделе Уведомления в Telegram.

Уведомления Sayit

Озвучивайте одни и те же сообщения через экземпляр Sayit (преобразование текста в речь), настраиваемый для каждого коммутатора, независимо от Telegram (оба сервиса могут быть активны одновременно):

  • Экземпляр Sayit - выберите один из установленных экземпляров sayit.* (или None, чтобы отключить Sayit)

(для этого выключателя). Если он не установлен, об этом будет указано в поле.

  • Громкость (0-100, необязательно) - уровень громкости речи для этого переключателя; оставьте это поле пустым, чтобы использовать

Собственный параметр по умолчанию для экземпляра Sayit.

  • Тестовое объявление - рядом с выбором экземпляра: произносит короткий тестовый текст через

Выберите нужный экземпляр, чтобы сразу проверить аудиовыход, не дожидаясь подачи сигнала.

  • Флажки - выберите, какие сообщения озвучить: успешное кормление, не удалось покормить и/или

Ошибка выключения (те же три, что и в Telegram, но выбранные здесь отдельно).

В озвученном тексте используется язык сообщений, выбранный в разделе Telegram выше.

Объявление о кормлении

Заранее объявите о предстоящей трансляции в настраиваемое время через Telegram и/или Sayit:

  • Предварительное оповещение о кормлении - включает оповещение.
  • Время подготовки (минуты) - за сколько времени до отправки объявления (например, 5).
  • Объявление через Telegram / Объявление через Sayit - канал(ы), используемый(ые) для объявления.

(Для каждого из них требуется настроить соответствующий экземпляр, описанный выше).

Объявление о кормлении планируется одновременно с каждым кормлением. Если в момент объявления кормление будет заблокировано или приостановлено (ночь, температура, уровень кислорода или пауза в кормлении), объявление пропускается, поэтому оно никогда не обещает кормление, которое не состоится. Ручное кормление (кнопка Накормить сейчас / feedFor) не имеет предварительного уведомления и не объявляется.

5.4 Вкладка релейной платы (опционально)

Эта вкладка появляется только тогда, когда в общих настройках коммутатора включен переключатель Этот коммутатор использует плату реле автоматической подачи (см. 5.1). Одна плата реле принадлежит одному коммутатору (станции подачи). Плата представляет собой ESP32 с тремя кнопками таймера (S1-S3) и собственным веб-интерфейсом, доступ к которому осуществляется через вашу сеть по порту 80. Адаптер конфигурирует плату, отображает ее состояние и - по умолчанию - запускает подачу через плату (см. Подача преимущественно через плату реле ниже), поэтому плата запускает собственный обратный отсчет, отображает его на своем дисплее и снова выключает реле.

Примечание: Плата реле автоматического податчика разрабатывается параллельно как отдельный проект.

Адаптер полностью работает и без неё - плата является дополнительным, удобным дополнением. Поскольку она > разрабатывается независимо, некоторые её детали могут изменяться независимо от адаптера.

  • Адрес платы (IP-адрес или адрес хоста mDNS) - например, 192.168.1.50 или feeder.local. Фиксированный IP-адрес - это

Наиболее надежный вариант; mDNS (.local) работает только в том случае, если ваша хост-система может его разрешить. Допускается суффикс :port, но обычно он не требуется (по умолчанию 80).

  • Подача сигнала осуществляется преимущественно через плату реле (в качестве запасного варианта: напрямую через Shelly) - включено по умолчанию. При включении,

Подача данных запускается через веб-интерфейс платы (POST /api/trigger) ровно на вычисленное время, поэтому сама плата запускает обратный отсчет, отображает его на своем OLED-дисплее и снова отключает реле. Только когда плата недоступна, адаптер переключается на прямое переключение целевого объекта (Shelly) - так же, как работают переключатели, не относящиеся к плате. Таким образом, дисплей и журнал платы всегда отражают реальную подачу данных. Отключите его, чтобы всегда переключать Shelly напрямую (старое поведение). Фактически используемый путь записывается в relay.lastTriggerPath (board/direct), добавляется к сообщению об успешном завершении и в журнал. Перед тем, как подача данных будет считаться завершенной, плата и** целевой объект проверяются, а предохранительный механизм принудительно отключает плату, если она не сможет выключиться самостоятельно.

  • Проверка соединения и времени выборки - один раз связывается с платой. Зеленый индикатор Подключено и

Хост/IP-адрес/прошивка платы подтверждают работоспособность соединения; затем время нажатия трех кнопок считывается с платы в поля ниже. Красный индикатор Не подключено показывает ошибку. Это также происходит автоматически при открытии вкладки (если указан адрес), поэтому состояние, обзор системы и время нажатия кнопок загружаются без щелчка мыши.

  • Время подачи кнопок (в секундах) - время подачи каждой кнопки S1, S2 и S3.

(1-600 с). Поскольку эти параметры также можно редактировать в собственном веб-интерфейсе платы, всегда сначала загружайте их, а затем корректируйте.

  • Сохранить время на доску - записывает три значения на доску.
  • Перезагрузка платы - перезапускает ESP32 через его API (POST /api/reboot). После подтверждения

После перезагрузки плата на несколько секунд отключается, а затем автоматически возвращается в рабочее состояние.

В нижней части вкладки Обзор системы отображает текущие системные данные платы после успешной проверки соединения (кнопка Проверить соединение и получить время): версия и сборка прошивки, имя хоста, IP-адрес, сеть Wi-Fi, уровень сигнала (дБм), MAC-адрес, время работы, свободная память и причина последнего сброса (отображается простыми словами, например, «Программное обеспечение»).

Соединение также отражается в дереве объектов и обновляется каждые 60 секунд - см. точки данных relay.* в раздел 6.


6. Объекты / точки данных

Примечание: Все временные метки отображаются в локальном часовом поясе системы (формат DD.MM.YYYY HH:MM:SS, например, 01.07.2026 16:20:00). Для VIS и скриптов каждая временная метка дополнительно имеет числовой аналог, заканчивающийся на …Ts (время Unix в миллисекундах, 0 = отсутствует) - идеально подходит для обратных отсчетов и временных полос без какого-либо анализа строк и независимо от формата отображения.

Адаптер создает следующие состояния в своем пространстве имен (automatic-feeder.<instance>.).

Глобальный

Точка данныхТипЗначение
info.connectionлогическое значение (ro)Адаптер запущен, и конфигурация действительна.
info.feedsstring (ro)Центральный список фидов в формате JSON (каждый тип корма с названием, поставщиком, размером гранул, пищевой ценностью и ссылкой на предложение) - для визуализации/виджетов, позволяющих отображать список без чтения конфигурации экземпляра.

Для каждого переключателя, в разделе switches.<id>. (<id> - это внутренний идентификатор, как sw-0)

Непосредственно под переключателем находится ручной триггер и два дополнительных канала:

  • status (switches.<id>.status.*) - указанные ниже данные о состоянии, доступные только для чтения.
  • настройки (switches.<id>.settings.*) - редактируемое зеркальное отображение настроек этого переключателя

Конфигурация. Запись нового значения (из VIS или скрипта) изменяет конфигурацию и перезапускает экземпляр, так что изменения вступают в силу. Некоторые производные поля доступны только для чтения (например, winterWindow).

  • реле (switches.<id>.relay.*) - присутствует только в том случае, если этот переключатель использует релейную плату;

Данные о состоянии платы реле, доступные только для чтения, перечислены в конце таблицы.

Точка данныхТипЗначение
feedNowлогическое значение (чтение/запись)Напишите true, чтобы запустить ручную подачу.
status.feedingActiveлогическое значение (ro)Прямо сейчас идёт кормление.
status.feedingEndsTsчисло (ro)Конец текущей подачи данных в формате времени Unix в миллисекундах (0 = подача данных прекращена) - для обратного отсчета в реальном времени (например, 15 → 0 с) в VIS.
status.feedingDurationSecчисло (ro)Общая продолжительность работающей подачи в секундах (0 = не подача) - позволяет виджету VIS отображать точное кольцо прогресса рядом с обратным отсчетом.
status.lastFeedingстрока (ro)Временная метка последнего кормления.
status.lastFeedingTsномер (ro)Время последнего кормления в миллисекундах (0 = пока нет).
status.nextFeedingстрока (ro)Временная метка следующего запланированного кормления.
status.nextFeedingTsномер (ro)Следующая запланированная подача корма в миллисекундах по времени Unix (0 = ничего не запланировано).
status.blockedлогическое значение (ro)Последняя попытка была заблокирована.
status.blockReasonстрока (ro)Причина блокировки (ночь / температура / кислород), на языке системы.
status.blockReasonCodeстрока (ro)Причина блокировки в виде стабильного машиночитаемого кода (например, blockNight, blockWaterBelow, blockPauseManual; пусто = не заблокировано) - для логики значков/цветов в VIS, независимо от языка.
status.lastResultстрока (ro)Текст результата последней попытки кормления.
status.errorлогическое значение (ro)Последняя попытка завершилась ошибкой переключения.
status.winterActiveлогическое значение (ro)В настоящее время действует зимняя пауза.
status.winterLastStartReminderстрока (ro)Дата последнего отправленного напоминания о начале зимы.
status.winterLastEndReminderстрока (ro)Дата последнего отправленного напоминания о "конце зимы".
status.pauseManualлогическое значение (ro)Ручная пауза (Приостановить подачу сейчас / settings.pauseNow) включена.
status.pauseActiveлогическое значение (ro)В данный момент действует однократная пауза в кормлении.
status.pauseActiveUntilстрока (ro)Конец текущей активной паузы подачи (пусто, если паузы нет).
status.pauseActiveUntilTsномер (ro)Конец активной паузы кормления в миллисекундах по времени Unix (0 = none).
status.dynamicAvgTemperatureномер (ro)Средняя температура, используемая при динамической подаче.
status.dynamicRateномер (ro)Коэффициент скорости Q10, применяемый в настоящее время при динамической подаче.
status.dynamicIntervalMinчисло (ro)Текущий вычисляемый динамический интервал (минуты).
status.dynamicDurationSecчисло (ro)Текущая вычисленная динамическая продолжительность (секунды).
status.airTemperatureномер (ro)Собственное значение источника температуры воздуха этого переключателя.
status.waterTemperatureномер (ro)Собственное значение источника температуры воды этого переключателя (зона подачи / датчик мелководья).
status.waterTemperatureDeepномер (ro)Дополнительное значение датчика температуры глубоководной воды для этого переключателя.
status.waterStratificationномер (ro)Разница температур между мелководьем и глубиной (только с двумя датчиками воды).
status.oxygenномер (ro)Собственное значение источника растворенного кислорода этого переключателя.
status.ammoniaномер (ro)Собственное значение источника аммиака (NH₃/NH₄) этого переключателя.
status.nitriteномер (ro)Значение источника нитрита (NO₂) этого переключателя.
status.fishTotalWeightчисло (ро)Модель количества корма: расчетный общий вес рыбы (г).
status.feedPercentTodayномер (ro)Модель количества корма: процент кормления для текущей температуры воды (%).
status.feedTargetGramsTodayчисло (ро)Модель количества корма: рекомендуемое количество корма в день (г).
status.feedingsPerDayTodayчисло (ro)Модель количества кормлений: количество кормлений, запланированных на сегодня.
status.feedTargetPortionGramsчисло (ro)Модель расчета количества корма: рекомендуемое количество на одно кормление (г) = суточная норма ÷ количество кормлений (после ограничения объема / снижения качества воды).
status.feedTargetSecondsTodayчисло (ro)Модель количества корма (режим управления): общее время работы двигателя в день (с) для выдачи заданного количества. 0, когда управление выключено.
status.feedEffectiveDurationSecчисло (ro)Модель количества корма (режим управления): продолжительность кормления за один цикл (с). 0, когда управление выключено.
status.dispenseRateномер (ro)Модель количества подаваемого корма: калиброванная скорость дозирования этого переключателя (г/с).
status.activeFeedNameстрока (ro)Текущий загруженный канал: имя (пустое, если ни один не выбран).
status.activeFeedVendorстрока (ro)В данный момент загружена лента: поставщик / дилер.
status.activeFeedSizeномер (ro)Текущий загруженный корм: размер гранул (мм).
status.activeFeedProteinномер (ro)Текущая загрузка корма: сырой протеин (%).
status.activeFeedFatномер (ro)Текущая загрузка корма: сырой жир (%).
status.activeFeedFibreномер (ro)Текущий загруженный корм: сырая клетчатка (%).
status.activeFeedAshномер (ro)Текущее загруженное сырье: сырая зола (%).
status.activeFeedUrlстрока (ro)Текущая загруженная лента: ссылка на предложение/покупку (необязательно).
status.sunrise / status.sunsetстрока (ro)Рассчитанное время восхода/захода солнца для местоположения этого переключателя (астрономическое окно).
status.sunriseTs / status.sunsetTsчисло (ro)Восход/закат в формате Unix-времени в миллисекундах - например, для индикатора прогресса дня в VIS.
relay.connectedлогическое значение (ro)Релейная плата, настроенная для этого коммутатора, доступна (только если этот коммутатор использует релейную плату).
relay.infoстрока (ro)Идентификатор релейной платы (хост / IP / прошивка) из последнего успешного опроса.
relay.activeлогическое значение (ro)Таймер релейной платы в данный момент запущен.
relay.remainingчисло (ro)Осталось секунд на таймере релейной платы.
relay.lastTriggerPathстрока (ro)Способ запуска последнего питания для этого переключателя: board (через плату реле) или direct (прямое переключение Shelly, например, плата недоступна).
relay.lastTriggerPathstring (ro)Способ срабатывания последнего сигнала питания для этого переключателя: board (через релейную плату) или direct (Shelly переключается напрямую, например, плата недоступна).

Вы можете использовать их в VIS, скриптах или других адаптерах - например, отображать status.nextFeeding на панели мониторинга или реагировать на status.error = true, чтобы отправить собственное оповещение.


7. Примеры / рецепты

Пруд с карпами кои, два раза в день, только когда достаточно тепло.

  • Режим Фиксированное время08:00, 18:00; продолжительность 6 с.
  • На вкладке «Переключатели», в разделе Источники температуры и кислорода, включите Температура воды и выберите

датчик; затем Блокировка по температуре водыБлокировка, если ниже 8 °C (кормление запрещено при низкой температуре).

  • В разделе Ограничения включите параметр Ограничить подачу данных только в течение астрономического дня, чтобы ничего не отображалось.

Кормление после наступления темноты.

Вольер открыт только в дневное время (астрономическое окно)

  • Режим Интервал в пределах временного окна → интервал 90 мин; длительность 3 с.
  • В разделе Ограничения включите астрономическое окно со смещениями 30 / 30 мин → подача

Работает с 30 минут после восхода солнца до 30 минут до захода солнца, автоматически адаптируясь к временам года.

Пруд с карпами кои, с температурной адаптацией (динамическое кормление)

  • На вкладке «Переключатели», в разделе Источники температуры и кислорода, включите Температура воды и выберите датчик. *Затем откройте Динамическую подачу, включите её и укажите Температуру воды.
  • Эталонная температура: 20 °C, Q10: 2.2, базовый интервал: 60 мин (мин: 30, макс: 480), базовая продолжительность: 5 с

(мин 2, макс 15). Затем он кормится чаще и немного больше в теплую погоду и реже в холодную.

Зимние каникулы для пруда

  • На вкладке «Переключатели» откройте Пауза зимы, включите её, установите Начало зимы 01.11 и Конец зимы.

15.03, режим Приостановка подачи.

  • При желании отметьте галочкой напоминания, чтобы получать уведомления в Telegram за несколько дней до начала/окончания.

Карантин после пополнения поголовья (пауза в кормлении)

  • На вкладке «Переключатели» откройте раздел «Паузы кормления», установите флажок Пауза 1 и задайте дату начала: 15.07.2026 08:00.

Конец 22.07.2026 18:00 → в этом окне кормление полностью прекращается, затем возобновляется автоматически.

  • При наличии настроенного экземпляра Telegram вы будете получать сообщение в начале и в конце паузы.

Немедленно приостановите подачу корма (главный выключатель)

  • На вкладке переключателей откройте Пауза кормления и включите Приостановить кормление сейчас - или напишите true в

automatic-feeder.0.switches.sw-0.settings.pauseNow от переключателя VIS.

  • Подача корма немедленно прекращается (отменяя все остальные режимы), пока вы снова не выключите устройство; каждое переключение

Отправляет сообщение в Telegram. status.pauseManual показывает текущее состояние.

Дополнительная часть, добавляемая вручную с помощью кнопки VIS

  • Добавьте в VIS кнопку, которая записывает значение true в automatic-feeder.0.switches.sw-0.feedNow.
  • Или используйте ползунок/числовое поле, которое записывает секунды.

automatic-feeder.0.switches.sw-0.feedFor → подача данных один раз с точно такой же продолжительностью (без изменения конфигурации, без перезапуска; после этого состояние сбрасывается до 0).

  • Дополнительно можно установить параметр Ручной запуск игнорирует все блоки, поэтому подача всегда происходит.

8. Уведомления в Telegram

  1. Установите и настройте адаптер Telegram (создайте бота с @BotFather, введите

(токен, начните чат с вашим ботом). Убедитесь, что экземпляр Telegram запущен.

  1. Во вкладке переключения автоматической рассылки откройте уведомления Telegram:
  • Выберите свой экземпляр Telegram из выпадающего списка (например, telegram.0).
  • При желании укажите получателя (имя пользователя/чата, отображаемое в адаптере Telegram); оставьте

Пусто, чтобы уведомить всех.

  • Отметьте галочкой нужные сообщения: успешное кормление, не удалось покормить, ошибка выключения.
  1. Сохранить. С этого момента выбранные результаты мониторинга будут отправляться в Telegram (с префиксом).

(название коммутатора). Для этого необходимо включить контроль коммутации для данного коммутатора.

  1. Напоминания о зимней паузе используют один и тот же экземпляр Telegram и одного и того же получателя. Они следующие:

Управляется в разделе Зимняя пауза (количество дней до начала/окончания и час напоминания) и не требует включения контроля.


9. Устранение неполадок и часто задаваемые вопросы

Страница настроек пустая/белая. Перезагрузите браузер, нажав Ctrl+Shift+R (возможно, администратор сохранил в кэше старую страницу). Если проблема сохраняется, перезапустите систему и снова откройте настройки.

Новый значок / изменение не отображается. Кеш браузера - принудительная перезагрузка с помощью Ctrl+Shift+R.

Ничего не поступает. Проверьте по порядку: переключатель активен; выбран объект переключателя; расписание действительно (status.nextFeeding показывает время); он не заблокирован (посмотрите status.blocked / status.blockReason); астрономическое окно не исключает время; установите уровень логирования экземпляра на debug и следите за логом.

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

Система контроля всегда сообщает о неисправности. Ваш объект коммутатора, вероятно, не сообщает о своем реальном состоянии (ack=true). Либо используйте коммутатор с обратной связью о состоянии, либо отключите контроль переключения для этого коммутатора.

Динамическая подача данных ничего не меняет. Убедитесь, что выбранный источник температуры (вода или воздух) включен на вкладке переключателей (Источники температуры и кислорода) и выдает значения. Сразу после перезапуска скользящее среднее продолжает заполняться, поэтому оно начинается с базовых значений. Следите за status.dynamicAvgTemperature и status.dynamicIntervalMin.

Динамическая подача данных включена, но ничего не подается (status.nextFeeding пуст). Базовый интервал или максимальный интервал равен 0 (или временное окно недействительно), поэтому интервал не может быть вычислен - status.blockReason затем отображает подсказку. Установите базовый интервал и максимальный интервал больше 0 (и допустимое окно). Примечание: если оставить оба значения минимального и максимального интервала равными 0, результат также будет равен 0.

Ничего не подкармливается, хотя сейчас не зима (или подкармливается, хотя должна быть пауза). Проверьте даты зимней паузы (Winter start / Winter end, формат дд.мм) и режим. Точка данных status.winterActive показывает, активна ли в данный момент пауза.

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

Сообщения Telegram не приходят. Выбран ли экземпляр Telegram на вкладке переключения? Настроен ли и запущен ли адаптер Telegram? Отмечен ли хотя бы один тип сообщений, и включена ли функция контроля переключения?


10. Ведение журналов и отладка

Адаптер ведет логи на стандартных уровнях ioBroker. Для просмотра подробных сообщений повысьте уровень логирования экземпляра (Instances → automatic-feeder.x → log level) до debug или silly:

  • ошибка - сбои, требующие внимания (например, не удалось записать данные в коммутатор).
  • предупреждение - неверная конфигурация (отсутствуют координаты, неверное расписание…).
  • информация - этапы (запуск, выполнение или блокировка подачи корма, ручной запуск).
  • отладка - подробный алгоритм работы (решения по планированию, обновление данных о температуре, геокодирование, включение/выключение).

значения, проверка подтверждена/тайм-аут).

  • глупый - очень подробная трассировка (каждый таймер, каждая проверка блока, каждое изменение состояния).

11. Динамическое питание - предпосылки и источники

Рыбы (карпы кои, золотые рыбки, прудовые карпы) являются пойкилотермными (эктотермными): их метаболизм зависит от температуры воды. Как правило, скорость метаболизма примерно удваивается на каждые +10 °C, что точно соответствует коэффициенту Q10 (обычно 2-3), используемому в этом адаптере, - поэтому более частое и немного более интенсивное кормление в теплую погоду и менее интенсивное в холодную физиологически оправдано.

Практические рекомендации по температуре воды (для карпов кои/прудовых рыб):

  • при температуре ниже ~4-5 °C - не кормите (воспользуйтесь зимней паузой).
  • ~4-10 °C - практически неактивны; кормить редко или вообще не кормить легкоусвояемым кормом (из зародышей пшеницы).
  • ~10-15 °C - снижено потребление пищи; иммунная система все еще слаба (~12 °C).
  • ~15-25 °C - оптимальный диапазон для роста, полноценное питание.
  • при температуре выше ~28 °C - растворенный кислород становится лимитирующим фактором → блок O₂ здесь полезен.

Где измерять и зачем нужен второй датчик: важна температура воды, в которой фактически находятся рыбы (в зоне кормления), а не температура поверхности (которая может отличаться на несколько градусов). В пруду, перемешиваемом работающим насосом, или в мелководье достаточно одного правильно расположенного датчика. Только в глубоком, неперемешиваемом пруду происходит стратификация воды: при температуре выше 4 °C теплая вода находится сверху (более холодная снизу); при температуре ниже 4 °C происходит инверсия, оставляя укрытие с температурой около 4 °C у дна. В этом случае второй (глубокий) датчик имеет дополнительную ценность - для безопасности (кормление из самого холодного слоя), для сезонного переключения между мелководьем и глубиной, а также для визуализации стратификации (status.waterStratification). Для большинства прудов он необязателен.

Источники / дополнительная литература:

Эти данные являются общими рекомендациями для карпов кои/прудовых рыб и не заменяют наблюдения за вашими собственными животными. Настройте эталонную температуру, Q10, пределы и пороговые значения в соответствии с вашим видом и условиями содержания.

Документация

Changelog

1.18.4 (2026-09-12)

  • (ssbingo) Maintenance: added Node.js 26 to the CI test matrix (issue #31; recommended [22.x, 24.x, 26.x]) and updated the @iobroker/testing devDependency to 6.x (repository checker S0064). No functional changes; minimum Node.js stays 22

1.18.3 (2026-09-06)

  • (ssbingo) Maintenance: updated @iobroker/adapter-core to 3.4.3 (repository checker W0034). No functional changes

1.18.2 (2026-09-06)

  • (ssbingo) Maintenance: dependency updates merged via Dependabot — @iobroker/adapter-react-v5 8.3.3, @tsconfig/node22 22.0.6 and dayjs 1.11.23 (MUI stays 6 as adapter-react-v5 still requires it); the admin UI was rebuilt. No functional changes

1.18.1 (2026-09-03)

  • (ssbingo) Fix – Sayit announcement. The pre-feeding announcement via Sayit now reliably speaks the current text: it uses Sayit's documented say message command (sendTo) instead of writing the tts.text / tts.volume states, which could re-play a stale/old announcement (e.g. a previous test message) and raced the separate volume write. Telegram announcements were never affected

1.18.0 (2026-09-01)

  • (ssbingo) Central feed list with its own Feed list tab (issue #26). Maintain your food types centrally — name, vendor/dealer, pellet size (mm) and the four standard nutritional values (crude protein / fat / fibre / ash %), plus an optional offer/purchase link. In each switch tab you pick, under Currently loaded feed, which feed is currently filled into that feeder
  • (ssbingo) This replaces the per-switch feed profiles from 1.17.0 (issue #25): existing profiles are automatically merged into the central list, each switch's calibrated dispense rate stays per switch (dispenseGramsPerSec), and its activeFeed now references a feed by id
  • (ssbingo) New states: info.feeds (the list as JSON, for VIS/widgets) and per switch status.activeFeedName / activeFeedVendor / activeFeedSize / activeFeedProtein / activeFeedFat / activeFeedFibre / activeFeedAsh / activeFeedUrl. The active feed is selectable from VIS via the writable settings.activeFeed (feed id)
  • (ssbingo) Documentation updated in all 11 languages and in the German PDF handbook

1.17.0 (2026-09-01)

  • (ssbingo) Feed profiles for the feeding-amount model. Instead of a single rate you can define several named feed types per switch, each with its own calibrated dispense rate (g/s) (e.g. a 3 mm all-round and a 6 mm summer pellet); the active profile's rate drives Phase B. Manage the list in the admin (the calibration helper fills the active profile), switch the active feed from the VIS widget via the writable settings.activeFeed state
  • (ssbingo) New states status.dispenseRate (effective g/s) and status.activeFeedName. Backward compatible — with no profile defined, the single dispense rate is used
  • (ssbingo) Documentation updated in all 11 languages and in the German PDF handbook

1.16.0 (2026-08-31)

  • (ssbingo) Feeding-amount model – high-temperature throttling (issue #23). The percentage table no longer stays at 3 % above 23 °C: the top band now ends at 28 °C and two new editable bands throttle the amount in the heat – 1.5 % at 28–30 °C and 0.5 % above 30 °C (the temperature response peaks around 24–26 °C and falls off above it). Behaviour up to 28 °C is unchanged; existing switches get the new bands with sensible defaults
  • (ssbingo) Feeding-amount settings are now editable from VIS/scripts (issue #24): the model's config (amountModelEnabled, fish counts, temperature percentages, amountControlEnabled, dispenseGramsPerSec, feedDailyMaxGrams) is mirrored as writable switches.<id>.settings.* states, so a VIS widget can edit them
  • (ssbingo) New states status.feedingsPerDayToday and status.feedTargetPortionGrams (recommended grams per single feeding = daily amount ÷ feedings, after cap / water-quality reduction)
  • (ssbingo) Documentation updated in all 11 languages and in the German PDF handbook

1.15.1 (2026-08-31)

  • (ssbingo) Fix (relay board): a false "did not switch off" fault could be reported for a board-fed switch even though it fed and switched off correctly. The target object (e.g. the Shelly) is now authoritative for the off check — a fault (and the Telegram/Sayit notification) is only raised when the target is genuinely still on. If the target is off but the board's /api/status cannot confirm its relay off in time (a brief hiccup, or its countdown ending a moment later), the adapter now logs a warning instead of a fault; the safety back-stop still forces the board off

1.15.0 (2026-08-31)

  • (ssbingo) Water-quality limits (Phase C). New optional per-switch ammonia (NH₃/NH₄) and nitrite (NO₂) sources – "if these values rise, feed less" (from the feeder manual). Each has a warn threshold that reduces the daily amount (only in the feeding-amount control mode) and a max threshold that blocks feeding entirely in every mode
  • (ssbingo) New states status.ammonia and status.nitrite mirror the source values; when a max threshold is exceeded the block reason (blockAmmoniaHigh / blockNitriteHigh) appears in status.blockReason. There are no universal safe limits – set the thresholds from your own test kit
  • (ssbingo) Documentation updated in all 11 languages and in the German PDF handbook

1.14.2 (2026-08-31)

  • (ssbingo) Fix (admin UI, dark mode): the configuration page is now wrapped in the theme the admin has already resolved, so the tab labels are visible immediately in dark mode. Previously they rendered as dark text on a dark background (only revealed on hover or after opening a tab), because the tabs inherited the outer theme that is fixed at page-load time. Applies on first open and when you toggle the theme

License

MIT License

Copyright (c) 2026 ssbingo s.sternitzke@online.de

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.