Plant Reminder: Riego plantas

Conecta Plant Reminder con Home Assistant y Alexa

Una API de lectura y acciones para tus plantas: consulta qué necesita cuidados y apunta riegos y abonos (o deshazlos) desde tu casa inteligente.

Incluida con Premium O un pase de 30 tokens por 30 días Home Assistant Alexa: próximamente

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:

  1. Abre la pestaña Más y entra en Home Assistant y Alexa.
  2. Pulsa Activar.
  3. Pulsa Crear token.
  4. 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

EndpointQué hace
GET /v1/due?days=0..7Cuidados 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/plantsLista 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}/fertilizationsHistorial de abonados de una planta. Mismos parámetros opcionales.
GET /v1/actionsAcciones apuntadas con tu token. limit es opcional (de 1 a 100, por defecto 20).
GET /v1/roomsLista 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

EstadoCódigoSignificado
400bad_requestLa petición está mal formada (por ejemplo, un parámetro fuera de rango).
400invalid_dateLa fecha no es válida: es futura, anterior a la adopción de la planta o no es ISO 8601.
401invalid_tokenFalta el token, es incorrecto o se ha revocado.
401token_expiredEl token de acceso ha caducado y hay que renovarlo (Alexa lo hace sola).
402api_access_expiredEl acceso a la API ha terminado (Premium o el pase). Renuévalo en la app.
403insufficient_scopeEl token no tiene permiso para apuntar cuidados.
403write_disabledLas escrituras están desactivadas temporalmente por nuestra parte. La lectura sigue funcionando.
404not_foundLa ruta, la planta o la acción no existe.
404nothing_to_undoNo hay nada de tu token que deshacer.
409already_goneLo que intentabas deshacer ya se había eliminado.
410expiredLa acción tiene más de 24 horas y ya no se puede deshacer.
429rate_limitedDemasiadas peticiones. Espera los segundos que indica la cabecera Retry-After.
503api_disabledLa 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.