 # 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. [Усунення несправностей і поширені запитання](#9-усунення-несправностей-і-поширені-запитання) 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. У **admin** ioBroker відкрити вкладку **Адаптери** (Adapter). 2. Знайти **automatic-feeder** у списку адаптерів і натиснути **Встановити** (Installieren). 3. Створити **екземпляр** адаптера. 4. Відкрити налаштування екземпляра (символ шестірні) — має з'явитися сторінка конфігурації з вкладкою **Основні налаштування** (Grundeinstellungen). Якщо вона залишається порожньою, див. [Усунення несправностей](#9-усунення-несправностей-і-поширені-запитання). --- ## 4. Швидкий старт – перше годування Мета: вимикач має — одразу, для тесту — годувати протягом 5 секунд. 1. **Відкрити налаштування** екземпляра automatic-feeder. 2. На вкладці **Основні налаштування** (Grundeinstellungen): * У розділі **Місцезнаходження** (Standort) дозволити *Перейняти системні налаштування* (Systemeinstellungen übernehmen), якщо ваш ioBroker уже має координати. Інакше обрати *Задати місцезнаходження окремо* (Standort spezifisch festlegen), ввести адресу, натиснути **Пошук** (Suchen) і підтвердити маркер на карті. * Прокрутити вниз до розділу **Вимикачі** (Schalter) і натиснути **Додати вимикач** (Schalter hinzufügen). * Призначити **ім'я** (наприклад, `Koi-Teich`). Це ім'я стане заголовком окремої вкладки. * Поруч із **Об'єкт-вимикач** (Schalter-Objekt) натиснути символ списку і вибрати точку даних, яка перемикає вашу годівницю (наприклад, вашу розетку). Вимикач має бути **активним** (галочка ліворуч). 3. **Зберегти** (дискета/галочка внизу). З'явиться нова вкладка з іменем вашого вимикача. 4. Відкрити цю **вкладку вимикача**. У самому верху під **Ручне годування** (Manuelle Fütterung) встановити тривалість (наприклад, `5` секунд) і натиснути **Годувати зараз** (Jetzt füttern). Вихід має ввімкнутися на 5 секунд, а потім знову вимкнутися. 5. На цій самій вкладці налаштувати справжній розклад у розділі **План годування** (Fütterungsplan) (наприклад, фіксований час 08:00 та 18:00) і встановити **Тривалість годування** в розділі **Процес годування** (Fütterungsvorgang), потім **Зберегти**. Готово — відтепер адаптер годує автоматично. Усе інше пояснює параметри детально. --- ## 5. Сторінка налаштувань детально Конфігурація має вкладку **Основні налаштування** (Grundeinstellungen), а також **одну вкладку на кожен вимикач** (створюється автоматично, щойно вимикач отримує ім'я). Якщо сторінка не прокручується, збільшіть вікно або скористайтеся смугою прокручування праворуч — усі розділи є доступними. ### 5.1 Вкладка «Основні налаштування» (Grundeinstellungen) #### Місцезнаходження (обов'язково) Адаптеру потрібне ваше географічне положення, щоб розраховувати схід і захід сонця (для нічного блокування). Два варіанти: * **Перейняти системні налаштування** (Systemeinstellungen übernehmen) — бере широту/довготу із системної конфігурації ioBroker (рекомендовано, якщо вони там уже задані). Поточні значення відображаються. * **Задати місцезнаходження окремо** (Standort spezifisch festlegen) — визначити положення самостійно: * Ввести **адресу** і натиснути **Пошук** (Suchen). Адаптер розв'язує її (через OpenStreetMap / Nominatim) і встановлює маркер. * Або **клацнути по карті** / **перетягнути маркер**, щоб вибрати точне місце. * Широту/довготу можна також вводити безпосередньо; карта слідуватиме за ними. > Пошук адреси відбувається в бекенді адаптера, тому **екземпляр має бути запущений**. Карта та пошук > потребують доступу до інтернету. #### Сонячне вікно (без годування вночі) Визначає часове вікно, у якому дозволено годувати: * **Хвилин після сходу сонця** — годувати лише через стільки хвилин *після* сходу сонця. * **Хвилин до заходу сонця** — припинити за стільки хвилин *до* заходу сонця. Приклад: при сході сонця о 06:30, заході о 21:00 та зміщеннях 30 / 30 годування дозволено лише між **07:00 та 20:30**. Кожен вимикач може враховувати це вікно окремо або ігнорувати його (див. *Обмеження* у вкладці вимикача). Розраховані значення часу також зберігаються в точках даних `sunrise` / `sunset` і щоночі автоматично перераховуються. #### Вимикачі Список автоматичних годівниць (до 5). Для кожного запису: * **Активний** (галочка) — плануються лише активні вимикачі. * **Ім'я** — довільний текст; стає заголовком вкладки вимикача та іменем каналу в дереві об'єктів. * **Об'єкт-вимикач** (Schalter-Objekt) — наявна точка даних ioBroker, якою керують. Вибирати через символ списку, очищати через хрестик. За допомогою **Додати вимикач** (Schalter hinzufügen) ви створюєте ще один (макс. 5), за допомогою символа кошика видаляєте один. При видаленні також видаляються його точки даних. ### 5.2 Вкладки вимикачів Кожен налаштований вимикач отримує власну вкладку зі своїм іменем. Вона містить наступні розділи. #### Ручне годування * **Тривалість ручного годування (секунди)** — тривалість, яку використовує кнопка. * **Годувати зараз** (Jetzt füttern) — одразу запускає годування з цією тривалістю. Зручно для тестування або для додаткової порції. (Чи ігноруються блокування, залежить від *Ручний запуск ігнорує всі блокування* у розділі *Обмеження*.) * Для кнопки екземпляр має бути запущений, а конфігурація **збережена**. #### План годування Вибрати **один** режим: * **Фіксований час** — список значень часу (`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` (типово для > розеток/реле зі зворотним зв'язком про статус). Простий допоміжний boolean, який ніхто не підтверджує, > завжди повідомляв би про несправність — тоді вимкніть контроль для цього вимикача. Результат також зберігається в точках даних `status.lastResult` (текст) і `status.error` (boolean), щоб ви могли на нього реагувати (наприклад, запустити власне сповіщення). #### Сповіщення Telegram Надсилає повідомлення контролю перемикання в Telegram — налаштовується **для кожного вимикача**: * **Екземпляр Telegram** — вибрати один із встановлених екземплярів `telegram.*` (або *Жоден*, щоб вимкнути Telegram для цього вимикача). Якщо жодного не встановлено, поле вказує на це. * **Отримувач Telegram (опціонально)** — певне ім'я користувача/чату, як налаштовано в адаптері telegram; залишити порожнім, щоб надсилати всім налаштованим отримувачам. * **Прапорці** — вибрати, які повідомлення надсилаються: успішне годування, неможливо виконати та/або несправність вимкнення. **Нагадування про зимову паузу** (якщо активовані, див. *Зимова пауза*) надсилаються до того самого екземпляра Telegram, незалежно від цих прапорців контролю. Повне налаштування описано в розділі [Сповіщення Telegram](#8-сповіщення-telegram). --- ## 6. Об'єкти / точки даних Адаптер створює наступні точки даних у своєму просторі імен (`automatic-feeder.