Che cos'è
L'API di Plant Reminder permette ad altri strumenti di leggere le tue piante e di registrarne le cure: leggere cosa c'è da fare e agire registrando annaffiature e concimazioni oppure annullandole. La usano Home Assistant e Alexa, e anche qualsiasi tuo script.
È inclusa con Premium, oppure puoi prendere un pass di 30 giorni per 30 token (i token si acquistano nell'app). Il pass non si rinnova automaticamente.
L'API non permette mai di eliminare piante, foto o cronologia.
Crea il token nell'app
Ogni integrazione usa un token personale. Per crearlo:
- Apri la scheda Altro e vai su Home Assistant e Alexa.
- Tocca Attiva.
- Tocca Crea token.
- Tocca Copia.
Il token viene mostrato una sola volta, quindi copialo subito. Puoi revocarlo in qualsiasi momento e crearne un altro.
L'opzione Consenti di registrare annaffiature e concimazioni è selezionata per impostazione predefinita. Se la deselezioni, il token diventa di sola lettura e qualsiasi scrittura restituisce insufficient_scope.
Home Assistant
Tutto quello che segue si può incollare nel tuo configuration.yaml. Sostituisci IL_TUO_TOKEN con il token che hai copiato.
Sensore: piante da annaffiare
Un sensore rest che interroga l'API ogni 300 secondi. Il suo stato è il numero di piante da annaffiare oggi o in ritardo. L'attributo plants elenca tutto ciò che è in scadenza, ogni elemento con il suo kind: watering (annaffiatura), fertilization (concimazione) o transplant (rinvaso).
rest:
- resource: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due?days=1
scan_interval: 300
headers:
Authorization: "Bearer IL_TUO_TOKEN"
sensor:
- name: "Piante da annaffiare"
value_template: "{{ value_json.plants | selectattr('kind', 'eq', 'watering') | list | count }}"
json_attributes:
- plants
- overdue_count
- today
- as_of
Comandi: annaffiare, concimare e annullare
Un rest_command per ogni azione. plant_reminder_water e plant_reminder_fertilize ricevono un plant_id; gli identificativi si ottengono da GET /v1/plants o dall'attributo plants del sensore.
rest_command:
plant_reminder_water:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/water"
method: POST
headers:
Authorization: "Bearer IL_TUO_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_fertilize:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/fertilize"
method: POST
headers:
Authorization: "Bearer IL_TUO_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_water_all_due:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due/water"
method: POST
headers:
Authorization: "Bearer IL_TUO_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_undo:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/actions/undo"
method: POST
headers:
Authorization: "Bearer IL_TUO_TOKEN"
content_type: "application/json"
payload: "{}"
Suggerimento: invece di scrivere il token nel file, conservalo in secrets.yaml e richiamalo con !secret.
Automazione: avvisare quando c'è da annaffiare
Invia una notifica con i nomi delle piante ogni volta che il sensore supera lo zero. Usa la sintassi di Home Assistant 2024.10 o successivo (triggers: e actions:); sostituisci notify.notify con il tuo servizio di notifica.
automation:
- alias: "Plant Reminder: piante da annaffiare"
triggers:
- trigger: numeric_state
entity_id: sensor.piante_da_annaffiare
above: 0
actions:
- action: notify.notify
data:
title: "Piante da annaffiare"
message: >-
{{ state_attr('sensor.piante_da_annaffiare', 'plants') | selectattr('kind', 'eq', 'watering') | map(attribute='name') | join(', ') }}
Questo esempio non è ancora stato verificato su una versione specifica di Home Assistant; la sintassi segue la documentazione dalla 2024.10 in poi. Se qualcosa non funziona nella tua versione, scrivici indicando quale usi. L'ID dell'entità deriva dal nome del sensore: controllalo negli Strumenti per sviluppatori se il tuo è diverso.
Riferimento degli endpoint
Tutte le rotte partono dall'URL di base qui sotto e richiedono l'intestazione Authorization: Bearer IL_TUO_TOKEN. I corpi delle richieste sono in JSON.
URL di base: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api
| Endpoint | Cosa fa |
|---|---|
GET /v1/due?days=0..7 | Cure in scadenza nei prossimi N giorni (da 0 a 7, predefinito 1), ritardi inclusi: annaffiatura, concimazione e rinvaso. Ogni elemento ha il suo kind. |
GET /v1/plants | Elenca le tue piante. |
GET /v1/plants/{id} | Dettaglio di una pianta. |
GET /v1/plants/{id}/waterings?since=&limit= | Cronologia delle annaffiature di una pianta. since (data ISO) e limit (da 1 a 500, predefinito 100) sono facoltativi. |
GET /v1/plants/{id}/fertilizations | Cronologia delle concimazioni di una pianta. Stessi parametri facoltativi. |
GET /v1/actions | Azioni registrate con il tuo token. limit è facoltativo (da 1 a 100, predefinito 20). |
GET /v1/rooms | Elenca le tue stanze con quante piante ha ciascuna (solo quelle che si annaffiano). |
POST /v1/plants/{id}/water{at?} | Registra un'annaffiatura. at è una data ISO (predefinito: adesso; non può essere futura). |
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?} | Registra una concimazione. at funziona allo stesso modo. fertilizer_form accetta liquid o solid, e application_method accetta soil, foliar o root_drench; se non li invii, si usano quelli dell'ultima concimazione della pianta. |
POST /v1/due/water{dry_run?} | Annaffia tutte le piante in scadenza. Con dry_run: true fa solo un'anteprima e non registra nulla. Un lotto conta come una sola scrittura. |
POST /v1/rooms/{id}/water{at?, dry_run?} | Registra un'annaffiatura per tutte le piante di quella stanza. at funziona allo stesso modo; con dry_run: true restituisce solo l'elenco. Conta come una sola scrittura e si annulla per intero. |
POST /v1/actions/undo{action_id?} | Annulla un'azione. Senza action_id, annulla l'ultima. |
- Nelle scritture puoi inviare l'intestazione facoltativa
Idempotency-Key: ripetere una richiesta con la stessa chiave restituisce il risultato originale invece di registrarlo due volte. - Le date sono in formato ISO 8601, in UTC.
- Ogni risposta contiene
api_version(attualmente"1"). - Gli errori hanno la forma
{"error": "codice", "message": "..."}.
Errori e limiti
| Stato | Codice | Significato |
|---|---|---|
| 400 | bad_request | La richiesta è malformata (per esempio, un parametro fuori intervallo). |
| 400 | invalid_date | La data non è valida: è futura, precedente all'adozione della pianta o non è in formato ISO 8601. |
| 401 | invalid_token | Il token manca, è sbagliato o è stato revocato. |
| 401 | token_expired | Il token di accesso è scaduto e va rinnovato (Alexa lo fa da sola). |
| 402 | api_access_expired | L'accesso all'API è terminato (Premium o pass). Rinnovalo nell'app. |
| 403 | insufficient_scope | Il token non ha il permesso di registrare cure. |
| 403 | write_disabled | Le scritture sono temporaneamente disattivate da parte nostra. La lettura continua a funzionare. |
| 404 | not_found | La rotta, la pianta o l'azione non esiste. |
| 404 | nothing_to_undo | Non c'è nulla del tuo token da annullare. |
| 409 | already_gone | Ciò che volevi annullare era già stato rimosso. |
| 410 | expired | L'azione ha più di 24 ore e non può più essere annullata. |
| 429 | rate_limited | Troppe richieste. Attendi i secondi indicati nell'intestazione Retry-After. |
| 503 | api_disabled | L'API è temporaneamente disattivata. |
Limiti
- 10 richieste al minuto e 5.000 al giorno per ogni token.
- 60 scritture al giorno per ogni token (un lotto conta come una).
- Annullare rimuove solo ciò che la tua integrazione ha registrato nelle ultime 24 ore.
Alexa In arrivo
La skill di Plant Reminder per Alexa è ancora in fase di certificazione, quindi non è ancora disponibile. Ecco come funzionerà:
Potrai dire:
In inglese
- Alexa, open my plants
- Alexa, ask my plants what needs watering today
- Alexa, ask my plants if the monstera needs water
- Alexa, tell my plants I watered the ficus
- Alexa, tell my plants I watered the ficus yesterday
- Alexa, tell my plants to water the plants in the living room
- Alexa, tell my plants to water everything due today
- Alexa, tell my plants to undo the last one
In spagnolo
- Alexa, abre mis plantas
- Alexa, pregunta a mis plantas qué toca regar hoy
- Alexa, pregunta a mis plantas si toca regar la monstera
- Alexa, dile a mis plantas que he regado el ficus
- Alexa, dile a mis plantas que regué el ficus ayer
- Alexa, dile a mis plantas que riegue las plantas del salón
- Alexa, dile a mis plantas que riegue todas las de hoy
- Alexa, dile a mis plantas que deshaga lo último
Collegherai il tuo account dall'app Alexa. La skill sarà disponibile in inglese e spagnolo. Dopo aver registrato una pianta, la skill chiede se vuoi registrarne un'altra: di' il suo nome, oppure «that's all» / «ya está». Gli elenchi lunghi vengono letti cinque alla volta. Se chiedi di una pianta («does the monstera need water?» / «¿toca regar la monstera?»), ti dice se tocca oggi, quanti giorni di ritardo ha o in che giorno tocca; se è il momento, si offre di registrare l'annaffiatura.
Privacy
Per ogni token conserviamo la data dell'ultimo utilizzo e un conteggio giornaliero delle richieste, per applicare i limiti e mostrarti se è in uso.
Il token stesso viene conservato solo come hash, mai in chiaro: nessuno, nemmeno noi, può rileggerlo. Per questo viene mostrato una sola volta.
Assistenza
Per domande, segnalazioni di errori o aiuto con l'account scrivi a [email protected].
Tempo di risposta abituale: 24–48 ore lavorative.