Babybuddy mit openHAB verwenden

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

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert