Die direkte Anbindung der iSpindel an Ubidots lässt normalerweise kaum Wünsche offen. Jedoch hat eine reine Online-Lösung nicht nur Vorteile. Durch schwache WLAN-Verbindungen, eine gestörte Internetanbindung, Wartungsarbeiten oder Lastspitzen beim Online-Anbieter können gesendete Messpunkte der iSpindel unwiderruflich verloren gehen. Weiterhin sind der Betrieb von mehr als einer iSpindel und die Nutzung der Benachrichtigungsfunktionen bei Ubidots nicht kostenfrei. Die Daten werden auf Servern im Internet gespeichert, die nicht unter unserer Kontrolle stehen.
Ein eigener Server
So entstand recht schnell der Wunsch nach einer eigenen, dedizierten Open-Source-Serverlösung, die wahlweise im Heimnetzwerk oder sogar – auch zusätzlich – auf einem angemieteten (virtuellen) Host betrieben werden kann. Der lokale „RasPySpindel-Server” kann Onlinedienste wie Ubidots wahlweise ersetzen oder die Nutzungsmöglichkeiten für die iSpindel-Daten durch zusätzliche Features abrunden. Er ermöglicht eine konsistente Aufzeichnung der Messpunkte, auch ohne aktive Internetverbindung, und verursacht keine Nutzungsgebühren beim Einsatz mehrerer iSpindeln.
Durch seine offene Architektur erlaubt der „RasPySpindel-Server” unter anderem auch das selektive Weiterleiten von lokal empfangenen Daten an Ubidots und bietet dem Anwender somit die Möglichkeit, das Beste aus zwei Welten zu nutzen. Eine Anbindung an weitere Dienste kann sehr leicht implementiert werden.
Eine wichtige Anforderung war, diese Lösung möglichst plattformunabhängig zu gestalten, sodass diese grundsätzlich auf jedem beliebigen Rechner, der 24/7 erreichbar ist, ohne Probleme zum Laufen gebracht werden kann. Die Wahl der verwendeten Sprache fiel also auf Python 2.7, das auf jedem aktuellen Betriebssystem ohne größeren Aufwand verfügbar ist, ob es sich nun um eine modifizierte Fritz-Box, einen Windows-Rechner oder ein Mac OS X oder anderes Unix-(Linux/BSD-)basiertes System handelt, und gerade im Hinblick auf diese Aufgabe sehr komfortable Möglichkeiten bietet, ohne große Hürden bei der Suche nach unvermeidlichen Fehlern.
Server-Hardware
Weit verbreitet im Heimbereich sind vor allem Mac Mini und Raspberry Pi. Letzterer besticht durch geringe Anschaffungskosten und minimalen Platz- und Energiebedarf. Kaum größer als eine Zigarettenschachtel und für sich allein auch nicht teurer als zwei bis drei davon, verbraucht dieses Gerät zwischen 1,2 und 3 Watt Energie, verfügt dabei aber über einen Quad-Core-Prozessor. Ein durchgehender Betrieb wird also in der jährlichen Stromrechnung kaum auffallen.
Das aktuelle Modell der dritten Generation bringt eingebautes WLAN und Bluetooth mit, verfügt über vier USB‑2.0‑Anschlüsse, HDMI, Ethernet und einen Audio-Ausgang. Optional ist auch ein Touch-Display erhältlich. Dieses ist aber eher „nice to have” und in keiner Weise nötig.
So wie im Foto rechts sieht der „Himbeerkuchen” typischerweise aus. Das vom Autor empfohlene FLIRC-Gehäuse sorgt auch für passive Kühlung.
Eine ständig wachsende Zahl von Betriebssystemen, darunter sogar Windows 10 in der IoT-Version, aber auch verschiedene „Flavors” von Linux machen es extrem vielseitig. Zudem kann es sogar als WLAN-Repeater bzw. „Access Point” eingesetzt werden, da die Empfangsqualität des eingebauten Moduls sehr stark ist; dieses bewährt sich hier bislang mit Bravour und übertrifft sogar teurere Repeater in puncto Reichweite.
Die empfohlene Standard-Installation für den eigenen lokalen iSpindel-Server bezieht sich daher auf den Raspberry Pi 3 mit Raspbian als Betriebssystem, das stark an das weitverbreitete Debian-Linux angelehnt ist, stetig weiterentwickelt wird und eine riesige Vielfalt an installierbaren Softwarepaketen mitbringt, sodass das Gerät durchaus gleichzeitig für viele verschiedene Aufgaben inklusive Multimedia-Server, Heimautomatisierung und vieles mehr genutzt werden kann – neben der Hauptaufgabe, den iSpindel-Server zur Verfügung zu stellen.
Aber auch auf anderen Geräten, allen voran Mac OS X, stellt die Installation kein großes Hindernis dar; das Apple-Betriebssystem basiert letztlich auch auf Unix, halt nur nicht Linux, sondern BSD. Ein Mac Mini findet sich in vielen Haushalten bereits als Medienserver.
Software
Die Software befindet sich momentan noch in einem frühen Stadium. Sie ist in viele Richtungen erweiterbar (vor allem die Benutzerfreundlichkeit), deckt aber bereits die für uns Hobbybrauer wichtigsten Bereiche ab.
Das Kernstück ist das in Python geschriebene eigentliche Server Skript. Es nimmt die Daten der iSpindel als TCP Paket entgegen. Anders als bei direkter Ubidots Anbindung ist hier also kein umständlicher Verbindungsaufbau nötig; die iSpindel schickt die Daten ab und legt sich sofort wieder schlafen, was schon mal ganz von selber für mitunter deutlich höhere Batterielaufzeiten sorgt (ein netter Nebeneffekt).
Was nun mit den empfangenen Daten passiert, ist konfigurierbar. Diese können als CSV Datei (eine einfache Textdatei, mit den einzelnen Parametern durch Kommata oder Semikola getrennt, jeder Vorgang in einer Zeile) gespeichert werden.
Weiterhin können die Daten in einer (MySQL) Datenbank abgelegt werden. Ebenso ist es möglich, diese direkt an Ubidots oder andere Dienste weiterzuleiten. Schließlich lassen sich auch mehrere Instanzen des Skripts „in Reihe“ ansteuern, um z.B. Distanzen über mehrere Heimnetze zu überbrücken oder auch aus der Ferne über einen zusätzlichen eigenen (normalerweise gemieteten) Server zugreifen zu können, ohne dabei das Heimnetz zu gefährden.
Die Konfiguration erfolgt momentan noch direkt im Skript selbst (Datei iSpindle.py):
# General DEBUG = 0 # Set to 1 to enable debug output on console PORT = 9501 # TCP Port to listen to HOST = '0.0.0.0' # Allowed IP range. # CSV CSV = 0 # Set to 1 if you want CSV (text file) output OUTPATH = '/home/pi/iSpindel/csv/' # CSV output file path; filename will be name_id.csv DELIMITER = ';' # CSV delimiter (normally use ; for Excel) NEWLINE='\r\n' # newline (\r\n for windows clients) DATETIME = 1 # Include Timestamp (Excel compatible) # MySQL SQL = 1 # 1 to enable output to MySQL database SQL_HOST = '127.0.0.1' # Database host name (default: localhost) SQL_DB = 'iSpindle' # Database name SQL_TABLE = 'Data' # Table name SQL_USER = 'iSpindle' # DB user SQL_PASSWORD = 'ohyeah' # DB user's password (change this) # Ubidots (using existing account) UBIDOTS = 1 # 1 to enable output to ubidots UBI_USE_ISPINDLE_TOKEN = 1 # 1 to override token by iSpindle Config Value UBI_TOKEN = '*****************' # global ubidots token # Forward to public server or other relay (i.e. another instance of this script) FORWARD = 0 # FORWARDADDR = 'ispindle.de' # FORWARDPORT = 9501 FORWARDADDR = '192.168.2.21' FORWARDPORT = 9501
Natürlich muss nun auch die iSpindel selbst entsprechend eingerichtet werden, damit sie mit dem Server Skript erfolgreich kommuniziert. Das Script ist natürlich so ausgelegt, dass es beliebig viele (auch gleichzeitig eingehende) Verbindungen behandeln kann.
Hierzu gibt es im Konfigurationsmenü unter „Service Type“ die Option „TCP“:
Unter „Token“ kann ein Ubidots Token oder ein freier Kommentar (mit führendem * Zeichen, damit dieser ignoriert wird) eingetragen werden.
Somit ist es möglich, innerhalb eines Netzwerks verschiedene Ubidots Konten zu verwenden (Nutzungsbedingungen beachten!) bzw. nicht alle iSpindeln automatisch auch an Ubidots weiterzuleiten, um nicht unnötig Ubidots „Credits“ zu verschwenden. (So manches Ubidots Konto war plötzlich leer, weil man verschiedene iSpindeln getestet und dabei nicht daran gedacht hat, dass jede einzelne am Konto „saugt”.)
Unter „Server Address“ wird die IP Nummer des Rechners eingetragen, auf dem das Python Server Skript läuft (also die des Raspberry Pi in unserem Fall). Die Port Nummer wird auf 9501 eingestellt (bzw. auf denselben Wert wie oben im Skript unter „General“ konfiguriert; 9501 ist normalerweise frei und sollte also auch typischerweise nicht verändert werden).
Visualisierung
Für die Visualisierung der Daten gibt es nun viele verschiedene Möglichkeiten, je nach den eigenen Fähigkeiten und Vorlieben. Excel Fans können über CSV Dateien oder ODBC Schnittstelle zur Datenbank nach Herzenslust eigene Diagramme anlegen.
Eine weitere, sehr elegante und flexibel konfigurierbare Lösung bieten auch die Programme „Plot 2“ für Mac OS X, sowie „Daviz“ für iOS, beide von Michael Wesemann. Er ist selbst Hobbybrauer und iSpindel Benutzer; seine Visualisierungs Tools haben seit den späten 80er Jahren des letzten Jahrhunderts eine Fan Gemeinde. „Plot” gab es bereits auf dem „NeXT”. Hier muss man aber momentan selber noch „Hand anlegen“ und z.B. via PHP passende Schnittstellen implementieren. Es ist geplant, diese mit einzubauen; die Arbeiten hierzu sind bei Redaktionsschluss bereits recht fortgeschritten.
Letztlich steht es dem Benutzer offen, welche Möglichkeit er wählt; Alternativen gibt es genug.
Für den reinen Anwender gibt es natürlich auch eine viel einfachere Lösung, nämlich die bereits jetzt mitgelieferten Diagramme zu benutzen.
Hierzu werden zusätzlich zu Python die folgenden Komponenten benötigt:
- Apache Webserver
- PHP
- MySQL Datenbank
Zur Interaktion mit dem Raspi werden zusätzlich empfohlen:
- VNC (Server auf dem Raspi wird mit Raspi-Config aktiviert; auf dem eigenen Rechner oder Smartphone/Tablet braucht man dann noch den für privaten Gebrauch kostenlosen VNC Viewer)
- Alternativ Windows Remote Desktop
- Samba (um Ordner Windows-konform im Netzwerk zu teilen)
- Windows Benutzer brauchen „putty“ um eine SSH Verbindung aufbauen zu können (in Mac OS X oder Linux als „ssh“ bereits vorhanden)
- phpMyAdmin zur komfortablen Browser basierten Administration der Datenbank
Ausführliche und erprobte Installationsanleitungen (geeignet zum Kopieren und Einfügen) finden sich auf dem Github Repository des Projektes, siehe am Ende dieses Artikels unter „Quellen“.
Das Image
Wer sich das nicht zutraut oder den Aufwand scheut, kann auch ein fertiges Image für den Raspberry Pi herunterladen und auf eine SD Karte schreiben. Hierzu wird ein handelsüblicher USB SD Card Reader benötigt, der für wenige Euros zu haben ist. Viele Computer haben so etwas auch bereits eingebaut. Eine ausführliche Anleitung ist im heruntergeladenen ZIP Archiv als README Datei enthalten.
Solange keine speziellen Anforderungen vorliegen und der Raspberry Pi über Ethernet an den Router angeschlossen wird, funktioniert diese Lösung direkt „out-of-the-box”. Nachdem das Image auf die SD Karte geschrieben wurde kann dieser also damit gestartet und die iSpindel sofort (wie oben beschrieben) in Betrieb genommen werden.
Soll der Zugriff über das Drahtlosnetzwerk (WLAN) erfolgen, müssen vor dem ersten Start die Zugangsdaten eingetragen werden!
Hierzu öffnet man die Datei „wpa_supplicant.conf” auf dem PC mittels eines Text Editors und trägt diese Daten (Länderkennung, SSID und PSK Passphrase) dort ein. So kann der Server direkt auch ohne angeschlossene Tastatur oder Display im sogenannten „headless” Modus in Betrieb genommen werden.
Secure Shell (ssh) Zugriff auf die Kommandozeile und Zugriff auf die grafische Oberfläche PIXEL, via VNC oder Remote Desktop sind hier bereits aktiviert, um weitere Konfigurationen vorzunehmen, falls nötig oder erwünscht.
Im Unterschied zur Original Raspbian Installation wurden außerdem die Pakete für LibreOffice und Wolfram Mathematica entfernt, um Platz und Bandbreite zu sparen. Diese können natürlich bei Bedarf jederzeit über den Paketmanager wieder nachinstalliert werden.
Sobald alles erledigt und der Raspi erfolgreich gestartet worden ist, sind alle wichtigen Verzeichnisse und Dateien (auch das Server Skript selbst) im Heimnetz als Shares verfügbar; die iSpindel kann nun verbunden und die empfangenen Daten im Browser angezeigt werden.
Die URL für den Browser lautet hierzu:
http://myraspi/iSpindle/diagramm.php?name=iSpindleName
- myraspi: Steht für die IP-Adresse oder den Namen des Raspberry im Heimnetz
- diagramm: Eines der folgenden:
- angle.php: Temperatur und Neigungswinkel (Tilt)
- plato.php: Temperatur und Restextrakt nach der in der iSpindel Konfiguration hinterlegten Umrechnungsformel (Polynom)
- plato4.php: Temperatur und Restextrakt nach den in der Tabelle „Calibration“ hinterlegten Konstanten (dreistufiges Polynom); dies ermöglicht Kalibrierung im laufenden bzw. erstmaligen Einsatz der iSpindel im Gärbehälter
- status.php: Temperatur, Winkel, Batterie
- battery.php: Nur Batteriestatus
- wifi.php: Aktuelle WLAN Verbindungsqualität (ab Firmware 5.8.0)
- reset_now.php: Kein Diagramm an sich; der Aufruf dieses php Skripts trägt stattdessen eine Markierung in die Datenbank ein, die den Beginn einer neuen Gärung definiert. So lässt sich sehr leicht die jeweils aktuelle Gärkurve auswählen, siehe nächster Absatz…
- iSpindleName: Name der iSpindel (wie in deren Konfiguration eingetragen)
Die Diagrammtypen „angle“, „plato“ und „plato4“ lassen noch weitere Parameter zu, um den angezeigten Zeitraum (immer rückwirkend ab jetzt) zu bestimmen:
- hours={Anzahl der Stunden}
- days={Anzahl Tage}
- weeks={Anzahl Wochen}
- reset={0 oder 1}
Wenn reset=1 übergeben wird, zeigt das Diagramm automatisch die aktuelle komplette Gärkurve an, falls via reset_now.php ein solcher Zeitpunkt gesetzt wurde. Ansonsten gelten die Zeitangaben.
Die Diagramme sind so formatiert, dass sie auch bequem auf das kleine, offizielle 7 Zoll Touch Display des Raspberry passen und dort vernünftig dargestellt werden können.
Ein weiteres Beispiel, wie so ein Aufruf aussehen kann:
http://192.168.2.44/iSpindle/angle.php?name=Maibock&weeks=2&days=5
Der Raspberry hat also die IP-Adresse 192.168.2.44 (diese wird am besten gleich in den Einstellungen des Routers so fixiert, dass sie sich nicht mehr ändern kann; siehe hierzu die Bedienungsanleitung des Routers); der Name der iSpindel ist „Maibock“, und wir wollen die Daten der letzten 2 Wochen und 5 Tage sehen (also 19 Tage).
Anstelle der IP-Adresse kann aber auch der Netzwerkname des Raspberry stehen, sofern dieser nur in einem einzigen Heimnetz eingebucht ist (was beim Autor nicht der Fall ist). Die IP-Adresse ist immer der sicherste Weg.
Auf einem Raspi mit 7“ (Touch) Display schaut das dann so aus (Chrome Browser im Vollbildschirm Modus):
Dieses Diagramm stammt „aus dem echten Leben“. Über die dem Zeitpunkt der Aufnahme folgenden 3 Tage hat sich die rote Kurve asymptotisch geglättet und nach weiteren 3 Tagen stand der Abfüllzeitpunkt fest.
Ausblick
Künftige Versionen werden sich zunächst noch stärker mit der Benutzerfreundlichkeit befassen müssen. Neben einer Portalseite, die komfortabel die Auswahl von Diagrammen (auch per Touchscreen) ermöglichen soll, muss auch die Konfiguration und die Kalibrierung der iSpindel im laufenden Betrieb überarbeitet werden. Ein Installations- und Update Skript stecken ebenfalls noch in der Pipeline.
Auch in Arbeit ist derzeit eine Option, die iSpindel Konfiguration im laufenden Betrieb anpassen zu können, um beispielsweise das Kalibrierungs-Polynom oder das Sendeintervall der iSpindel zu ändern, während sie noch im Gärbehälter schwimmt.
Nach oben ist natürlich auch weiterhin jede Menge Luft, denn es handelt sich um ein noch recht junges Projekt, welches in (immer zu knapper) Freizeit entwickelt wurde. Brauen will man ja auch noch.
Von der Alexa Integration bis hin zu iOS Notifications und automatisierter Gärsteuerung (Temperatursteuerung anhand gemessenen Restextrakts), Integration in Apple HomeKit und so weiter und so fort; Vieles ist möglich und letztlich alles kein Hexenwerk.
Nur Zeit braucht das halt alles.
Freiwillige Helfer sind natürlich immer willkommen! Voraussetzung sind nur ein paar grundlegende Kenntnisse in HTML und PHP, sowie ein grundlegendes Verständnis für SQL Datenbanken.
Rechtliches (Lizenz)
Es gilt die GPL Standard Lizenz für Open Source. Jeder darf mit dieser Software anstellen, was er möchte.
Freuen würde ich mich über jedes Feedback; wer die Software einsetzt, sollte mir also eine kurze Nachricht an stephan@sschreiber.de schicken, so viel Zeit sollte drin sein. Das hilft auch, die Nachfrage zu beurteilen, und beeinflusst meine Motivation enorm.
Zuwendungen in Form von (selbst gebrautem) Bier werden auch gerne angenommen. Verbesserungen und Erweiterungen müssen mir mitgeteilt werden, am besten über Issues und/oder Pull Requests auf Github.
Jedwede kommerzielle Nutzung ist untersagt, wenn nicht mit mir schriftlich vereinbart. Die Diagramme basieren auf der GPL Version von Highcharts, welches bei kommerzieller Nutzung ebenfalls eine gültige Lizenz voraussetzt. Weiterverbreitung und Spiegelung sind, mit Hinweis auf diese Lizenzvereinbarung und Link auf das Github Repository, ausdrücklich erwünscht.
Quellen und Links:
- Github Repository:
https://github.com/DottoreTozzi/iSpindel-TCP-Server - Image Download:
http://sschreiber.de/download/Raspi-iSpindel-Latest.zip - Raspberry PI:
https://www.raspberrypi.org - Empfohlenes Gehäuse von FLIRC:
https://flirc.tv/more/raspberry-pi-case-gen2 - Anleitung zum Flashen der SD Karte für den Raspberry PI:
https://www.raspberrypi.org/documentation/installation/installing-images/ - Michael Wesemanns Plot Tools:
https://itunes.apple.com/de/app/plot2/id846509360?mt=12
https://itunes.apple.com/us/app/daviz/id1320607881?mt=8 - Putty:
https://www.putty.org - VNC Viewer:
https://www.realvnc.com/de/connect/download/viewer/ - Highcharts:
https://www.highcharts.com - Last but not least, deutschsprachigen Support gibt es im Hobbybrauer Forum:
https://hobbybrauer.de/forum/viewtopic.php?f=58&t=12869