Qué es
La API de Plant Reminder permite que otras herramientas lean tus plantas y apunten sus cuidados: leer lo que toca y actuar apuntando riegos y abonos o deshaciéndolos. La usan Home Assistant y Alexa, y también cualquier script tuyo.
Está incluida con Premium, o puedes conseguir un pase de 30 días por 30 tokens (los tokens se compran en la app). El pase no se renueva automáticamente.
La API nunca permite borrar plantas, fotos ni historial.
Crea el token en la app
Cada integración usa un token personal. Para crearlo:
- Abre la pestaña Más y entra en Home Assistant y Alexa.
- Pulsa Activar.
- Pulsa Crear token.
- Pulsa Copiar.
El token solo se muestra una vez, así que cópialo enseguida. Puedes revocarlo en cualquier momento y crear otro.
La opción Permitir apuntar riegos y abonos viene marcada por defecto. Si la desmarcas, el token pasa a ser de solo lectura y cualquier escritura devuelve insufficient_scope.
Home Assistant
Todo lo que sigue se puede pegar en tu configuration.yaml. Sustituye TU_TOKEN por el token que copiaste.
Sensor: plantas por regar
Un sensor rest que consulta cada 300 segundos. Su estado es el número de plantas que toca regar hoy o van atrasadas. El atributo plants lleva todo lo que toca, cada elemento con su kind: watering (riego), fertilization (abonado) o transplant (trasplante).
rest:
- resource: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due?days=1
scan_interval: 300
headers:
Authorization: "Bearer TU_TOKEN"
sensor:
- name: "Plantas por regar"
value_template: "{{ value_json.plants | selectattr('kind', 'eq', 'watering') | list | count }}"
json_attributes:
- plants
- overdue_count
- today
- as_of
Comandos: regar, abonar y deshacer
Un rest_command por acción. plant_reminder_water y plant_reminder_fertilize reciben un plant_id; los identificadores salen de GET /v1/plants o del atributo plants del sensor.
rest_command:
plant_reminder_water:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/water"
method: POST
headers:
Authorization: "Bearer TU_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 TU_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 TU_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 TU_TOKEN"
content_type: "application/json"
payload: "{}"
Consejo: en lugar de escribir el token en el fichero, guárdalo en secrets.yaml y refiérelo con !secret.
Automatización: avisar cuando toque regar
Envía una notificación con los nombres de las plantas cada vez que el sensor pasa de cero. Usa la sintaxis de Home Assistant 2024.10 o posterior (triggers: y actions:); cambia notify.notify por tu propio servicio de notificaciones.
automation:
- alias: "Plant Reminder: plantas por regar"
triggers:
- trigger: numeric_state
entity_id: sensor.plantas_por_regar
above: 0
actions:
- action: notify.notify
data:
title: "Plantas por regar"
message: >-
{{ state_attr('sensor.plantas_por_regar', 'plants') | selectattr('kind', 'eq', 'watering') | map(attribute='name') | join(', ') }}
Este ejemplo aún no se ha verificado en una versión concreta de Home Assistant; la sintaxis sigue la documentación de la 2024.10 y posteriores. Si algo no funciona en tu versión, escríbenos y dinos cuál usas. El identificador de la entidad sale del nombre del sensor: compruébalo en Herramientas para desarrolladores si el tuyo es distinto.
Referencia de endpoints
Todas las rutas cuelgan de la URL base de abajo y necesitan la cabecera Authorization: Bearer TU_TOKEN. Los cuerpos son JSON.
URL base: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api
| Endpoint | Qué hace |
|---|---|
GET /v1/due?days=0..7 | Cuidados que tocan en los próximos N días (de 0 a 7, por defecto 1), incluidos los atrasados: riego, abonado y trasplante. Cada elemento lleva su kind. |
GET /v1/plants | Lista tus plantas. |
GET /v1/plants/{id} | Detalle de una planta. |
GET /v1/plants/{id}/waterings?since=&limit= | Historial de riegos de una planta. since (fecha ISO) y limit (de 1 a 500, por defecto 100) son opcionales. |
GET /v1/plants/{id}/fertilizations | Historial de abonados de una planta. Mismos parámetros opcionales. |
GET /v1/actions | Acciones apuntadas con tu token. limit es opcional (de 1 a 100, por defecto 20). |
GET /v1/rooms | Lista tus habitaciones con cuántas plantas tiene cada una (solo las que se riegan). |
POST /v1/plants/{id}/water{at?} | Apunta un riego. at es una fecha ISO (por defecto, ahora; no puede ser futura). |
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?} | Apunta un abonado. at funciona igual. fertilizer_form admite liquid o solid, y application_method admite soil, foliar o root_drench; si no los envías, se usan los del último abonado de la planta. |
POST /v1/due/water{dry_run?} | Riega todas las plantas que tocan. Con dry_run: true solo simula y no apunta nada. Un lote cuenta como una escritura. |
POST /v1/rooms/{id}/water{at?, dry_run?} | Apunta un riego a todas las plantas de esa habitación. at funciona igual; con dry_run: true solo devuelve la lista. Cuenta como una escritura y se deshace entera. |
POST /v1/actions/undo{action_id?} | Deshace una acción. Sin action_id, deshace la última. |
- En las escrituras puedes enviar la cabecera opcional
Idempotency-Key: repetir una petición con la misma clave devuelve el resultado original en lugar de apuntarlo dos veces. - Las fechas son ISO 8601 en UTC.
- Cada respuesta lleva
api_version(ahora"1"). - Los errores tienen la forma
{"error": "código", "message": "..."}.
Errores y límites
| Estado | Código | Significado |
|---|---|---|
| 400 | bad_request | La petición está mal formada (por ejemplo, un parámetro fuera de rango). |
| 400 | invalid_date | La fecha no es válida: es futura, anterior a la adopción de la planta o no es ISO 8601. |
| 401 | invalid_token | Falta el token, es incorrecto o se ha revocado. |
| 401 | token_expired | El token de acceso ha caducado y hay que renovarlo (Alexa lo hace sola). |
| 402 | api_access_expired | El acceso a la API ha terminado (Premium o el pase). Renuévalo en la app. |
| 403 | insufficient_scope | El token no tiene permiso para apuntar cuidados. |
| 403 | write_disabled | Las escrituras están desactivadas temporalmente por nuestra parte. La lectura sigue funcionando. |
| 404 | not_found | La ruta, la planta o la acción no existe. |
| 404 | nothing_to_undo | No hay nada de tu token que deshacer. |
| 409 | already_gone | Lo que intentabas deshacer ya se había eliminado. |
| 410 | expired | La acción tiene más de 24 horas y ya no se puede deshacer. |
| 429 | rate_limited | Demasiadas peticiones. Espera los segundos que indica la cabecera Retry-After. |
| 503 | api_disabled | La API está desactivada temporalmente. |
Límites
- 10 peticiones por minuto y 5.000 al día por token.
- 60 escrituras al día por token (un lote cuenta como una).
- Deshacer solo quita lo que apuntó tu propia integración en las últimas 24 horas.
Alexa Próximamente
La skill de Plant Reminder para Alexa sigue en proceso de certificación, así que todavía no está disponible. Así funcionará:
Podrás decir:
- 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
Vincularás tu cuenta desde la app de Alexa. La skill estará disponible en español e inglés. Después de apuntar una planta, la skill pregunta si quieres apuntar otra: di su nombre o «ya está». Las listas largas se leen de cinco en cinco. Si preguntas por una planta («¿toca regar la monstera?»), te dice si le toca hoy, cuántos días de retraso lleva o qué día le toca; si le toca, se ofrece a apuntar el riego.
Privacidad
De cada token guardamos la fecha del último uso y un recuento diario de peticiones, para aplicar los límites y mostrarte si está en uso.
El token en sí solo se guarda en forma de hash, nunca en claro: nadie, ni nosotros, puede volver a leerlo. Por eso solo se muestra una vez.
Soporte
Para dudas, errores o ayuda con tu cuenta, escríbenos a [email protected].
Tiempo de respuesta habitual: 24–48 horas laborables.