Wie du den Brack Order Button zum Smarthome Device machst

8. Februar 2019 - von Olivier Oswald

BOB's Geschichte

Zusammen mit dem Onlineshop Brack.ch starteten wir im Herbst 2015 ein Projekt, aus dem später der Brack Order Button, kurz "BOB", entstand. Ursprünglich sollte der BOB eine Kopie des Amazon Dash Button werden. Im Projektverlauf entwickelte sich der BOB jedoch zu einem veritablen IoT-Gerät mit vier Buttons und einem wiederaufladbaren Akku. Mit Hilfe eines koreanischen Entwicklungspartners wurde das Gerät schlussendlich in China produziert. Inzwischen haben sich die Voraussetzungen allerdings geändert: Brack stellt den Service Mitte 2019 aufgrund von mangelndem Interesse der Kunden ein.

Zweites BOB-Leben?

Als Mit-Entwickler von BOB, habe ich mir lange überlegt, wie ich den BOB zuhause in unserem Smart Home einsetzen könnte, also damit ein Gerät steuern oder eine Aktion auslösen könnte. Da es mehrere Sekunden dauert, bis ein Knopfdruck übermittelt wird, taugt der Button wenig für direkte Interaktionen wie dem Einschalten von Licht. Ich fand hingegen einen Anwendungsfall in der Küche, wo wir einen Sonos Lautsprecher zum Radiohören nutzen. Das Einstellen eines Radiosenders ist mit der fummeligen Sonos App relativ mühsam und man benötigt ein griffbereites Smartphone oder Tablet. Das sollte mit dem BOB einfacher werden.


Wie funktioniert der BOB?

Ganz einfach: Drückt man einen der Knöpfe vom BOB, verbindet sich dieser mit dem heimischen WLAN und ruft anschliessend einen Webservice von Brack auf, wo unter anderem die Nummer des eben betätigten Knopfes übermittelt wird. Hat dies geklappt, leuchtet die LED kurz grün auf und der BOB fällt wieder in den stromsparenden Tiefschlaf. Der ganze Vorgang dauert etwa acht Sekunden.

Ein eigener Webservice für den BOB

Die Voraussetzung für die Integration des Buttons ist ein Webservice, der das Drücken der Tasten registriert. Diesen Webservice kann man auf tausend verschiedene Arten bereitstellen, sei es mit Python, nodejs, dotNetCore, PHP, u.v.m.

Ich habe node-red zur Hand genommen, ein Tool mit welchem man in einem visuellen Editor Datenflüsse herstellt und so verschiedene Geräte miteinander verbindet. Node-red läuft bei mir auf einem Raspberry Pi und ich setze es immer dann ein, wenn meine Hauptsteuerung von Loxone mit einem Gerät nicht reden mag. In node-red habe ich also einen neuen "Flow" erstellt und auf diesem die drei Nodes "http", "function" und "http response" miteinander verbunden:

Beim "http in" Node nahm ich als URL "/webhook/bob/:device/:hw/:fw", das ist die Adresse, unter welcher wir Daten vom BOB empfangen werden.

Die Funktion "clear payload" sorgt für eine leere Antwort an den Button:

Hat man den Flow fertig, muss man diesen mit der Schaltfläche "Deploy" aktivieren. Anschliessend testet man den so erstellten Webservice im Browser durch Eingabe der URL

http://<server_ip>:1880/webhook/bob/a/b/c

Am Besten hängt man noch einen Debug-Node in den Flow, dann sieht man sofort, was der Webservice empfängt.

BOB Konfigurieren

Nun muss man dem BOB die URL vom neuen Webservice beibringen. Dazu drückt man zwei Tasten auf dem BOB gleichzeitig, bis die LEDs abwechslungsweise blau blinken. Danach öffnet man die WLAN-Einstellungen eines Computers und verbindet sich mit dem WLAN vom Button: Das Passwort dazu lautet "brack.ch". Man verliert dabei natürlich die Verbindung ins heimische Netz und zu node-red, daher nimmt man für die nächsten Schritte besser einen separaten Computer oder ein Tablet zur Hand.

Zum Ändern der WLAN-Einstellungen oder der Webservice URL vom BOB müssen wir einen POST-Request mit ein bisschen JSON an den Button senden, was man am einfachsten mit Postman bewerkstelligt:

POST http://192.168.1.1/config

{ "wifi_ssid": "mein_wifi", "wifi_pwd": "mein_wifi_passwort", api_endpoint": "http://192.168.10.10:1880/webhook/bob/ }

Wichtig: Der api_endpoint muss mit einem "/" enden. Anschliessend aktiviert man die Konfiguration mit einem weiteren POST-Request:

POST http://192.168.1.1/endconfig

Jetzt verbindet sich der BOB mit dem WLAN und ruft den eben konfigurierten Webservice auf, um den Button zu registrieren. Klappt dies, leuchten alle vier LEDs grün auf, ansonsten wird der Fehlversuch mit rotem Blinken signalisiert und man muss wieder von vorne beginnen. Die Firmware vom Button ist leider sehr anfällig und verzeiht keine Fehler.

Den Webservice ausbauen

Ist der Button richtig konfiguriert, schickt dieser von nun an jeden Tastendruck an den Webservice.
Dazu ruft der Button jeweils die URL <api_endpoint>/<orderid> per PUT-Request auf. In node-red benötigen wir daher einen weiteren Webhook, welcher auf PUT-Anfragen auf diese URL reagiert. Dazu platzieren wir wiederum drei Nodes "http in", "function" und "http response" auf unserem Flow:

Beim "http in" Node stellt man die Methode auf "PUT" und die URL "/webhook/bob/:orderid" ein. Im function Node setzt man die Payload, also die Antwort auf den PUT-Request, wie folgt:

Das JSON mit code=201 bedeutet soviel wie "Bestellung angenommen". Am besten wird gleich noch einen Debug-Node anhängt. Danach können die Änderungen in node-red mit der Schaltfläche "Deploy" aktiviert werden. Am Ende sollte man also einen Flow haben, der ungefähr so aussieht:

Hat man das erledigt, sollte nun der BOB nach einem Tastendruck ein paar mal blau blinken und dann müsste die LED grün aufleuchten. Leuchtet diese hingegen rot, ist leider etwas nicht in Ordnung.

Das Radio einschalten

Nachdem unser Webservice funktioniert, können wir uns dran machen auf den BOB zu reagieren. Beim Tastendruck schickt dieser einen Request im JSON-Format mit Taste (buttonID), Gerätenummer (deviceID) und Batteriestand (battery) an unseren Webservice:

{ "deviceID": "60:C5:A8:6A:97:09", "buttonID": 2, "type": "tap", "battery": 40, "hw": "1.1", fw": "1.2.3.4 }

Wir ergänzen unseren Flow mit einer weiteren Funktion, die ich "handle button tap" nenne:

In der Funktion werten wir die "Bestellung" aus und senden mit dem "http request" Node ein Kommando an Sonos, um den gewählten Radiosender einzustellen. Dazu habe ich mir bei Tunein die Nummern von vier Radiosendern herausgesucht und stelle entsprechend der gedrücken Taste die URL für den Web-Request an Sonos zusammen.

Zum Steuern von Sonos nutze ich node-sonos-http-api welches ich auf meinem NAS installiert habe. Über dessen API kann man praktisch alles mit seinen Sonos-Speakern anstellen - neben Musik kann man auch kurze Clips oder Text-to-Speech Durchsagen ausspielen. Es wäre jetzt also ein leichtes Spiel, mit einem BOB-Tastendruck die Durchsage "Das Essen ist fertig" im Kinderzimmer abzuspielen. Das bringt mich gleich auf neue Ideen und ich bin gespannt, was ihr mit euerem BOB im Smart Home anstellt 😁.

Limitationen

Der BOB kann zwar per SSL kommunizieren, dies jedoch nur mit dem Backend von Brack. Das liegt daran, dass in der Firmware nur Zertifikate von Brack hinterlegt sind, weil es im Flash-Speicher vom Button zuwenig Platz für die über 100 Root-Zertifikate hat, welche ein Browser heutzutage benötigt.

Fazit

Ich hoffe diese kurze Anleitung wie der Brack Order Button "zweckentfremded" werden kann, hat euch gefallen. Nebenbei bietet der Beitrag vielleicht auch noch die einte oder andere Inspiration für kreative WiFi-SSIDs und ihr wisst jetzt was meine Lieblingsradiosender sind. Ich freue mich auf euer Feedback!

Kleine Ergänzung noch: Auch Hans vom Technikblog hat über den BOB geschrieben. Für was er den BOB verwendet, könnt ihr hier nachlesen.

Wir haben grad gemerkt, dass du mit Internet Explorer surfst. Unsere Webseite sieht damit leider nicht so schön aus.

Du willst erfahren warum das so ist?
Wir haben darüber geschrieben.

Zum Blog

Du brauchst Hilfe bei der Umstellung?
Melde dich. Wir helfen gern.

Kontakt

Einen neuen Browser installieren?
Hier gibt es Auswahl.

Browser