 # ioBroker.automatic-feeder
## Adattatore automatic-feeder per ioBroker Questo adattatore trasforma un qualsiasi interruttore ioBroker già esistente (una presa elettrica, un relè, un'uscita GPIO …) in un **distributore di mangime a comando temporizzato**. Accende l'uscita agli orari da te stabiliti per un numero definito di secondi e può tenere conto della temperatura e dell'alternanza giorno/notte, affinché non venga mai distribuito mangime al momento sbagliato. Questo documento è una guida completa. Se non hai mai usato l'adattatore, leggilo dall'inizio alla fine: l'**Avvio rapido** ti porta alla prima distribuzione di mangime in pochi minuti, il resto spiega ogni impostazione nel dettaglio. --- ## Indice 1. [Cosa fa l'adattatore](#1-cosa-fa-ladattatore) 2. [Requisiti](#2-requisiti) 3. [Installazione](#3-installazione) 4. [Avvio rapido](#4-avvio-rapido--la-prima-distribuzione-di-mangime) 5. [La pagina delle impostazioni nel dettaglio](#5-la-pagina-delle-impostazioni-nel-dettaglio) 6. [Oggetti / Punti dati](#6-oggetti--punti-dati) 7. [Esempi / Ricette](#7-esempi--ricette) 8. [Notifiche Telegram](#8-notifiche-telegram) 9. [Risoluzione dei problemi & FAQ](#9-risoluzione-dei-problemi--faq) 10. [Logging & Ricerca degli errori](#10-logging--ricerca-degli-errori) --- ## 1. Cosa fa l'adattatore Una „distribuzione di mangime" è nella sua essenza molto semplice: **uscita ACCESA → attesa di un numero impostabile di secondi → di nuovo SPENTA**. In un distributore di mangime convertito, durante questo tempo gira il motore e viene erogato il mangime. L'adattatore gestisce **fino a 5 interruttori**, ciascuno del tutto indipendente e con una propria scheda di configurazione, denominata in base all'interruttore. Per ogni interruttore stabilisci: * **quando** viene distribuito il mangime – o a **orari fissi** (ad es. 08:00 e 18:00) oppure a **intervalli** all'interno di una finestra temporale (ad es. ogni 60 minuti tra le 08:00 e le 18:00); * **per quanto tempo** l'uscita rimane accesa (durata della distribuzione in secondi); * **se bloccare** quando la temperatura dell'acqua o dell'aria è troppo bassa/alta; * **se di notte** non venga distribuito mangime (in base all'alba/tramonto reali per la tua posizione); * **se monitorare la commutazione** (verifica che l'accensione e lo spegnimento siano realmente avvenuti) e, facoltativamente, l'invio di un messaggio **Telegram** sull'esito; * **se ridurre o sospendere** la distribuzione durante una stagione **invernale** ricorrente – facoltativamente con promemoria Telegram prima che inizi e finisca; * **se adattare** l'intervallo e la porzione alla temperatura dell'acqua/dell'aria automaticamente (**alimentazione dinamica**, modello Q10); * **se bloccare** la distribuzione quando l'**ossigeno** disciolto (O₂) è troppo basso. Puoi attivare una distribuzione **manualmente** in qualsiasi momento, direttamente dalla pagina delle impostazioni (pulsante con durata liberamente selezionabile) oppure tramite un punto dati (ad es. un pulsante in una vista VIS). > Importante: l'adattatore non crea l'interruttore da solo. **Comanda un oggetto già esistente** > nel tuo ioBroker. Questo oggetto lo scegli tu nella configurazione. --- ## 2. Requisiti | Ti serve | Dettagli | |-------------|---------| | **ioBroker** con **admin** aggiornato (≥ 7) | La pagina di configurazione è realizzata con React. | | **Un oggetto interruttore** | Un punto dati ioBroker scrivibile che accende/spegne il distributore di mangime – ad es. una presa elettrica (`shelly.0.…`, `sonoff.0.…`, `zigbee.0.…`), un relè o una variabile di script. | | **Coordinate geografiche** | Per il calcolo di alba/tramonto. O dalle impostazioni di sistema di ioBroker oppure tramite indirizzo/mappa. **Obbligatorio.** | | *(facoltativo)* Oggetti di temperatura | Punti dati esistenti con temperatura dell'aria e/o dell'acqua, per il blocco in base alla temperatura o l'alimentazione dinamica. Assegnati **per ciascun interruttore** nella scheda dell'interruttore. | | *(facoltativo)* Oggetti **ossigeno (O₂)** | Punti dati esistenti con l'ossigeno disciolto, per bloccare la distribuzione quando scende troppo. Assegnati **per ciascun interruttore**. | | *(facoltativo)* Un'istanza **Telegram** | L'adattatore ufficiale `telegram`, configurato e avviato, se desideri notifiche push. | | Accesso a Internet sull'host ioBroker | Solo per la ricerca dell'indirizzo/mappa nella configurazione. Il normale funzionamento avviene offline. | --- ## 3. Installazione 1. Nell'**admin** di ioBroker apri la scheda **Adattatori** (Adapter). 2. Cerca automatic-feeder nell'elenco degli adattatori e fai clic su **Installa**. 3. Crea un'**istanza** dell'adattatore. 4. Apri le impostazioni dell'istanza (icona ingranaggio): dovrebbe comparire la pagina di configurazione con la scheda **Impostazioni di base** (Grundeinstellungen). Se rimane vuota, vedi [Risoluzione dei problemi](#9-risoluzione-dei-problemi--faq). --- ## 4. Avvio rapido – la prima distribuzione di mangime Obiettivo: un interruttore deve – subito, come test – distribuire mangime per 5 secondi. 1. **Apri le impostazioni** dell'istanza automatic-feeder. 2. Nella scheda **Impostazioni di base** (Grundeinstellungen): * In **Posizione** (Standort) lascia *Acquisisci impostazioni di sistema* se il tuo ioBroker ha già le coordinate. Altrimenti scegli *Imposta posizione specifica*, inserisci l'indirizzo, fai clic su **Cerca** e conferma il marcatore sulla mappa. * Scorri in basso fino a **Interruttori** (Schalter) e fai clic su **Aggiungi interruttore**. * Assegna un **nome** (ad es. `Koi-Teich`). Questo nome diventa il titolo di una scheda dedicata. * Accanto a **Oggetto interruttore** (Schalter-Objekt) fai clic sull'icona elenco e seleziona il punto dati che comanda il tuo distributore (ad es. la tua presa). L'interruttore deve essere **attivo** (segno di spunta a sinistra). 3. **Salva** (dischetto/segno di spunta in basso). Compare una nuova scheda con il nome del tuo interruttore. 4. Apri questa **scheda dell'interruttore**. In alto, sotto **Distribuzione manuale**, imposta una durata (ad es. `5` secondi) e fai clic su **Distribuisci ora**. L'uscita dovrebbe accendersi per 5 secondi e poi spegnersi di nuovo. 5. Nella stessa scheda configura il vero programma sotto **Programma di distribuzione** (ad es. orari fissi 08:00 e 18:00) e imposta la **Durata della distribuzione** sotto **Processo di distribuzione**, poi **Salva**. Fatto – da ora l'adattatore distribuisce il mangime automaticamente. Tutto il resto spiega le opzioni nel dettaglio. --- ## 5. La pagina delle impostazioni nel dettaglio La configurazione ha una scheda **Impostazioni di base** (Grundeinstellungen) e **una scheda per ogni interruttore** (creata automaticamente non appena un interruttore ha un nome). Se una pagina non scorre, ingrandisci la finestra o usa la barra di scorrimento a destra: tutte le sezioni sono raggiungibili. ### 5.1 Scheda „Impostazioni di base" #### Posizione (obbligatoria) L'adattatore necessita della tua posizione geografica per calcolare alba e tramonto (per il blocco notturno). Due possibilità: * **Acquisisci impostazioni di sistema** – prende latitudine/longitudine dalla configurazione di sistema di ioBroker (consigliato se già impostate lì). Vengono mostrati i valori attuali. * **Imposta posizione specifica** – determina tu stesso la posizione: * Inserisci un **indirizzo** e premi **Cerca**. L'adattatore lo risolve (tramite OpenStreetMap / Nominatim) e posiziona un marcatore. * Oppure **fai clic sulla mappa** / **trascina il marcatore** per scegliere il punto esatto. * Latitudine/longitudine possono anche essere inserite direttamente; la mappa segue. > La ricerca dell'indirizzo viene eseguita nel backend dell'adattatore, perciò l'**istanza deve > essere in esecuzione**. La mappa e la ricerca richiedono l'accesso a Internet. #### Finestra solare (nessuna distribuzione di notte) Stabilisce la finestra temporale in cui è consentita la distribuzione: * **Minuti dopo l'alba** – distribuisci solo dopo questo numero di minuti *dopo* l'alba. * **Minuti prima del tramonto** – smetti questo numero di minuti *prima* del tramonto. Esempio: con alba alle 06:30, tramonto alle 21:00 e scarti 30 / 30, la distribuzione è consentita solo tra le **07:00 e le 20:30**. Ogni interruttore può rispettare o ignorare questa finestra singolarmente (vedi *Limitazioni* nella scheda dell'interruttore). Gli orari calcolati si trovano inoltre nei punti dati `sunrise` / `sunset` e vengono ricalcolati automaticamente ogni notte. #### Interruttori L'elenco dei distributori di mangime (fino a 5). Per ogni voce: * **Attivo** (segno di spunta) – vengono programmati solo gli interruttori attivi. * **Nome** – testo libero; diventa il titolo della scheda dell'interruttore e il nome del canale nell'albero degli oggetti. * **Oggetto interruttore** – il punto dati ioBroker esistente che viene comandato. Selezionalo tramite l'icona elenco, svuotalo tramite la croce. Con **Aggiungi interruttore** ne crei un altro (max. 5), con l'icona del cestino ne rimuovi uno. Alla rimozione vengono cancellati anche i relativi punti dati. ### 5.2 Schede degli interruttori Ogni interruttore configurato riceve una propria scheda con il suo nome. Contiene le seguenti sezioni. #### Distribuzione manuale * **Durata della distribuzione manuale (secondi)** – la durata utilizzata dal pulsante. * **Distribuisci ora** – attiva immediatamente una distribuzione con questa durata. Comodo per fare test o per una porzione extra. (Se i blocchi vengano ignorati dipende da *L'attivatore manuale ignora tutti i blocchi* sotto *Limitazioni*.) * Per il pulsante l'istanza deve essere in esecuzione e la configurazione **salvata**. #### Programma di distribuzione Scegli **una** modalità: * **Orari fissi** – un elenco di orari (`HH:mm`). Aggiungine quanti ne vuoi; il distributore funziona ogni giorno a ciascuno di essi. Esempio: `08:00` e `18:00`. * **Intervallo all'interno di un periodo** – distribuisci ripetutamente all'interno di una finestra: * **Inizio periodo** / **Fine periodo** – ad es. dalle 08:00 alle 18:00. * **Intervallo (minuti)** – ad es. 60 → distribuisce ogni giorno alle 08:00, 09:00, … fino alla fine della finestra. Il prossimo orario programmato è sempre presente nel punto dati `status.nextFeeding`. #### Processo di distribuzione * **Durata della distribuzione (secondi)** – per quanto tempo l'uscita rimane ACCESA durante una distribuzione programmata. * **Valore di accensione** / **Valore di spegnimento** – i valori scritti nell'oggetto interruttore. Quelli predefiniti sono `true` e `false`, adatti alla maggior parte delle prese/relè. Se il tuo dispositivo si aspetta numeri o testo, inserisci qui ad es. `1` / `0` oppure `ON` / `OFF`. #### Sorgenti di temperatura e ossigeno Ogni interruttore (stazione di alimentazione) ha i **propri** sensori – laghetti/vasche diversi possono usare oggetti diversi: * **Temperatura dell'aria** – metti il segno di spunta e seleziona il punto dati che contiene la temperatura dell'aria di questa stazione. * **Temperatura dell'acqua** – metti il segno di spunta e seleziona il punto dati che contiene la temperatura dell'acqua di questa stazione. * **Ossigeno (O₂)** – metti il segno di spunta e seleziona il punto dati che contiene l'ossigeno disciolto. Sono utili solo i punti dati numerici. I valori attuali vengono rispecchiati nei punti dati `status.airTemperature`, `status.waterTemperature` e `status.oxygen` di questo interruttore. Le soglie si impostano più in basso (*Blocco per temperatura*) e le temperature guidano anche l'*Alimentazione dinamica*. #### Blocco per temperatura Viene mostrato solo per le sorgenti di temperatura attivate sopra (*Sorgenti di temperatura e ossigeno*). Per ogni interruttore: * **Blocca in base alla temperatura dell'acqua** – *Blocca se inferiore a* e/o *Blocca se superiore a* (°C). * **Blocca in base alla temperatura dell'aria** – lo stesso per l'aria. Se la temperatura attuale è al di fuori dell'intervallo consentito, la distribuzione viene saltata e il motivo viene scritto in `status.blockReason`. (Se un valore di temperatura è sconosciuto, questa sorgente non blocca.) #### Limitazioni * **Non distribuire di notte** – rispetta la finestra solare (compresi gli scarti). Disattivalo se questo interruttore può distribuire mangime tutto il giorno. * **L'attivatore manuale ignora tutti i blocchi** – se attivo, il pulsante e il punto dati `feedNow` distribuiscono mangime anche con blocco per temperatura/notturno attivo. #### Alimentazione dinamica Opzionale: adatta **intervallo e durata dell'alimentazione alla temperatura** con il modello Q10 (il metabolismo raddoppia circa ogni +10 °C). Richiede una fonte di temperatura attiva; gli orari fissi vengono quindi sostituiti da un intervallo all'interno della finestra. * **Attiva / fonte** – attivalo e scegli la temperatura dell'acqua o dell'aria. * **Riferimento / Q10** – l'intervallo e la durata base valgono alla temperatura di riferimento (es. 20 °C); Q10 tipicamente 2–2,5. * **Intervallo / durata (base, min, max)** – limiti per l'intervallo calcolato (minuti) e la durata (secondi). L'**intervallo base e l'intervallo massimo devono essere maggiori di 0**, altrimenti non è possibile pianificare alcuna distribuzione. * **Finestra di media / isteresi** – una media mobile (es. 24 h) attenua i picchi; l'isteresi evita la ripianificazione per variazioni minime. I valori correnti sono in `status.dynamicAvgTemperature`, `status.dynamicRate`, `status.dynamicIntervalMin` e `status.dynamicDurationSec`. Una fonte opzionale di **ossigeno (O₂)** può bloccare l'alimentazione quando l'ossigeno disciolto scende sotto una soglia. La pausa invernale ha la precedenza sull'alimentazione dinamica. > Se l'alimentazione dinamica è attiva ma non è possibile calcolare un intervallo valido (l'intervallo base o massimo è 0, oppure una finestra temporale non valida), non viene programmato nulla: `status.nextFeeding` resta vuoto e `status.blockReason` mostra un'indicazione. Imposta un intervallo base e un intervallo massimo maggiori di 0. #### Pausa invernale Per ogni interruttore è possibile definire una **pausa invernale** ricorrente (stagionale, come date `MM-GG` che si ripetono ogni anno e possono attraversare il Capodanno). * **Attiva la pausa invernale** – attivare la pausa. * **Inizio / Fine inverno** – scegli giorno e mese da un calendario (mostrato come gg.mm), ad es. dal 01.11 al 15.03. * **Modalità** – durante la pausa, **sospendi l'alimentazione**, alimenta con un intervallo proprio **ridotto** oppure **una volta al giorno** a un orario fisso; si applica una **durata di alimentazione invernale** propria. * **Promemoria (Telegram)** – nei giorni prima dell'inizio e prima della fine viene inviato ogni giorno (l'ultima volta nel giorno stesso) un promemoria all'ora configurata. Richiede un'istanza Telegram (vedi sotto). Lo stato attuale è mostrato nel punto dati `status.winterActive`. L'alimentazione riprende automaticamente al termine della pausa. #### Monitoraggio della commutazione Dopo la commutazione l'adattatore può verificare se l'interruttore ha **effettivamente** raggiunto lo stato di accensione e spegnimento, e segnala per ogni distribuzione uno di tre risultati: | Risultato | Significato | Messaggio | |----------|-----------|---------| | ✅ Successo | L'interruttore si è acceso e spento come previsto | „Alimentazione attivata per x s." | | ❌ Accensione fallita | L'interruttore non ha mai confermato lo stato ACCESO | „Impossibile eseguire l'alimentazione. Controllare l'interruttore!" | | ❌ Spegnimento fallito | si è acceso ma non si è più spento | „Guasto: l'alimentatore non si è spento!" | > Il messaggio viene inviato nella lingua di sistema di ioBroker configurata (inglese per impostazione predefinita). * **Verifica che l'interruttore si accenda e spenga effettivamente** – attiva il monitoraggio. * **Timeout di monitoraggio (secondi)** – per quanto tempo si attende la conferma. * **Tentativi di verifica** – quanti controlli scaglionati vengono eseguiti prima di segnalare un guasto (predefinito 3). Ogni tentativo rilegge anche lo stato attuale, così il feedback ritardato (ad es. radio Homematic) non genera più un falso guasto. > **Importante:** il monitoraggio funziona solo se l'interruttore **restituisce il proprio stato > reale**, cioè l'oggetto di destinazione viene aggiornato con `ack=true` (tipico per > prese/relè con conferma di stato). Un semplice booleano ausiliario che nessuno conferma > segnalerebbe sempre un guasto – in tal caso disattiva il monitoraggio per questo interruttore. Il risultato è inoltre presente nei punti dati `status.lastResult` (testo) ed `status.error` (booleano), così puoi reagire di conseguenza (ad es. attivare una notifica personalizzata). #### Notifiche Telegram Invia i messaggi del monitoraggio della commutazione a Telegram – configurato **per ciascun interruttore**: * **Istanza Telegram** – scegli una delle istanze `telegram.*` installate (oppure *Nessuna* per disattivare Telegram per questo interruttore). Se non ne è installata nessuna, il campo lo segnala. * **Destinatario Telegram (facoltativo)** – un determinato nome utente/chat, come configurato nell'adattatore telegram; lascia vuoto per inviare a tutti i destinatari configurati. * **Caselle di controllo** – seleziona quali messaggi vengono inviati: distribuzione riuscita, non effettuabile e/o guasto dello spegnimento. I **promemoria della pausa invernale** (se attivi, vedi *Pausa invernale*) vengono inviati alla stessa istanza Telegram, indipendentemente da queste caselle di controllo del monitoraggio. La configurazione completa è descritta in [Notifiche Telegram](#8-notifiche-telegram). --- ## 6. Oggetti / Punti dati L'adattatore crea i seguenti punti dati nel suo namespace (`automatic-feeder.