Bolt ist ein Kickstarter Projekt das aktuell läuft. Die Idee ist es (soweit ich es verstanden habe) eine einfache Plattform für das Internet der Dinge zu bekommen. Diese soll einfach programmierbar sein damit sich Projekte schnell und erfolgreich umsetzen lassen.
Ok, soviel zu den "versprochenen" Dingen. Vorab einige Worte zu Bolt/mir/warum.
Ich kenne einen Mitarbeiter der Firma, die das Projekt finanzieren will (und auch schon hat). Die Firma selbst ist in Indien und mein Freund hat mich gefragt, ob ich nicht Lust hätte etwas kurzes über Bolt auf Deutsch zu schreiben, inkl. eines kurzen ersten Projektes. Klar dacht ich mir, warum auch nicht. Dazu hab ich einen Bolt gratis gestellt bekommen, ich persönlich hätte mir Bolt wahrscheinlich nicht gekauft, da ich zu wenig Zeit habe damit ernsthaft rum zu spielen. Ansonsten ist es wieder nur ein Gadget, dass im Schrank verstaubt. Ich schreibe und sage auch grundsätzlich was ich denke, egal ob mir was geschenkt wird oder nicht.
Was will ich hier präsentieren? Ich habe ehrlich gesagt mich noch überhaupt nicht mit Bolt beschäftigt, ich will einfach nur sehen: Wie schwer ist der Einstieg. Bei vielen Produkten muss man erst, mehr oder weniger, aufwendig eine grauenhafte IDE oder Arduino Umgebung installieren und dann in einem nicht so schönen C++ Dialekt versuchen Probleme zu lösen, Die meisten Probleme sind relativ einfach, allerdings ist es gerade für Einsteiger manchmal sehr schwierig die einfache Probleme auch einfach in Code abzubilden. Ich hoffe Bolt ist da anders und vereinfacht die Sache, das wäre zumindest meine Erwartung. Ich persönlich würde mich als ganz passablen Programmierer bezeichnen und habe auch Informatik studiert. Um möglichst schnell zu einem Ergebnis zu kommen, muss die Programmierumgebung aber möglichst einfach sein. Wir werden sehen...
(P.S. Da ich erkältet bin gibt es die Videos leider nur ohne Ton bzw. mit Untertitel)
Unboxing und InbetriebnahmeErster Schritt: Auspacken und testen ob es funktioniert.
Bolt kommt in einer kleinen einfachen Verpackung. Meine ist etwas mitgenommen, ok hat auch einen langen Weg hinter sich (Indien-Deutschland). In der Packung ist der Bolt und noch ein paar Kleinigkeiten:
- 2xLEDs
- 1x Widerstand
- 1x Photowiderstand
- 1x Pushbutton
- 3x Jumperkabel
- 1x Annäherungssensor
- 1x Buzzer
Was bei eurem Bolt dabei ist hängt natürlich davon ab, welches Paket ihr gewählt habt. Für mich war das Beta-Tester Paket. Ist nicht gerade viel, aber für die meisten Projekte kann man sich günstig auch in hier in Deutschland Nachschub besorgen. Außerdem hat jeder seine eigenen Vorstellungen von Projekten und braucht deswegen eh immer etwas anderes, als was in der Verpackung ist (so geht es mir zumindest).
Also zur Inbetriebnahme. Bolt kommt ohne IDE aus, die ihr euch auf eurem PC installiert. Das ganze läuft eine Browserapplikation, der Bolt kommuniziert auch darüber (den Datenschutz blende ich hier erstmal aus, dazu schreibe ich am Ende noch etwas). Zuerst müsst ihr euch einen Account auf https://cloud.boltiot.com erstellen und euch die Android/Apple Boltiot App installieren, die ihr erstmal nur für die erste Inbetriebnahme braucht. Zum initialen Verbinden baut der Bolt einen WLAN-Accesspoint auf, mit dem ihr euch mit dem Handy verbindet. Anschließend gebt ihr das Passwort für euer WLAN ein und der Bolt verbindet sich mit dem WLAN.
Der Verbindunsaufbau funktioniert überraschend unkompliziert und hat bei mir auf Anhieb geklappt. Dies ist schonmal ziemlich praktisch, wenn es daran scheitert oder das erst 10 Versuche benötigt, hat man an dieser Stelle schon keine Lust mehr und schmeißt das Ding in den Müll. Zwei Kritikpunkte habe ich trotzdem gefunden: Für was braucht die App meine Standortdaten und warum zum Teufel muss ich während der Verbindung zum Bolt meine mobile Datenverbindung ausschalten???
Die App selber bietet offensichtlich nicht viel Funktionalität. Man kann eigentlich nur Bolts hinzufügen und sich eine Übersicht über alle zum Konto verbunden Bolts anzeigen lassen. Schauen wir uns das Webinterface an und testen ein Hello World Beispiel.
Webinterface und Hello WorldDas Webinterface ist recht einfach gestaltet und beinhaltet auch einen "Quick Start Guide" auf Englisch. Ich überspringe das jetzt mal, denn das kann sich ja jeder selber anschauen. Unter "Docs" gibt es auch ein wenig Dokumentation, auch wenn die im Moment noch etwas spährlich ist. Ich hoffe das wird bis zum Ende des Kickstarter Projekts noch besser und umfangreicher.
Die Organisation ist auf den ersten Blick ganz durchdacht. Es gibt Bolts, nichts anderes als die physikalischen Bolts ohne zusätzliche Hardware, und Projects, die dann einen Bolt in ein Projekt integrieren. Das ist ganz nett und weckt in mir die Hoffnung, dass ich mehrere Projekte anlegen kann, wobei immer nur eines aktiv ist. So kann ich ganz einfach meinen Bolt zwischen verschiedenen Projekten hin- und herschieben und damit habe ich eine fertige Integrationsumgebung für meine Projekte. Es gibt auch noch einen Quickstartguide als PDF (link), das auch ohne Anmeldung verfügbar ist und nochmal eine Übersicht + zwei Demoprojekte darstellt.
Als Hello World Projekt nehme ich ein typisches Beispiel für eingebettete System: Blinken lassen einer (bzw. zweiter LEDs). Also das (eigentlich) einfachste der Welt. Man muss dazu in einem graphischen Editor die Pins als Ausgänge konfigurieren und anschließend den Code für den Bolt schreiben. Außerdem muss man noch einen sogenannten API-Code generieren, der dann zur Kommunikation zwischen Bolt und Cloud verwendet wird. Anschließend kann man die Konfiguration zum Bolt hochladen und durch das Webinterface mit dem Bolt "kommunizieren".
Der verwendete Code befindet sich im Anhang. Ihr werdet mit Sicherheit genauso überrascht sein wie ich. Man muss also Code für I/O in HTML schreiben. WTF? Das finde ich ja mal richtig bescheiden und geht eigentlich gar nicht. Zum technischen Hintergrund: Der Code wird so wie er ist auf den Bolt hochgeladen, die Cloud dient dann offensichtlich in Zukunft nur noch als Gateway für den Bolt. Die HTML Seite auf dem man abschließend landet enthält genau den Code, den man auf den Bolt geladen hat. Dies macht auch ein Blick in die API deutlich. Ok, dieser Ansatz macht durchaus Sinn, für mich als Informatiker ist er trotzdem nicht so zielführend. Das erste das ich mich gefragt habe: Kann ich damit über while-Schleifen und if-Bedingungen erzeugen? Wie reagiere ich dynamisch auf Input und führe entsprechend irgendwelche Aktionen aus? Hier bin ich noch nicht so überzeugt von der Umsetzung. Das einzig positive an der Sache ist, dass ich über den erzeugten Link alleine den Bolt steuern/auslesen kann.
Ok, wir haben jetzt ein sehr einfaches Projekt gesehen. Da ich noch nicht ganz so überzeugt von der Umsetzung auf dem Bolt lokal bin, habe ich, nach etwas genauerem lesen der Dokumentation, mich dazu entschieden das ganze etwas anders zu machen. Was soll mein Projekt machen: Ich hätte gerne einen log, wann meine Haustüre auf- und zugemacht wird. Dazu verwende ich den Näherungssensor, den Bolt und programmiere mir Requests an den Bolt über python. Es ist also eher eine Applikation die bei mir lokal auf dem Rechner läuft und sekündlich beim Bolt den Wert des Näherungssensors abfrägt. Wenn die Türe aufgemacht wurde werde ich außerdem eine LED am Bolt blinken lassen. Los gehts...
Zuersteinmal muss man sich mit der API-Dokumentation für Python auseinandersetzen, wie in der Docs beschrieben. Im Prinzip besteht mein zukünftiges Programm aus Abfragen aus meiner Applikation (die auf einem lokalen Rechner läuft) an den Bolt, wie der Zustand des Näherungssensor aktuell ist. Dazu benötigen wir auch den HTML Code nicht mehr und können ihn später vielleicht noch für eine Übersicht benutzen, nicht aber wirklich für den ausführbaren Code.
Also erstmal ein neues Projekt erstellen und alles konfigurieren (obwohl die Konfiguration IMHO unnötig ist, wenn man eine python App auf seinem Rechner laufen lässt). Zum ausprobieren schreiben wir uns außerdem noch einen kurzen Code, den wir laufen lassen um zu testen welche werte wir von dem analogen Input rausbekommen. Der Code sieht dann so aus:
#!/usr/bin/env python
import time
from boltiot import Bolt
api_key= "copy here the api key"
device_id = "BOLT3432153"
mybolt = Bolt(api_key, device_id)
while(1):
response = mybolt.analogRead('A0')
time.sleep(1)
print response
Es ist hier normal das nicht immer 0 rauskommt. Ein analoger Eingang, der nicht auf einen fixen Wert (0,1) gelegt ist, erzeugt immer einen gewissen jitter. Wenn wir jetzt noch ein Kabel von 3V3 auf A0 verbinden sehen wir den Wert 1024, es handelt sich also um einen 10-bit ADC. Damit sind die Werte von unter 100 quasi 0 und wir können weitermachen.
Nun kommt der Teil, in dem man einfach etwas herumspielen und ausprobieren muss, wenn man keine Lust auf das lesen von einem Datenblatt hat. Wir verbinden zuerst den Näherungssensor mit dem Bolt, lassen anschließend unser kleines Programm laufen und schauen uns die ausgegebenen Werte an. Dementsprechend müssen wir noch das Poti einstellen um die Frequenz der Infrarot-LED einzustellen (Produkt). Ich musste dafür ganz schön weit drehen bis ich das Signal vernünftig verarbeiten konnte.
Da wir jetzt unsere Rahmenbedingungen kennen können wir auch unseren Python Code noch entsprechend anpassen.
#!/usr/bin/env python
import time
import re
from boltiot import Bolt
api_key= "boltid"
device_id = "BOLT3432153"
upper_limit = 1000
mybolt = Bolt(api_key, device_id)
while(1):
time.sleep(1)
response = mybolt.analogRead('A0').split(",")
if response[0] == '{"success": "1"': # Das format ist nicht gut...
m = re.search('\d+', response[1])
if m:
if int(m.group(0)) > upper_limit:
print "Die Tuer ist auf"
else:
print "Die Tuer ist zu"
Nun haben wir den Code der anhand eines Schwellwerts überprüft ob die Türe auf oder zu ist. Natürlich werden wir einige falsche Werte geliefert bekommen, aber im Prinzip ist das ganze ganz einfach. Die Ausgabe dazu sieht folgendermaßen aus:
Wir könnten jetzt das ganze auch mit der Bolt Cloud verbinden, dann hätten wir allerdings den Nachteil, dass das minimale Abfrageintervall bei 5 Minuten liegt (ich denke das wurde so gemacht um die Cloud vor zu vielen Anfragen zu schützen, trotzdem schade).
Ich mache es aber trotzdem mal und platziere den Sensor bei meiner Türe. Dann weiß ich immerhin wenn eine Türe länger als 5 Minuten offen gestanden hat.
Das Ergebnis sieht dann in etwa so aus:
Die hohen Werte bedeuten es konnte kein Objekt erkannt werden und die Tür stand somit offen. Die niedrigen Werte bedeuten hingegen das ein Objekt erkannt wurde und die Tür somit geschlossen war.
FazitAktuell hinterlässt Bolt bei mir ein zwiespältiges Ergebnis. Auf der einen Seite gefällt mir die Benutzeroberfläche, die Tatsache das keine IDE benötigt wird und die schnelle und unkomplizierte Einrichtung. Auch die verschiedenen Graphen, die erzeugt werden sind ganz nett. Die Interaktion mit dem Bolt über url-Addresse und Programmiersprachen werten das Gerät nochmals auf und lassen vielfältige Ideen zu. Ich habe mich jetzt ca. 2,5h mit Bolt beschäftigt und die Einstiegshürde ist doch recht gering.
Andererseits lässt vor allem die Programmierung des Geräts noch zu wünschen übrig. Auch die "Intelligenz" ist noch nicht vorhanden. Der verbaute ESP ist mindestens ein Dualcore, es sollte mindestens möglich sein simplen Code auf dem Gerät auszuführen (lua Interpreter etc.) sodass Werte auch lokal gespeichert werden können und z.B. nur alle 5 Sekunden mit der Cloud synchronisiert werden können. Ansonsten bleibt das Gerät ziemlich dumm und kann nur abgefragt werden und wenig aktiv machen (soweit ich das bis jetzt durchblickt habe).
Auch zum Thema Datenschutz muss noch etwas gesagt werden: Jedem steht es frei alle aufgezeichneten Sensordaten auf eine externe Cloud abzulegen. Aber zumindest als Option wäre es schön, wenn es sowas wie eine "lokale" Cloud auf z.B. einem Raspberry Pi gäbe. Ich wäre durchaus bereit dafür etwas Geld auszugeben.
Insgesamt hat mir der Bolt doch recht gut gefallen. Ich hoffe nur dass sie in Bezug auf Programmierbarkeit noch einiges zum positiven verändern!
Comments
Please log in or sign up to comment.