Plant Reminder: Gießplan

Plant Reminder mit Home Assistant und Alexa verbinden

Eine API zum Lesen und Handeln für deine Pflanzen: sieh nach, was Pflege braucht, und trage Gießen und Düngen ein (oder mach sie rückgängig) – direkt aus deinem Smart Home.

Mit Premium enthalten Oder ein 30-Tage-Pass für 30 Token Home Assistant Alexa: bald verfügbar

Was ist das

Die Plant-Reminder-API erlaubt anderen Tools, deine Pflanzen zu lesen und Pflege einzutragen: lesen, was ansteht, und handeln, indem Gießen und Düngen eingetragen oder rückgängig gemacht werden. Home Assistant und Alexa nutzen sie, ebenso jedes eigene Skript.

Sie ist in Premium enthalten, oder du holst dir einen 30-Tage-Pass für 30 Token (Token kaufst du in der App). Der Pass verlängert sich nicht automatisch.

Die API erlaubt es nie, Pflanzen, Fotos oder den Verlauf zu löschen.

Token in der App erstellen

Jede Integration nutzt einen persönlichen Token. So erstellst du ihn:

  1. Öffne den Tab Mehr und gehe zu Home Assistant und Alexa.
  2. Tippe auf Aktivieren.
  3. Tippe auf Token erstellen.
  4. Tippe auf Kopieren.

Der Token wird nur ein einziges Mal angezeigt – kopiere ihn also sofort. Du kannst ihn jederzeit widerrufen und einen neuen erstellen.

Die Option Eintragen von Gießen und Düngen erlauben ist standardmäßig aktiviert. Deaktivierst du sie, ist der Token nur lesend, und jeder Schreibzugriff liefert insufficient_scope.

Home Assistant

Alles Folgende kannst du in deine configuration.yaml einfügen. Ersetze DEIN_TOKEN durch den kopierten Token.

Sensor: Pflanzen zu gießen

Ein rest-Sensor, der alle 300 Sekunden abfragt. Sein Zustand ist die Anzahl der Pflanzen, die heute gegossen werden müssen oder überfällig sind. Das Attribut plants enthält alles, was fällig ist, jeweils mit seinem kind: watering (Gießen), fertilization (Düngen) oder transplant (Umtopfen).

rest:
  - resource: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due?days=1
    scan_interval: 300
    headers:
      Authorization: "Bearer DEIN_TOKEN"
    sensor:
      - name: "Pflanzen zu gießen"
        value_template: "{{ value_json.plants | selectattr('kind', 'eq', 'watering') | list | count }}"
        json_attributes:
          - plants
          - overdue_count
          - today
          - as_of

Befehle: gießen, düngen und rückgängig machen

Ein rest_command pro Aktion. plant_reminder_water und plant_reminder_fertilize erhalten eine plant_id; die IDs stammen aus GET /v1/plants oder aus dem Attribut plants des Sensors.

rest_command:
  plant_reminder_water:
    url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/water"
    method: POST
    headers:
      Authorization: "Bearer DEIN_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 DEIN_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 DEIN_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 DEIN_TOKEN"
    content_type: "application/json"
    payload: "{}"

Tipp: Statt den Token in die Datei zu schreiben, lege ihn in secrets.yaml ab und verweise mit !secret darauf.

Automatisierung: Bescheid geben, wenn etwas fällig ist

Sie sendet eine Benachrichtigung mit den Pflanzennamen, sobald der Sensor über null steigt. Sie verwendet die Syntax von Home Assistant 2024.10 oder neuer (triggers: und actions:); ersetze notify.notify durch deinen eigenen Benachrichtigungsdienst.

automation:
  - alias: "Plant Reminder: Pflanzen zu gießen"
    triggers:
      - trigger: numeric_state
        entity_id: sensor.pflanzen_zu_giessen
        above: 0
    actions:
      - action: notify.notify
        data:
          title: "Pflanzen zu gießen"
          message: >-
            {{ state_attr('sensor.pflanzen_zu_giessen', 'plants') | selectattr('kind', 'eq', 'watering') | map(attribute='name') | join(', ') }}

Dieses Beispiel wurde noch nicht mit einer bestimmten Home-Assistant-Version geprüft; die Syntax folgt der Dokumentation ab 2024.10. Wenn etwas in deiner Version nicht funktioniert, schreib uns und nenne die Version. Die Entitäts-ID ergibt sich aus dem Sensornamen: Prüfe sie in den Entwicklerwerkzeugen, falls deine abweicht.

Endpunkt-Referenz

Alle Routen liegen unter der Basis-URL unten und benötigen den Header Authorization: Bearer DEIN_TOKEN. Die Inhalte sind JSON.

Basis-URL: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api

EndpunktFunktion
GET /v1/due?days=0..7Pflege, die in den nächsten N Tagen fällig ist (0 bis 7, Standard 1), Überfälliges eingeschlossen: Gießen, Düngen und Umtopfen. Jedes Element trägt sein kind.
GET /v1/plantsListet deine Pflanzen auf.
GET /v1/plants/{id}Details einer Pflanze.
GET /v1/plants/{id}/waterings?since=&limit=Gießverlauf einer Pflanze. since (ISO-Datum) und limit (1 bis 500, Standard 100) sind optional.
GET /v1/plants/{id}/fertilizationsDüngeverlauf einer Pflanze. Dieselben optionalen Parameter.
GET /v1/actionsMit deinem Token eingetragene Aktionen. limit ist optional (1 bis 100, Standard 20).
GET /v1/roomsListet deine Räume mit der Anzahl ihrer Pflanzen auf (nur die, die gegossen werden).
POST /v1/plants/{id}/water{at?}Trägt ein Gießen ein. at ist ein ISO-Datum (Standard: jetzt; nicht in der Zukunft).
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?}Trägt eine Düngung ein. at funktioniert genauso. fertilizer_form akzeptiert liquid oder solid, application_method akzeptiert soil, foliar oder root_drench; ohne sie werden die der letzten Düngung der Pflanze übernommen.
POST /v1/due/water{dry_run?}Gießt alle fälligen Pflanzen. Mit dry_run: true gibt es nur eine Vorschau, es wird nichts eingetragen. Ein Stapel zählt als ein Schreibzugriff.
POST /v1/rooms/{id}/water{at?, dry_run?}Trägt für alle Pflanzen in diesem Raum ein Gießen ein. at funktioniert genauso; mit dry_run: true kommt nur die Liste zurück. Zählt als ein Schreibvorgang und wird als Ganzes rückgängig gemacht.
POST /v1/actions/undo{action_id?}Macht eine Aktion rückgängig. Ohne action_id die letzte.
  • Bei Schreibzugriffen kannst du den optionalen Header Idempotency-Key senden: Wird eine Anfrage mit demselben Schlüssel wiederholt, kommt das ursprüngliche Ergebnis zurück, statt doppelt einzutragen.
  • Datumsangaben sind ISO 8601 in UTC.
  • Jede Antwort enthält api_version (derzeit "1").
  • Fehler haben die Form {"error": "code", "message": "..."}.

Fehler und Limits

StatusCodeBedeutung
400bad_requestDie Anfrage ist fehlerhaft aufgebaut (zum Beispiel ein Parameter außerhalb des Bereichs).
400invalid_dateDas Datum ist ungültig: Es liegt in der Zukunft, vor der Aufnahme der Pflanze oder ist kein ISO 8601.
401invalid_tokenDer Token fehlt, ist falsch oder wurde widerrufen.
401token_expiredDer Zugriffstoken ist abgelaufen und muss erneuert werden (Alexa macht das selbst).
402api_access_expiredDer API-Zugang ist beendet (Premium oder Pass). Verlängere ihn in der App.
403insufficient_scopeDer Token hat keine Berechtigung, Pflege einzutragen.
403write_disabledSchreibzugriffe sind auf unserer Seite vorübergehend deaktiviert. Lesen funktioniert weiter.
404not_foundDie Route, die Pflanze oder die Aktion existiert nicht.
404nothing_to_undoEs gibt nichts von deinem Token, das sich rückgängig machen lässt.
409already_goneWas du rückgängig machen wolltest, war bereits entfernt.
410expiredDie Aktion ist älter als 24 Stunden und kann nicht mehr rückgängig gemacht werden.
429rate_limitedZu viele Anfragen. Warte die im Header Retry-After genannten Sekunden ab.
503api_disabledDie API ist vorübergehend deaktiviert.

Limits

  • 10 Anfragen pro Minute und 5.000 pro Tag und Token.
  • 60 Schreibzugriffe pro Tag und Token (ein Stapel zählt als einer).
  • Rückgängig machen entfernt nur, was deine eigene Integration in den letzten 24 Stunden eingetragen hat.

Alexa Bald verfügbar

Der Plant-Reminder-Skill für Alexa befindet sich noch in der Zertifizierung und ist daher noch nicht verfügbar. So wird er funktionieren:

Du kannst sagen:

Auf Englisch

  • 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

Auf Spanisch

  • 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

Du verknüpfst dein Konto über die Alexa-App. Der Skill wird auf Englisch und Spanisch verfügbar sein. Nach einer Pflanze fragt die Skill, ob du noch eine eintragen willst: sag ihren Namen oder «that's all» / «ya está». Lange Listen werden in Fünferschritten vorgelesen. Fragst du nach einer einzelnen Pflanze («does the monstera need water?» / «¿toca regar la monstera?»), sagt sie dir, ob sie heute dran ist, wie viele Tage sie überfällig ist oder an welchem Tag sie dran ist; ist sie fällig, bietet sie an, das Gießen einzutragen.

Datenschutz

Zu jedem Token speichern wir das Datum der letzten Nutzung und eine tägliche Anzahl der Anfragen, damit wir die Limits anwenden und dir zeigen können, ob er verwendet wird.

Der Token selbst wird nur als Hash gespeichert, nie im Klartext: Niemand, auch wir nicht, kann ihn wieder auslesen. Deshalb wird er nur einmal angezeigt.

Support

Bei Fragen, Fehlern oder Hilfe zu deinem Konto schreib an [email protected].

Übliche Antwortzeit: 24–48 Stunden an Werktagen.