Ich habe die Feiertage genutzt, um meine FYTA-Pflanzensensoren auf den Timberwolf zu bringen. Grundsätzlich gibt es dazu die Varianten IFTTT und FYTA Public API. Da im IFTTT nur Warnungen verschickt werden, aber keine Statusdaten verfügbar sind, habe ich mich für die HTTP-Integration entschieden. Perplexity hat mir bei der Ersteinrichtung und dem repetitiven Anlegen der einzelnen Sensordaten geholfen.
Einrichtung des HTTP-Client
- HTTP-Client-Subsystem "FYTA" anlegen.
- Im Ressourcen-Manager "Neuen HTTP-API Server hinzufügen"
- Autorisierung "Bearer Token", Hostadresse "https://web.fyta.de" Port 443
- Als Wert den Token eintragen, den man auf der FYTA-Seite web.fyta.de unter "API Token" generieren kann.
- Validierung Server-Zertifikat aktivieren

A) Gesamtliste der Pflanzen und ihrer Zustände über /api/user-plant
- Ressource hinzufügen: Ressource "/api/user-plant", Request-Methode GET, Auslöser-Intervall 30 Minuten, Response Content-Type "application/json"

- Hiermit entsteht die Gesamtliste aller Pflanzen, die man mittels "Empfangene und gesendete Rohaten anzeigen" anschauen kann.
Die Werte jeder einzelnen Pflanze lassen sich mit "Auswertung HTTP-Antwort hinzufügen" als Ressource erstellen. - Die Identifikation der Pflanze erfolgt entweder über die Reihenfolge im json (Selektor: .plants[0] und fortlaufend [1], [2], ...) oder über die eindeutige ID (Selektor: .plants[id=12345]). Ich empfehle die Pflanzen-ID (Achtung: "id" aus der Gesamtliste, nicht "plant_id"), da diese auch beim Austausch von Sensoren erhalten bleibt.
- Nun können die erwünschten Werte für jede Pflanze einzeln erstellt werden. Leider ist die API-Dokumentation unvollständig, es gibt noch einige weitere Datenfelder, z. B. "isBadge" zeigt, ob es eine Meldung für die Pflanze in der App gibt (und "noOfbadge" die Anzahl der Meldungen), umgekehrt zeigt "isDoingGreat", dass alles ok ist. Im Gegensatz zur Dokumentation zeigt bei mir .plant.status immer "2", egal ob die Pflanze Warnungen hat oder nicht. Die Felder "notification" geben leider nicht an, ob es einen Hinweis gibt, sondern konfiguriert, ob der Sensor entsprechende Hinweise ausgeben soll oder nicht.
Ich wollte eine Detailseite erstellen, auf der ich alle Daten zu einer Pflanze anzeigen lassen, kann, z. B. auch die letzte Düngung oder ob die Batterie des Sensors bald leer ist. Dafür wollte ich nicht jedes eizelne Element für jede Pflanze erstellen, sondern habe es mit einem dynamischen Aufruf erstellt, der in der VISU als Detailseite mit Auswahlmöglichkeit der Pflanze realisiert ist.
- Ressource hinzufügen: Ressource "/api/user-plant/<id>", Request-Methode GET, kein Auslöser-Intervall (Auslösung erfolgt über den Aufruf des Objekts), Response Content-Type "application/json"

- Ein "Objekt zur HTTP Abfrage hinzufügen" mit der Information: Lokation "URI", Format "Ganzzahl (INT)", Selektor "id", Auslöser "Wertänderung löst Abfrage mit Übergabe NUR des aktuellen Objektwerts DIESER Transaktion aus"
- Passende Datenfelder entsprechend Codierung im json anlegen, z. B.
- .plant.nickname
- .plant.fertilisation.last_fertilised_at
- .plant.measurements.nutrients.status
- Diese Felder können dann der Detailübersicht in der VISU zugeordnet werden (siehe Beispiel unten).
In der VISU habe ich ein Info-Schaltfläche erstellt, die in der Detailansicht alle entsprechenden Datenfelder enthält. Zur Auswahl habe ich bei "Basiskonfiguration - Wertaussendung" die verschiedenen Pflanzen-IDs ("id" in JSON) mit ihrem Namen hinterlegt. So erhalte ich eine Seite mit allen Pflanzen zur Auswahl, durch die ich durchtippen kann:

Die Anzeigewerte habe ich entsprechend Dokumentation übersetzt, z. B. für den Düngerwert:

Auf der VISU-Seite selbst habe ich auch noch für jede Pflanze ein eigenes Symbol mit den beiden Werten "Wasser" und "Dünger" (aus der Gesamtliste A) als zwei Werte auf der Kachel erstellt, damit ich auf einen Blick sehen kann, ob es allen Pflanzen gut geht.
Als zukünftige Verbesserung wäre es schön, wenn ich einen Array aus den Pflanzen-IDs (Gesamtliste) erstellen könnte und diesen dynamisch in der VISU anzeigen lassen kann. Derzeit sind alle Pflanzen "hard-coded" in der VISU als Werte hinterlegt. Im Idealfall könnte ich auch die Symbole nur einmal erstellen und mit "ID+1" von einem zum nächsten Symbol die Pflanzen der Reihe nach abfragen, ohne dass der Wert überschrieben wird (wie in der dynamischen Abfrage B oben).
Viel Spass beim Nachbauen!
André

