In diesem Blog-Beitrag beschreibe ich, wie man Babybuddy mit openHAB verbindet, so dass z.B. über Rules Push-Benachrichtigungen erstellt werden können.
Babybuddy ist ein Tool zum Tracken von diversen Informationen über ein Baby. Dazu gehören Fütterungen, Windelwechsel, Schlaf, Größe oder auch Gewicht. Babybuddy kann selbst über Docker gehostet werden.
Dank einer REST-API von Babybuddy können diverse Daten in openHAB verarbeitet werden. Dafür wird das HTTP Binding benötigt.
Hier soll beispielhaft das Auslesen des letzten Windelwechsels und das Senden einer Push-Nachricht über die openHAB-App beschrieben werden.
Voraussetzung ist, dass das HTTP Binding in openHAB und Babybuddy installiert sind. Außerdem muss Babybuddy über das Netzwerk erreichbar ist.
Zur Verbindung mit Babybuddy wird ein „thing“ angelegt:
Thing http:url:babybuddy "Babybuddy" [
baseURL="http://192.168.56.2:7082/api/",
headers="limit=5", "Authorization=Token 11111111111111111111111111111111111111111",
refresh=1] {
Channels:
Type datetime : lastDiaperChange "Letzter Windelwechsel" [ stateExtension="changes/", stateTransformation="JSONPATH:$.results[:1].time" ]
}
Die URL zur Babybuddy-API und der Token müssen natürlich angepasst werden. Der Token befindet sich in den Benutzereinstellungen in Babybuddy ganz unten.
Danach kann ein Item angelegt werden:
DateTime babybuddy_changes "[%s]" {channel="http:url:babybuddy:lastDiaperChange"}
Beispielsweise könnte dann eine Rule zum Erzeugen einer Push-Benachrichtigung, wenn der Windelwechsel seit 4 Stunden nicht erfolgt ist (und nicht in der Nacht ist), wie folgt aussehen:
rule "PushDiaperChange"
when
Time cron "0 10 * * * ?"
then
val nowPlus4h = now.minusHours(4)
val timeDiaperChange = (babybuddy_changes.state as DateTimeType).zonedDateTime
if(timeDiaperChange <= nowPlus4h && now.isBefore(now.withHour(22).withMinute(0).withSecond(0).withNano(0)) && now.isAfter(now.withHour(7).withMinute(0).withSecond(0).withNano(0)))
{
sendBroadcastNotification("Windelwechsel sollte durchgeführt werden!")
}
end