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:
- Öffne den Tab Mehr und gehe zu Home Assistant und Alexa.
- Tippe auf Aktivieren.
- Tippe auf Token erstellen.
- 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
| Endpunkt | Funktion |
|---|---|
GET /v1/due?days=0..7 | Pflege, 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/plants | Listet 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}/fertilizations | Düngeverlauf einer Pflanze. Dieselben optionalen Parameter. |
GET /v1/actions | Mit deinem Token eingetragene Aktionen. limit ist optional (1 bis 100, Standard 20). |
GET /v1/rooms | Listet 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-Keysenden: 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
| Status | Code | Bedeutung |
|---|---|---|
| 400 | bad_request | Die Anfrage ist fehlerhaft aufgebaut (zum Beispiel ein Parameter außerhalb des Bereichs). |
| 400 | invalid_date | Das Datum ist ungültig: Es liegt in der Zukunft, vor der Aufnahme der Pflanze oder ist kein ISO 8601. |
| 401 | invalid_token | Der Token fehlt, ist falsch oder wurde widerrufen. |
| 401 | token_expired | Der Zugriffstoken ist abgelaufen und muss erneuert werden (Alexa macht das selbst). |
| 402 | api_access_expired | Der API-Zugang ist beendet (Premium oder Pass). Verlängere ihn in der App. |
| 403 | insufficient_scope | Der Token hat keine Berechtigung, Pflege einzutragen. |
| 403 | write_disabled | Schreibzugriffe sind auf unserer Seite vorübergehend deaktiviert. Lesen funktioniert weiter. |
| 404 | not_found | Die Route, die Pflanze oder die Aktion existiert nicht. |
| 404 | nothing_to_undo | Es gibt nichts von deinem Token, das sich rückgängig machen lässt. |
| 409 | already_gone | Was du rückgängig machen wolltest, war bereits entfernt. |
| 410 | expired | Die Aktion ist älter als 24 Stunden und kann nicht mehr rückgängig gemacht werden. |
| 429 | rate_limited | Zu viele Anfragen. Warte die im Header Retry-After genannten Sekunden ab. |
| 503 | api_disabled | Die 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.