iSpindel-TCP-Server
iSpindel-TCP-Server copied to clipboard
Generic Unix based TCP Server for iSpindel Including Charts
iSpindel Generic TCP Server
This release is now obsolete and no longer under development. For current version, please follow this fork: https://github.com/avollkopf/iSpindel-TCP-Server
(iSpindle.py Version 1.6.3)
Neu (20.06.2019) Merged avollkopf's fork. Many thanks!
Documentation will be fully updated soon.
English Version Neu (28.04.2019) Neue Diagramme: Berechneter SVG, Alkoholgehalt; Delta Plato f??r bestimmten Zeitraum; Wifi/Batterytrend Optimierte Landing page mit neuen Funktionen: M??glichkeit der Vergabe eines Sudnamens beim Reset der entsprechendne SPindel im TCP server M??glichkeit der Kalibrierung der Spindeln ??ber das Web-Interface Settings k??nnen nun auch per button ??ber das Webinterface ge??ndert werden Mehrsprachiges Interface. Deutsch und Englisch bereits implementiert. Sollte recht einfach erweiterbar auf andere Sprachen sein. Anzeige der PID des Servers in der Landing page.
Neu (15.10.2018) Neue Diagramme: Moving Average (Gl??ttung f??r angle.php und plato4.php, konfigurierbar) "Landing Page" index.php - Die lang ersehnte Auswahlseite f??r iSpindeln und Diagramme. Erreichbar ??ber "http://myraspi/index.php" (je nach Konfiguration). Am besten gleich einen Shortcut (Lesezeichen) erstellen.
Neu (02.10.2018)
CBP3 support (Dank an jlanger)
Brewpiless support (Dank an ollinator2000)
iSpindel Remote Configuration: Die iSpindel kann nun bestimmte Konfigurations Parameter empfangen.
Momentan funktioniert das nur mit der "Intervall" Einstellung.
Das Polynom und das Token k??nnen Server seitig bereits konfiguriert werden, diese werden aber von der momentanen Firmware Version (6.0.1) noch ignoriert.
Ben??tigt wird auf jeden Fall Firmware 6.0.1 oder neuer.
Neu (15.02.2018)
Neues Diagramm wifi.php zeigt die zuletzt gemessene und ??bertragene Verbindungsqualit??t zum WLAN.
angle.php, plato.php und plato4.php wurden erweitert um neue Parameter "days" und "weeks".
Die Untertitel dieser Diagramme wurden angepasst, um dies zu reflektieren und deren Lesbarkeit zu erh??hen.
3600 Stunden werden jetzt angezeigt als 21 Wochen, 3 Tage.
Die Parameter k??nnen beliebig kombiniert werden.
Neu (12.02.2018)
iSpindle.py Version 1.4.0
Angepasst an Sam's iSpindel Firmware 5.8 und aufw??rts.
Die nunmehr mitgesendeten Daten (Intervall, WLAN Empfangsqualit??t) werden jetzt mit abgefragt und in der Datenbank hinterlegt.
Alles sollte nach wie vor r??ckw??rtskompatibel sein.
Im Debug Modus wird ein Hinweis ausgegeben, falls die iSpindel Firmware "veraltet" ist.
Bitte bei bestehenden Installationen die Datenbank anpassen und um die n??tigen Felder erweitern, siehe MySQL_Update-3.sql Skript.
Neu (20.01.2018)
iSpindle.py Version 1.3.3
Neuer Parameter UBI_USE_ISPINDLE_TOKEN
Die neue Version erlaubt das in der iSpindel Konfiguration vorgesehene Feld "Token" als Ubidots Token zu verwenden.
Das im Skript global gesetzte Ubidots Token wird durch das in der iSpindel hinterlegte ??berschrieben, falls diese Option ausgew??hlt ist.
Damit wird es m??glich, nur die Daten einzelner iSpindeln weiterzuleiten oder einzelnen iSpindeln verschiedene Ubidots Token zuzuweisen.
Um die Weiterleitung f??r einzelne iSpindeln zu unterdr??cken, wird das Feld "Token" in der iSpindel Konfiguration leer gelassen, oder (falls das Feld f??r Kommentare etc. genutzt wird) mit einem Asterisk ("*") eingeleitet.
Neu (28.11.2017)
Interim Release.
Diagramme benutzen jetzt die mysqli Library.
Damit ist die Kompatibilit??t zu PHP7 (Debian/Raspbian Stretch) wieder hergestellt.
Die Dokumentation wurde entsprechend angepasst.
Die ??nderungen sollten r??ckw??rtskompatibel sein.
Das neue Repo wurde in den Docs ebenfalls ber??cksichtigt.
Neu (27.09.2017)
update.sh: Skript f??r automatisches Update auf neue Versionen
update-raspi.sh: Skript f??r komplettes Update (Image/Debian/Raspbian)
Neu (31.08.2017)
Kompatibel zu Firmware >= 5.4.x
Optionale Weiterleitung zum ??ffentlichen Server bzw. weiteren lokalen (Raspi-) Server Instanzen implementiert
Inkoh??renz bei Legacy Plato Diagrammen (Version 4, serverseitiges Polynom) beseitigt
Kleinere Fehler in den Diagrammen beseitigt (Legenden)
Unix Dateizugriffsrechte angepasst
Kleinere Bugfixes
Update von bestehenden Versionen: Bitte die Installations Anleitung beachten.
Ein neues Raspbian "Plug & Play" Image wird nat??rlich ebenfalls in den n??chsten Tagen bereitgestellt.
Hierzu bitte diesen Thread im Hobbybrauer Forum beobachten:
http://hobbybrauer.de/forum/viewtopic.php?f=58&t=12869
??ltere News: Neu: Diagramme, siehe: Diagramme Readme
Installations Anleitung f??r Raspbian: Installations Anleitung
Dieses in Python geschriebene Server Skript dient dazu, von der iSpindel kommende Rohdaten ??ber eine generische TCP Verbindung zu empfangen.
Auf zus??tzlichen, unn??tigen Overhead durch Protokolle wie http wird hierbei bewusst verzichtet, um den Stromverbrauch der iSpindel so gut es geht zu minimieren.
Die empfangenen Daten k??nnen als CSV (???Comma Separated Values???, also durch Kommas getrennte Werte) in Textdateien gespeichert (und so zum Beispiel in Excel leicht importiert) werden.
Ebenso ist es m??glich, die Daten in einer MySQL Datenbank abzulegen.
Somit hat man einen lokalen Server, der auch ohne Internet Anbindung funktioniert und den Einsatz der iSpindel im Heimnetzwerk erm??glicht.
Die Zugriffszeiten sind k??rzer und dadurch sinkt nat??rlich auch der (ohnehin geringe) Stromverbrauch der iSpindel noch weiter.
Um nicht auf die Anbindung an Ubidots verzichten zu m??ssen, besteht aber auch die Option, die Daten zus??tzlich dorthin weiterzuleiten.
Das geschieht transparent, ohne dass die iSpindel auf die Verbindung warten muss. Der lokale Server fungiert dann sozusagen als Proxy.
Das Skript ist plattformunabh??ngig und kann z.B. auf einem Raspberry Pi, eingesetzt werden.
Aber auch der Einsatz auf einem evtl. gemieteten dedizierten (oder virtuellen) Server oder einem beliebigen Rechner im Heimnetz ist m??glich.
Der Betrieb mehrerer iSpindeln gleichzeitig funktioniert problemlos und ohne Verz??gerungen, da Multithreading implementiert ist.
Getestet wurde es unter Mac OS X (Sierra) und Linux (Debian), es sollte aber auch unter Windows problemlos laufen.
Die einzige Voraussetzung ist, dass Python installiert ist.
F??r die Anbindung an MySQL muss auch der python-mysql.connector
installiert sein.
In der Konfiguration der iSpindel w??hlt man TCP aus, und tr??gt die IP Adresse des Servers ein, auf dem das Skript l??uft.
Als Port w??hlt man am besten die Voreinstellung 9501.
Nun muss das Skript selbst unbedingt noch konfiguriert werden. Dazu ??ffnet man es mit einem Text Editor und bearbeitet die gleich beschriebenen Einstellungen.
Dann wird es in einen beliebigen Pfad auf dem Zielsystem kopiert, /usr/local/bin
bietet sich an, oder einfach /home/pi
.
Mit chmod 755 iSpindle.py
macht man es ausf??hrbar und startet es mit ./iSpindle.py
.
Alternativ (z.B. unter Windows) startet man es mit python iSpindle.py
.
Wenn alles funktioniert, beendet man das Skript, setzt DEBUG = 0
und startet es im Hintergrund neu mit ./iSpindle.py &
.
Konfiguration:
Allgemeines:
DEBUG = 0
PORT = 9501
HOST = '0.0.0.0'
Wenn DEBUG auf 1 gesetzt wird, werden auf der Konsole detaillierte Informationen ausgegeben.
W??hrend der ersten Inbetriebnahme ist dies sehr empfehlenswert.
Falls der TCP Port 9501 bereits belegt ist (was unwahrscheinlich ist), kann man diesen auf einen anderen Wert einstellen.
HOST legt fest, von welchen IP Adressen aus der Server erreichbar sein soll.
Am besten l??sst man das auf der Voreinstellung, also keine Einschr??nkungen.
Von au??erhalb des eigenen Netzwerks ist Port 9501 normalerweise sowieso nicht zu erreichen, es sei denn man konfiguriert den Router entsprechend (Port Forwarding).
CSV:
CSV = 0
OUTPATH = '/home/pi/iSpindel'
DELIMITER = ';'
NEWLINE = '\r\n'
DATETIME = 1
Um die Ausgabe von CSV Dateien einzuschalten, muss CSV = 1 gesetzt werden.
OUTPATH ist der Pfad, unter dem die CSV Datei gespeichert wird. Pro Spindel wird hierbei jeweils eine eigene Datei angelegt.
Wenn OUTPATH im Netzwerk freigegeben ist kann man sehr leicht eine solche Datei z.B. in Excel importieren.
DELIMITER legt das Zeichen fest, durch welches die einzelnen Datenfelder separiert sind. ??blicherweise w??hlt man hier Komma oder Semikolon.
NEWLINE definiert das Zeilenende. Ist die CSV Datei f??r Windows oder Office f??r Mac bestimmt, gilt die Voreinstellung.
F??r UNIX Systeme (Linux, Mac OS X) w??hlt man besser '\n'.
DATETIME legt fest, ob das aktuelle Datum und Uhrzeit mit in die CSV Datei geschrieben werden sollen. Normalerweise d??rfte das der Fall sein.
MySQL
SQL = 1
SQL_HOST = '127.0.0.1'
SQL_DB = 'iSpindle'
SQL_TABLE = 'Data'
SQL_USER = 'iSpindle'
SQL_PASSWORD = 'xxxxxxxx'
Will man auf MySQL verzichten, setzt man SQL = 0.
SQL_HOST definiert die IP Adresse der Datenbank. Normalerweise ist das derselbe Rechner auf dem auch das Skript l??uft; dies ist die Voreinstellung (???localhost??? oder 127.0.0.1).
Die restlichen Felder definieren den Zugang zur Datenbanktabelle.
Die Default Einstellung geht davon aus, dass die Datenbank ???iSpindle???; hei??t, ebenso die ID des Datenbank Users.
Die Tabelle, in welcher die Daten landen, hei??t ???Data???.
Um die Tabelle mit den grundlegenden Feldern anzulegen, verwendet man am besten dieses SQL Statement:
CREATE TABLE 'Data' (
'Timestamp' datetime NOT NULL,
'Name' varchar(64) COLLATE ascii_bin NOT NULL,
'ID' varchar(64) COLLATE ascii_bin NOT NULL,
'Angle' double NOT NULL,
'Temperature' double NOT NULL,
'Battery' double NOT NULL,
'ResetFlag' boolean,
'Gravity' double NOT NULL,
PRIMARY KEY ('Timestamp', 'Name', 'ID')
)
ENGINE=InnoDB DEFAULT CHARSET=ascii
COLLATE=ascii_bin COMMENT='iSpindle Data';
Als Datenbankbenutzer kann man nat??rlich das vordefinierte Admin Konto verwenden, oder aber (sch??ner) man legt einen Benutzer an, mit Zugriff auf diese Datenbank:
CREATE USER 'iSpindle'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON iSpindle . * TO 'iSpindle'@'localhost';
FLUSH PRIVILEGES;
Weitere Felder k??nnen vom Skript dynamisch angelegt werden; dies ist aber nur zu empfehlen, wenn man eine eigene Firmware testen will, die zus??tzliche Variablen ausgibt.
Hierzu wird ENABLE_ADDCOLS = 1 gesetzt. F??r den Normalbetrieb ist egal, ob hier 0 oder 1 eingestellt ist.
Falls der Server nach au??en offen ist (z.B. extern gehostet), empfehle ich aber (in dieser Version des Skripts) ENABLE_ADDCOLS auf 0 zu setzen um eventuelle SQL Injections zu verhindern(!).
Ubidots Anbindung
UBIDOTS = 1
UBI_USE_ISPINDLE_TOKEN = 1
UBI_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
UBIDOTS = 0 schaltet die Ubidots Weiterleitung aus.
In UBI_TOKEN das eigene Token eintragen (siehe Dokumentation der iSpindel).
Dieses gilt dann global (also f??r alle angeschlossenen iSpindeln).
Die neuere Methode (empfohlen) ist, das Token stattdessen direkt in der iSpindel Konfiguration einzutragen und den Parameter UBI_USE_ISPINDLE_TOKEN auf 1 (Standardeinstellung) zu lassen.
Die Daten sollten nun sowohl wie gewohnt in Ubidots erscheinen als auch auf Eurem lokalen Server. Auch neue iSpindeln (Devices) lassen sich so problemlos anlegen, f??r Ubidots macht es keinen Unterschied, ob die Daten von der iSpindel direkt kommen oder vom lokalen Server.
Viel Spa??,
Euer Tozzi ([email protected])