iSpindel - Public Server - Mitstreiter gesucht!

Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

iSpindel - Public Server - Mitstreiter gesucht!

#1

Beitrag von Tozzi »

Servus zusammen,

wie angekündigt, neuer Faden zum Thema Öffentlicher iSpindel Server auf Basis der bestehenden Lösung.
Bin immer noch stark eingespannt, wollte aber dies hier jetzt schnellstmöglich mal zumindest auf den Weg bringen.

Was viele von uns haben wollen, ist eine von Ubidots unabhängige Option, die Daten der iSpindel speichern und auswerten zu können, ohne dafür selber einen Lokalen Server betreiben zu müssen; somit den verbundenen Aufwand zu umgehen (der für nicht-IT-ler ja durchaus einschüchternd sein kann).
Wer mitmachen kann und will, liest jetzt weiter; alle Anderen können hier aufhören... :Wink
Interesse und natürlich jederzeit Anregungen dürft Ihr aber gerne äußern, denn das ist noch nötig, um uns hinreichend zu motivieren... :Cool

Im verlinkten Faden findet Ihr die aktuellen Repos von mir und Markus (Kiki).
Letzteres ist momentan meilenweit voraus, wird aber dieser Tage von mir integriert werden.
Momentan ist das alles noch Teil von Sams iSpindel Projekt, zuhause im /tools Verzeichnis ebendort.
Ich denke aber, es ist an der Zeit, dass wir das in die nächste Phase überführen, und für den iSpindel Public Server ein neues Projekt anlegen.
Mit Sams Arbeit hat das nur noch indirekt zu tun und auf die zusätzliche Belastung wird er glaub ich gern verzichten.

Die Domains "ispindel.de" und "ispindle.de" sind für diesen Zweck schon mal reserviert.

Die unter dem obengenannten Link, Lokaler Server, erwähnte Lösung lässt sich problemlos "aufbohren" für Multi User Zugriff.
Das sollte das nächste Ziel sein.
Mit sehr geringem Aufwand lässt sich das Ganze nämlich so erweitern, dass wir am Ende alle was davon haben.
Man braucht dann nicht mehr unbedingt einen eigenen Raspi oder sonstigen Server (auch wenn das natürlich immer nice-to-have sein wird, falls der Server mal ausfällt oder man im Keller braut oder sich sonstwie außerhalb der Reichweite des eigenen WLANs befindet).

Was Ubidots betrifft, mit deren "Hochverfügbarkeit" können wir auch ohne Hochseil Akrobatik locker mithalten.
Ein angemieteter Server fällt üblicherweise 4 mal im Jahr für ein paar Stunden aus, und die sind angekündigt.
Es bleibt natürlich auch weiterhin die Möglichkeit, beide Systeme parallel zu nutzen und so das Beste aus zwei Welten zu erhalten.
Das dürfte man dann wohl tatsächlich als (beinahe) "hochverfügbar" titulieren.

Technisch besteht "meine" Lösung aus einem Python (2.7) Skript, welches pro eingehender Verbindung forkt, also durchaus bereits jetzt multi-threaded auch die Daten mehrerer Spindeln "gleichzeitig" empfangen kann; da geht also nichts verloren.
Die Daten werden gruppiert anhand der Hardware-ID, welche jede einzelne Spindel eindeutig identifiziert.

Als Datenbank kommt MySQL zum Einsatz. Schön Standard.
Apache 2 als Webserver. Ebenfalls "schön Standard".

Das noch sehr rudimentäre http Handling (Visualisierung, setzen von Flags zum Gärende bzw. -beginn) ist in PHP realisiert, mit Highcharts.js (JavaScript) als Library für die Diagramme.
Letzteres ist nur für private Nutzung kostenlos. Da muss man nochmal nachschauen. Ich habe den starken Verdacht, dass Ubidots dieselbe Library verwenden.

Was ich dort bisher realisiert habe, ist mehr oder weniger als Template (Schablone) zu verstehen, da kann man noch viel viel mehr rauskitzeln.
Die Grundgerüste sind also da, und funktionieren.
Man kann sich da dran austoben. Ich habe den Source Code bisher ganz bewußt extrem simpel gehalten.
Dass ich das aber letzten Endes nicht alles alleine stemmen kann, ist klar.

Da ich bereits einen Virtual Server (bei Host Europe) betreibe, also hierdurch erst mal keinerlei extra Kosten entstehen, würde ich sagen, während der Entwicklung fangen wir damit an. Wenn er dann mal abraucht, legen wir zusammen und mieten einen Root Server.
Meiner Meinung nach dauert das aber, erstmal tut der das und kostet gar nix (extra).
Da will ich auch nix für, das spendier ich.

Der Server ist relativ frisch angemietet/migriert und läuft unter CentOS Linux Release 7.3. Nagelneu also.
Admin Accounts für SSH und FTP unter der ispindle.de Domain sind eingerichtet, ebenso die Datenbank.
SSL Zertifikate habe ich nicht. Die müssten wir dann dazukaufen, sobald das Ganze steht. Momentan geht's auch mit selbstsignierten, denke ich.
Kostet ein Schweinegeld, sowas, und bringt erst mal nix.

Zum "Pflichtenheft":
  • Das Python Skript und die Datenbank werden erweitert um User ID, Username, Email Adresse und Passwort (JOIN über die Hardware ID der Spindel(n)).
    Weiterleitung von Server zu Server wird eingebaut, mit Retry, dasselbe JSON Format benutzend wie bisher schon zwischen iSpindel und Raspi (trivial).
    Das mach ich, da brauch ich nur 1-2 Stunden Zeit demnächst.
  • Sam hat heute das iRelay bzw. iRelais angekündigt. Das unterstützen wir natürlich.
    Muss ich mir aber erst in Ruhe anschauen. Die Aussicht, Gärverlauf und Temperaturkurven in die Temperatursteuerung des Gärgefäßes einfließen zu lassen, ist Mega. Genau das will ich letzlich auch haben. Ist aber was dieses Thema betrifft (noch) ein Nebenkriegsschauplatz.
    Repeater (auch ganz simpler Art) unterstützen wir bereits durch den Punkt weiter oben.
    Weitere Eingangsprotokolle einzubauen ist sicher kein Hexenwerk.
  • Userverwaltung (php, denke ich mal). Nur die Daten bereits registrierter Spindeln werden angenommen und der entsprechenden UserID zugeordnet.
  • Eine Art User Token ähnlich wie bei Ubidots werden wir zur Authentifizierung brauchen, damit nicht Hinz und Kunz da irgendwas abschicken und die Datenbank DoS mäßig vollmüllen können. Da kann man ja problemlos auch das originale Ubidots Token verwenden, falls vorhanden.
  • Damit verbunden: Konfigurationsoberfläche. Einzelne Sude können "archiviert" werden, indem das von Markus implementierte "Reset" Flag zum Tragen kommt.
    Alarmbedingungen (vor allem wichtig: Temperatur) konfigurieren, Benachrichtigung erst mal per Email. Hierfür kann eventuell eine zweite Email Adresse hinterlegt werden (Push, Notfall).
  • Diagramme aufbohren (php und JS). Möglichkeit schaffen, archivierte Gärkurven über Weboberfläche zu wählen und anzuzeigen.
  • Administration des Servers. Bei Ausfall oder Hackerangriff eingreifen.
Damit hätten wir die wichtigsten Punkte meiner Meinung nach abgedeckt.
Wenn wir das Team beinander haben, diskutieren wir den Rest am besten auf github.

Die bisherigen Freiwilligen (aus dem iSpindel Faden):
  • Markus (kiki) - Diagramme
  • Alex (Ant2Alex) - Server Administration, Front End
  • Bob (Bobeye) - Visualisierung
  • Peter (beryll) - Programmierung Python, PHP, JS, MySQL
  • Alex (Alien_TM) - Server/Administration
  • Hendrik (Waldmumie) - Entwicklung
  • inem - Test
  • Clemens (clmnsk) - Entwicklung
  • Joe (schwarzwaldbbq) - Test
  • Stephan (Tozzi) - Python, Datenbank, Administration, GIT
Von Euch hätte ich dann gerne nochmal Rückmeldung hier.

Lasst uns loslegen, weitere Freiwillige gerne willkommen. Wir können ganz sicher noch ein paar Leute brauchen.
Hexenwerk ist das alles nicht.
Und ich muss da drüber auch nicht den Hut aufbehalten.
Erst mal muss es halt jemand ins Leben rufen, dann schauen wir weiter.
Das wird jetzt dann endlich was g'scheit's, hoffentlich... :Drink
Viele Grüße aus Fasano
Stephan
Waldmumie
Posting Junior
Posting Junior
Beiträge: 11
Registriert: Montag 2. Januar 2017, 10:18

Re: iSpindel - Public Server - Mitstreiter gesucht!

#2

Beitrag von Waldmumie »

Ich würde gerne mithelfen, habe allerdings noch bis Mitte August Klausuren, danach aber 3 Monate "Ruhe".

Mfg
Hendrik
Benutzeravatar
tommes
Posting Freak
Posting Freak
Beiträge: 755
Registriert: Montag 24. August 2015, 18:18
Wohnort: Grevenbroich

Re: iSpindel - Public Server - Mitstreiter gesucht!

#3

Beitrag von tommes »

Tozzi hat geschrieben: Dienstag 11. Juli 2017, 03:18 SSL Zertifikate habe ich nicht. Die müssten wir dann dazukaufen, sobald das Ganze steht. Momentan geht's auch mit selbstsignierten, denke ich.
Kostet ein Schweinegeld, sowas, und bringt erst mal nix.
Nicht mehr, siehe https://letsencrypt.org/
Benutzeravatar
ant2alex
Posting Klettermax
Posting Klettermax
Beiträge: 102
Registriert: Montag 16. Januar 2017, 11:17

Re: iSpindel - Public Server - Mitstreiter gesucht!

#4

Beitrag von ant2alex »

Ich meld mich hiermit auch nochmal zurück :) Super Projekt und danke für die ganze Arbeit schon mal ! Das wird richtig gut!
Benutzeravatar
Alien_TM
Posting Senior
Posting Senior
Beiträge: 436
Registriert: Montag 11. Januar 2016, 14:50

Re: iSpindel - Public Server - Mitstreiter gesucht!

#5

Beitrag von Alien_TM »

im Bereich Server/Administration kann ich ebenfalls meine Unterstützung anbieten @Stefan, siehe PM

...Alex
inem
Posting Freak
Posting Freak
Beiträge: 1178
Registriert: Dienstag 28. Januar 2014, 08:48

Re: iSpindel - Public Server - Mitstreiter gesucht!

#6

Beitrag von inem »

Ein Bereich der gerne vergessen wird ist auch der Test, da würde ich meine Expertise anbieten.
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#7

Beitrag von DerDerDasBierBraut »

Legt ihr bitte das DB Feld "Trubidity" mit an, wenn es so weit ist (Datentyp DECIMAL mit 2 Nachkommastellen)?
Wollte mich nur rechtzeitig melden und nicht damit um die Ecke kommen, wenn ihr V1.0 released habt. :Bigsmile
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#8

Beitrag von Tozzi »

Das Skript kann bereits Datenfelder dynamisch anlegen. :Bigsmile
Ist aber noch ein wenig quick & dirty, und man muss halt dann noch ein Diagramm anlegen.

@ inem, Alien_TM, Waldmumie:
Hab Euch in die Liste aufgenommen. Freu mich.

@Tommes: Danke für den Tipp!
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#9

Beitrag von clmnsk »

Ich kann auch gerne mithelfen - hab bloss noch keine iSpindel.

Ich hab irgendwo mal einen Beispielrequest gesehen und als Postman Request gespeichert:
https://gist.github.com/ckrack/c11df465 ... b656354631
Postman ist eine App zum visuellen Entwickeln mit APIs.

Ich würde den HTTP-Endpunkt auch auf PHP umziehen.
Letztlich wird da bloss geschrieben und der Webserver läuft ja ohnehin für die Charts.
Macht wenig Sinn da dann Python zu benutzen und fürs Frontend PHP.

Ich habe Erfahrung mit PHP, HTML, CSS, JS, API Dokumentation mit Swagger, REST.
Denkbarer Stack wäre z.B. Slim Framework, Doctrine.

Man könnte auch alle Endpunkte als REST-API mit JSON als Datenformat umsetzen und das Frontend mit einem JS Framework wie React.

Vielleicht taugt charts.js als Alternative zu highcharts.
Letztlich ist es aber ein non-profit und damit auch mit Highcharts kostenfrei.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
schwarzwaldbbq
Posting Senior
Posting Senior
Beiträge: 476
Registriert: Montag 7. März 2016, 10:25
Wohnort: VS-Tannheim
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#10

Beitrag von schwarzwaldbbq »

Ich könnte meine Mithilfe als unbedarfter "Standarduser" zum Test anbieten.

ISpindel vorhanden.

LG Joe
Unsere Vorstellung: Grüße aus dem Schwarzwald
Meine BBQ-Seite: http://www.schwarzwaldbbq.de
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#11

Beitrag von Tozzi »

Hab Euch in die Liste aufgenommen.

@Clemens: Ja, HTTP nur über PHP macht Sinn.

Das Python Skript läuft aber davon unabhängig, das stellt einen generischen TCP Socket zur Verfügung, ohne HTTP (das ist gerade der Witz dran, so ist die Verbindungszeit zur iSpindel so kurz wie möglich und spart Batterie).
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#12

Beitrag von clmnsk »

Tozzi hat geschrieben: Mittwoch 12. Juli 2017, 17:45 Hab Euch in die Liste aufgenommen.

@Clemens: Ja, HTTP nur über PHP macht Sinn.

Das Python Skript läuft aber davon unabhängig, das stellt einen generischen TCP Socket zur Verfügung, ohne HTTP (das ist gerade der Witz dran, so ist die Verbindungszeit zur iSpindel so kurz wie möglich und spart Batterie).
Das habe ich mittlerweile gelesen.
Man kann aber auch einen Socket über PHP realisieren, da habe ich bloss noch keine Erfahrung wie es mit parallelen Requests abläuft.
Hätte den Vorteil, dass man die gleichen Bibliotheken nutzen kann.

Der PHP Code ist ganz schön abenteuerlich ;)
Die mysql Ext ist z.B. schon lange deprecated.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#13

Beitrag von Tozzi »

Das ist das Schöne an Python, damit ist das extrem easy.
Und alles was man braucht ist eigentlich bei jeder Distribution von Haus aus dabei.
clmnsk hat geschrieben: Mittwoch 12. Juli 2017, 18:20 Der PHP Code ist ganz schön abenteuerlich ;)
Ich weiß. :redhead
Ich bin absoluter PHP Neuling und hab das so zusammengeschustert, dass es erst mal lokal funktioniert.
Dass dieser Code keinen Schönheitswettbewerb gewinnt, ist mir klar...
Auch, dass die PHP Seite mit ziemlicher Sicherheit noch gravierende Sicherheitslücken aufweist.
Tobt Euch dran aus!
Ich freu mich, dass endlich was vorwärtsgeht! :thumbup
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#14

Beitrag von clmnsk »

Ich hab da schonmal losgelegt und erstmal alles auf Slim migriert.
Packe ich später in ein Repo.

In der DB sind die Multi-User Ideen schon angelegt.
Was das Frontend angeht müsste man nochmal ein bisschen probieren.
Ich lerne grade React, vielleicht kann man darauf aufbauen.

Weiß jemand woher das UI der iSpindel-Konfiguration kommt?
Ist das Bootstrap oder so?
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#15

Beitrag von clmnsk »

Für Notifications gibt es folgende Optionen:
- Email
- WhatsApp
- Web Push Notifications (HTML5, ist aber Browser-only)

Kostenpflichtig/Kompliziert:
- SMS
- GCM/APN (Android/Apple, dafür sind aber native Apps benötigt)

Man könnte warnen, wenn die Gärung ins Stocken kommt und wenn sie fertig ist, sofern man bei einem Sud den erwarteten EVG kennt.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#16

Beitrag von DerDerDasBierBraut »

Die Warnungen sollten etwa so flexibel sein wie bei Ubidots. SMS ist natürlich nur nice to have. Aber sonst ist es schon cool, dass man dort beliebig viele Events beim Ereeichen, Über- oder Unterschreiten jeder einzelnen Variable triggern kann.
Zum Beispiel bei der Temperatur ist das für mich wichtig.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#17

Beitrag von DerDerDasBierBraut »

clmnsk hat geschrieben: Donnerstag 13. Juli 2017, 16:56 Weiß jemand woher das UI der iSpindel-Konfiguration kommt?
Ist das Bootstrap oder so?
Das ist eine externe Library (WifiManager) und klassisches HTML ohne Framework.
https://github.com/tzapu/WiFiManager
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#18

Beitrag von Tozzi »

Apple iOS Notifications (APN) habe ich schon mal in einem anderen Projekt implementiert, das geht relativ easy.
Eine native Web basierte iOS App ist auch recht schnell programmiert. Das werde ich dann gerne übernehmen, sobald wir soweit sind.
Wir sollten bei der Entwicklung der Frontends sowieso drauf achten, dass das auf Smartphones gut funktioniert ohne Verrenkungen.
Viele Grüße aus Fasano
Stephan
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#19

Beitrag von DerDerDasBierBraut »

Machst Du die iOS App mit Xamarin oder Remobjects C#? Dann klinke ich mich gerne ein.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#20

Beitrag von Tozzi »

Ich habe selber gerne in C# programmiert.
Unter Mac OS X bzw. iOS arbeite ich inzwischen aber lieber mit SWIFT3.
Schau Dir das mal an, ist eine echt coole Programmiersprache, die Vieles mit C# gemeinsam hat.
Geht wohl auch mit Visual Studio inzwischen (Apple haben das als Open Source veröffentlicht).

Vorteile liegen unter anderem in der quasi automatischen Ausnutzung aller Prozessorkerne (Grand Central Dispatch).
Man muss sich auch nicht groß kümmern um verwaiste Objekte, Pointer und so weiter, die Garbage Collection ist C# sehr ähnlich, geht aber noch weiter.
Ich hab damit innerhalb kurzer Zeit einen Atmel Firmware Updater mit HEX Parser und allem drum und dran für Mac OS X gebaut (from scratch), ohne vorab groß Ahnung davon zu haben.
(Und der Code ist deutlich besser als meine quick & dirty PHP und Python Ergüsse)... :redhead

Ich will Dich aber nicht ausbremsen. Wenn Du das mit C# hinkriegst, helf ich gern mit.
C# und SWIFT sind dermaßen ähnlich, dass es zur Not sogar online Konvertertools dafür gibt.

Serverseitig krieg ich die Notifications auf jeden Fall hin, das hab ich wie gesagt schonmal gemacht.
Ist nicht ganz ohne, aber auch kein Hexenwerk.
App-seitig sowieso pille-palle. Die App registriert sich, Benutzer erlaubt Empfang, den Rest macht iOS.
Viele Grüße aus Fasano
Stephan
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#21

Beitrag von DerDerDasBierBraut »

Auf der iOS Seite bin ich leider bei Objective-C kleben geblieben und Android ist "Feindesland".
Lass uns Xamarin nehmen, damit wollte ich schon immer mal was machen. Dann haben wir gleich auch gleich eine gute Basis für eine Android App, die jemand darauf aufbauen könnte. Ab September/Oktober kann ich mich mit dem Projekt befassen, falls der Server bis dahin in groben Zügen steht.
Wenn ihr eine API zum Abrufen der Daten bereitstellt, dann könnte die App auch coole Charts plotten :-).
http://www.oxyplot.org
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#22

Beitrag von clmnsk »

Ich hab mal was gebastelt und bin soweit es auf Github zu stellen.
https://github.com/ckrack/ispindel-publ ... ee/develop

Ist vom Datenmodell her schon so, dass Multi-User bedacht sind, von der Abfragelogik aber erstmal alle Spindeln in der DB angezeigt würden.
Login etc ist also auch noch nicht da, genausowenig wie einschränkende Parameter (Zeit/Reset).

Von der Reset-Logik möchte ich eher wieder weg und bin dazu gegangen eine Entity Fermentation anzulegen.
Man kann dann Datenpunkte einer Spindel in einem Zeitraum zu einer Fermentation zusammenfassen.
Die lassen sich dann archiviert betrachten und auch sowas wie ein Vergleich wäre denkbar.

Für die Charts habe ich jetzt auf C3.js gesetzt, das setzt auf D3.js auf und ist sowohl flexibel als auch über D3 dann sehr mächtig.
UI ist erstmal Bootstrap in der v4-Beta.

Es folgt der passwortlose Login über Emails und die API-Token für die Spindel-Anbindung.
Wenn wir das mit dem Python-Script zum Daten schreiben behalten wollen, müsste das auf die Datenstruktur umgestellt werden (und die Validierung des API-Token eingebaut werden).
Ich würde aber auch mal probieren, das über ein per Socket laufendes PHP-Skript umzusetzen.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#23

Beitrag von Tozzi »

API Token für Spindel Anbindung finde ich nicht so gut.
Dazu müsste Sam die Firmware ändern und damit funktioniert der lokale Server nicht mehr, oder er müsste eine zusätzliche Schnittstelle einbauen, was widerum Mehrarbeit auf seiner Seite bedeutet und die Benutzer dann endgültig verwirrt.

Warum das Rad neu erfinden? Das Python Skript funktioniert gut, ist ultra simpel, secure und performant.
Ich finde es auch vorteilhaft, wenn das ein separater Bestandteil des Pakets bleibt.

Was wir brauchen, ist auf Seiten des Backends eine Zuordung SpindelID <-> User.
Das Python Skript ändere ich dann anhand Deines Datenmodells so, dass unbekannte Spindeln verworfen werden und diese Zuordnung berücksichtigt wird.
Ist eine Sache von Minuten.

Was wir dann weiterhin brauchen, um Ubidots parallel weiter nutzen zu können, ist eine Möglichkeit für die Benutzer, ihr Ubidots Token zu hinterlegen.
Das ist jetzt noch im Skript hart codiert, da momentan nur für Single User Betrieb konzipiert.
Schön wäre auch eine Möglichkeit, die Daten als CSV Datei herunterladen zu können.

Ansonsten: :thumbsup:
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#24

Beitrag von clmnsk »

Tozzi hat geschrieben: Montag 17. Juli 2017, 01:06 API Token für Spindel Anbindung finde ich nicht so gut.
Dazu müsste Sam die Firmware ändern und damit funktioniert der lokale Server nicht mehr, oder er müsste eine zusätzliche Schnittstelle einbauen, was widerum Mehrarbeit auf seiner Seite bedeutet und die Benutzer dann endgültig verwirrt.

Warum das Rad neu erfinden? Das Python Skript funktioniert gut, ist ultra simpel, secure und performant.
Ich finde es auch vorteilhaft, wenn das ein separater Bestandteil des Pakets bleibt.

Was wir brauchen, ist auf Seiten des Backends eine Zuordung SpindelID <-> User.
Das Python Skript ändere ich dann anhand Deines Datenmodells so, dass unbekannte Spindeln verworfen werden und diese Zuordnung berücksichtigt wird.
Ist eine Sache von Minuten.

Was wir dann weiterhin brauchen, um Ubidots parallel weiter nutzen zu können, ist eine Möglichkeit für die Benutzer, ihr Ubidots Token zu hinterlegen.
Das ist jetzt noch im Skript hart codiert, da momentan nur für Single User Betrieb konzipiert.
Schön wäre auch eine Möglichkeit, die Daten als CSV Datei herunterladen zu können.

Ansonsten: :thumbsup:
Das ist wohl etwas missverständlich formuliert.
Ich spreche jetzt nicht von einem Token, der in einem zusätzlichen Authorization-Header mitgeschickt werden muss, sondern der soll Teil der URL sein.
Da weiß ich noch nicht ob das über TCP funktioniert, aber wenn ein Token, der entweder für die Spindel oder den User gilt, in der URL mitgeschickt wird, müsste der erkannt und überprüft werden. Mit dem token und der Spindle-Id ist der Request dann authentifiziert.
Ansonsten kann jeder, der eine Spindle-Id kennt oder errät Datenpunkte für die Spindel schreiben.

Kann gerne in Python bleiben.
Am besten mit der gleichen Config via z.B. https://github.com/theskumar/python-dotenv
Du fragst dann einfach per SQL ab ob die id aus dem request zu einem User gehört, dem auch der token zugeordnet ist.
SELECT u.id
FROM token t
JOIN users u ON u.id = t.user_id
JOIN spindles s ON s.id = :spindleId
WHERE t.value = :token;

tl;dr: Ist das gleiche Prinzip wie bei Ubidots.

Die Zuordnung Spindel->User gibt es schon (ERM mal angehängt).

Die Weiterleitungen an Ubidots, Mails und Alerts würde ich dann über einen Worker erledigen lassen.
Dazu bräuchte man z.B. RabbitMQ und SupervisorD.
Dateianhänge
ERM.png
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#25

Beitrag von Tozzi »

OK, ich verstehe was Du meinst.
Das wird aber nicht ohne weiteres gehen.

"Nacktes" TCP kennt keine URL, da ist der Haken.
Hat halt eben keinen Session-Level Header oder höher. Und das ist gut so; Sam hat das getestet, der Stromverbrauch ist wirklich geringer.
Eine generische TCP (oder UDP) Verbindung ist nur definiert durch Absender-IP, Absender-Port, Empfänger-IP, Empfänger-Port.
OSI Level 4 (Transport) und eben nicht 5++.
UDP wäre OSI Level 3 (Packet/Datagram), das scheint aber nicht so viel mehr zu bringen, daher haben wir das (erst mal) verworfen.
Wobei das letztlich Mittel der Wahl wäre, wenn man pedantisch sein will...

Das Risiko, dass eine registrierte iSpindel ID "erraten" wird, würde ich jetzt im ersten Schritt einfach mal ignorieren.
Die Wahrscheinlichkeit ist sehr gering.
Momentan gibt das Skript noch ASCII "ACK" bzw. "NAK" zurück, auch das könnte (und sollte) man wohl ganz einfach rausnehmen (die iSpindel wertet das eh nicht aus), um Brute-Force Angriffe zu verhindern. Ohne Feedback vom Server weiß der Angreifer nicht, ob es geklappt hat.
Gegen "Flooding" von einer einzelnen IP Adresse kann (und ebenfalls sollte) man (ich) auch noch recht schnell was einbauen.
Gegen groß angelegte DoS Attacken können wir eh nichts machen. Aber ich glaube nicht, dass wir da eine lukrative Zielscheibe abgeben.

Langfristig, falls sich das Problem doch noch ergeben sollte, und Sam Zeit und Lust hat, kann man ja noch was einbauen.
Das sollte dann aber ähnlich wie bei Ubidots laufen, sprich, im empfangenen JSON wird ein hinterlegtes Token mitgegeben.
Das möchte ich aber wirklich nur als Notlösung, denn wir wollen ja gerade, dass unser System einfacher ist für den Normal User.

Das Datenmodell sieht sehr gut aus, das würde ich auch so lassen wollen.
Das Datenfeld "API Token" nehmen wir einfach für die Ubidots Weiterleitung.

Dafür brauchen wir auch keinen extra Worker oder sonstigen Daemon.
Das wird direkt aus dem Python Skript heraus getriggert; empfangene Daten werden sofort weitergeleitet, ohne Verzögerung.
Wahlweise an weitere iSpindel Server und/oder Ubidots.
Ebenso Mails und Alerts (Whatsapp, Email, APN, Android; auf diese 4 sollten wir uns beschränken).
Hierfür wird geforkt und ein extra Thread gestartet, der das im Hintergrund abarbeitet.
Diese Thematik ziehe ich sehr gerne selber durch (bis auf Android, da hab ich keinen Bock drauf).

Für alle, die sich gerade mit Grausen abwenden:
Ich führe das alles hoffentlich noch vor meinem Urlaub zusammen und dann wird die technische Diskussion dort weitergeführt.
Momentan müssen wir uns noch in diesem Faden koordinieren.

Bis Mitte August wird von meiner Seite ansonsten aber nicht mehr viel passieren, ich muss (=will) noch brauen, und dann bin ich erst mal 2 Wochen weg.
Burgund, Bretagne, Westvleteren, Brügge... :Pulpfiction
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#26

Beitrag von clmnsk »

Du hast natürlich recht, TCP kennt nur Host und Port. Da lässt sich ein Front-Controller/Router Pattern nicht umsetzen.
Ich arbeite recht viel mit APIs und die Idee das offen zu lassen ist für mich ziemlich befremdlich.
Soweit ich sehen kann, schickt die Spindel an Ubidots per HTTP.
Aber wir hätten noch die Möglichkeit eins der existierenden Felder zu verwenden, namentlich das Name Feld.
Dann würden wir einfach beim Anlegen einer neuen Spindel erklären, dass man in dieses Feld den Api-Token eintragen soll?

Wenn's einmal offen ist, können wir es nicht mehr so ohne weiteres schliessen (oder wir öffnen das anonyme senden anhand der Spindel-Id).

Ich muss erstmal noch zwei Sude abfüllen, ob ich bevor es in den Urlaub geht noch zum brauen komme steht in den Sternen :)

Vielleicht sollten wir in Absprache mit Sam die Github Projekte in eine "Organisation" packen?
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#27

Beitrag von clmnsk »

Ich bin gerade noch dabei das Anlegen einer Spindel umzusetzen.
Das muss ja jetzt für mehrere Nutzer möglichst sicher umgesetzt werden.

Um eine Spindel hinzuzufügen, müsste man etwas kennen, dass sie eindeutig identifiziert.
Soweit ich weiß ist die ID der Spindel dem Nutzer nicht bekannt bzw. ersichtlich.
Oder ist sie hier oben links sichtbar und durchgestrichen?
https://github.com/universam1/iSpindel/ ... ration.png

Wenn also nicht die Id verwendet werden kann, müsste man das Namensfeld verwenden.
Das wäre ohnehin die bessere Variante, da man hier einen echten Token nutzen kann.

Also bekommt man zum anlegen der neuen Spindel zunächst einen Token angezeigt (z.B: kj4kjg25 oder auch: iSpindel-124hk13).
Der muss ins Name Feld in der Konfiguration eingetragen werden und nach dem Speichern kommt ja dann auch schon der erste Request. Das Interface wartet darauf und bestätigt dann die Anmeldung der Spindel.

Der Spindelname ist in meinem Datenmodell auch vorgesehen, kann dann aber mit einem eigenen Überschrieben werden.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#28

Beitrag von Tozzi »

Die Spindel ID identifiziert die iSpindel eindeutig.
Zusammen mit dem vom Benutzer vergebenen Namen halte ich das für eindeutig und sicher genug.
Letzterer wird aber auch gerne benutzt, um den Namen des aktuellen Sudes einzutragen.

Brute Force werde ich wie gesagt im Skript verhindern.

Das Durchgestrichene in Deinem Link sind die SSIDs der gefundenen WLAN Netze.

Die iSpindel ID kann aber über das Konfigurationsmenü -> "Information" ausgelesen werden:

Konfig -&gt; Information
Konfig -> Information
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#29

Beitrag von clmnsk »

Ehrlich gesagt finde ich es einfacher, dem User in einem Walkthrough zu zeigen wo er den Token eintragen soll.
Chip-Id, SSID und sonstiges bringen normale Anwender nur durcheinander, außerdem ist es so halt nicht wirklich sicher.

Wer seine Spindeln trotzdem noch anhand des Namens identifizieren möchte, kann ja ein Prefix angeben.

z.B [ Textfeld ] - [ bbkjb65 ]
Textfeld lässt sich ändern und akzeptiert nur Zeichen, das hintere ist unser Token.
Dann kann die Spindel: Pils-kg43t346 heissen.

Aber da man das WLAN mit dem Namen ja sowieso nur zur Konfiguration hat, ist es eigentlich egal wie die Spindel "intern" heisst.
Im Public Server kann man sowohl den Sud als auch die Spindel separat benennen.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#30

Beitrag von DerDerDasBierBraut »

Warum nicht einfach nach denn ubidots Prinzip? Die Spindel sendet dort ihren Namen und den Token. Anhand des Tokens wird sie dem User zugeordnet.
Wenn der User später einen abweichenden Anzeigenamen oder Sudnamen geben kann ... um so besser :).
Die Lösung von Ubidots finde ich gut, weil es nur den Token als Kopplung zwischen User und Device gibt und die Divices sich mit ihrem konfigurieren Namen automatisch registrieren.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#31

Beitrag von clmnsk »

DerDerDasBierBraut hat geschrieben: Donnerstag 20. Juli 2017, 12:11 Warum nicht einfach nach denn ubidots Prinzip? Die Spindel sendet dort ihren Namen und den Token. Anhand des Tokens wird sie dem User zugeordnet.
Wenn der User später einen abweichenden Anzeigenamen oder Sudnamen geben kann ... um so besser :).
Die Lösung von Ubidots finde ich gut, weil es nur den Token als Kopplung zwischen User und Device gibt und die Divices sich mit ihrem konfigurieren Namen automatisch registrieren.
Genau so möchte ich es haben.
Aber Ubidots verwendet HTTP. Die URL kann dort einfach um den Token erweitert werden.
Wir wollen aber auch TCP nutzen können um Energie zu sparen.

Es geht jetzt darum, ohne erneute Firmware-Modifikation (Feld für Token hinzufügen und den im Request mitschicken), diese Authentifizierung zu ermöglichen.
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#32

Beitrag von DerDerDasBierBraut »

Die Spindel verwendet schon seit v4 kein HTTP mehr für Ubidots, wenn ich nicht komplett falsch liege. Ubidots liefert allerdings eine Library mit aus, die reines TCP unterstützt. Ich schaue mir das heute Abend mal an. Kann nicht so schwer sein einen Stream per TCP auf die Reise zu schicken. :)
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
universam
Posting Freak
Posting Freak
Beiträge: 518
Registriert: Dienstag 20. September 2016, 16:43
Wohnort: Selters
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#33

Beitrag von universam »

Ist schon eingebaut, als "Generic TCP', sprich kann man einfach auswählen.
Wenn es noch mehr vordefiniert sein soll kann man natürlich auch ein extra Eintrag erzeugen!
iSpindel - die DIY elektronische Spindel
Brauhelferlein - die mini Brausteuerung
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#34

Beitrag von Tozzi »

Hi Sam,

wenn es keine großen Umstände für Dich bereitet, könnte man bei Generic TCP noch ein Feld "User Token" mit einbauen?
Das dann einfach im JSON mitschicken?
Das wäre dann sogar rückwärtskompatibel zur aktuellen, "lokalen" Single-User-Lösung und alle wären zufrieden...
Würde natürlich auch die Konfiguration einfacher machen.

@Jens: Der "lokale" Server benutzt von Beginn an reines TCP. Aber es wird halt bisher kein Token mitgeschickt.

@Clemens: Das wäre eine saubere Lösung. Wir müssen aber auch im Auge behalten, dass Ubidots unverändert parallel dazu nutzbar bleiben sollte.
Die von der iSpindel kommenden Daten werden über unseren Server auf Wunsch dorthin weitervermittelt, oder lokal über einen dazwischen geschalteten lokalen (Raspi) Server. Letzteres wäre dann eine echte "Hochverfügbarkeits" Variante, da bei Ausfall eines Systems das andere genutzt werden kann.

@Alle: In der Server-seitigen Konfiguration wäre es dann auch möglich, eine URL anzuzeigen, die die Spindel Konfiguration automatisch durchführt.
Das wäre eine wirklich benutzerfreundliche Sache.
Viele Grüße aus Fasano
Stephan
Benutzeravatar
DerDerDasBierBraut
Posting Freak
Posting Freak
Beiträge: 7890
Registriert: Donnerstag 2. Juni 2016, 20:51
Wohnort: Neustadt-Glewe

Re: iSpindel - Public Server - Mitstreiter gesucht!

#35

Beitrag von DerDerDasBierBraut »

Cool, danke Sam. Eine Sorge weniger. Bin gerade in bisschen in Vorurlaubsstress und zu allem Überfluss bin ich auch noch seit Mittag offline, weil mein DSL tot ist. T-Offline glaubt mir nicht, dass der Fehler in deren Dslam zu suchen ist. Jetzt kommt morgen ein Spezialist vor Ort. Ich bin gespannt.
"Da braut sich was zusammen ... "
"Oh, Bier ;-) !"
"Nein! Was Böses!"
"Alkoholfreies Bier??? ..."
-----------
Viele Grüße
Jens
Benutzeravatar
universam
Posting Freak
Posting Freak
Beiträge: 518
Registriert: Dienstag 20. September 2016, 16:43
Wohnort: Selters
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#36

Beitrag von universam »

Hey Stephan,

Klar kann ich machen, keine große Sache. Aus rückwärtskompatibler Seite müsste ich dann checken ob der Token leer ist und dann ggfs. nicht mit übertragen.

Die MCU ID als Token zu nutzen hätte ich zwar eleganter gefunden, aber im Grunde egal.

Gruß Sam
iSpindel - die DIY elektronische Spindel
Brauhelferlein - die mini Brausteuerung
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#37

Beitrag von Tozzi »

Hi Sam,
universam hat geschrieben: Donnerstag 20. Juli 2017, 20:13 Aus rückwärtskompatibler Seite müsste ich dann checken ob der Token leer ist und dann ggfs. nicht mit übertragen.
Das wäre natürlich klasse, aber aus meiner Sicht nichtmal nötig, da nicht definierte Parameter vom Skript ignoriert werden.
universam hat geschrieben: Donnerstag 20. Juli 2017, 20:13 Die MCU ID als Token zu nutzen hätte ich zwar eleganter gefunden, aber im Grunde egal.
Ich auch.
Das User Token hat aber Vorteile.
So können die iSpindeln semi-automatisch konfiguriert werden und für die Benutzer entfällt ein Schritt.
Viele Grüße aus Fasano
Stephan
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#38

Beitrag von clmnsk »

Hätte jemand Interesse im Rahmen des Brlo-Hackathon Ende September an dem Public Server zu basteln?
http://www.brlohack.de/
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Volker.Huppert
Posting Klettermax
Posting Klettermax
Beiträge: 120
Registriert: Montag 9. November 2015, 20:03

Re: iSpindel - Public Server - Mitstreiter gesucht!

#39

Beitrag von Volker.Huppert »

Ich bin CACERT-Assurer und kann entsprechend Zertifikate ausstellen (Spielregel: Ausweisdokumente kontrollieren).

Auf einem Server habe ich noch freie Kapazitäten und freue mich, wenn ich diese beisteuern kann.
Barbers
Neuling
Neuling
Beiträge: 2
Registriert: Freitag 25. August 2017, 22:05

Re: iSpindel - Public Server - Mitstreiter gesucht!

#40

Beitrag von Barbers »

Hallo zusammen,

ich bin Webentwicker und Hoster, da ich mich auch sehr für IOT und automatisierung interessiere find ich das Projekt toll um mal meine eigenen Bierbraubemühungen vorran zu trieben.
Da ich Webportale professionell entwickle habe ich hier ein paar Tipps für euch.
1. Niemals direkte tcp verbindungen für einen public server um Daten zu senden.
Da kommt in absehbarer zeit ein DDOS um den Betreiber zu ärgern oder zu erpessen.
a) entweder man nimmt den overhead im IOT in kauf (machen die meisten)
b) man baut einen lokalen Proxy der es umsetzt
2. ich würde da dringenst ein Framework drunter setzen, da hier die masse für php ist empfehle ich laravel.
Allerdings da ich es persöhnlich bevorzuge. Jedes andere voll entwickelte Framework geht auch.
Warum das den ?
Ja Userhandling, Exploitschutz, ersparning beim entwickeln, ... da gibt es einiges.
Wer da mehr wissen will hier paar Schlagworte die man lieber nicht selber machen will im low level: CSFR Protection, form validation, template parsing, session handling, mysql injection protection .
3. SSL drunter, das gibts ja bei letz encrypt kostenlos und unkompliziert

Um etwas nützliches bei zu steuern.
Setzt ihr das mit einem php framework um wo ich keine Angst um meinen Server haben muss sponsore ich gerne den Webspace mit Hochverfügbarkeit und setzt da nur ein kleines Hosted by drunter, inklusive DDOS Protection.
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#41

Beitrag von Tozzi »

Ist alles lieb gemeint, aber so weit sind wir doch noch längst nicht.
Euer Enthusiasmus in Ehren!

Aber, eh das alles aus dem Ruder läuft und wir hier endgültig über das Ziel hinausschießen:

Die iSpindel ist nach wie vor ein Amateurprojekt, und die Server Infrastruktur ist erst mal vorhanden, sooo viele iSpindeln sind noch nicht im Einsatz.
Gegen DDoS kann man sich so oder so nicht wirklich wehren, aber nachdem es kein kommerzielles Projekt ist, sind wir da auch in keiner Weise ein lukratives Ziel. Es gibt auch keine interessanten Daten, die sich abzugreifen lohnen.
Auch ohne Hochverfügbarkeits Lösung sind wir also wahrscheinlich im Durchschnitt für unseren Spezialfall besser aufgestellt als Ubidots (die Downtimes betreffend). Und letzteres lässt sich ja weiterhin nutzen.

Denn:
Von der Konzeption her ist der Public Server sowieso eher ein "nice-to-have", um eben nicht mehr:
  • Ubidots zu brauchen, um von außen auf die Daten zuzugreifen
  • Das eigene Intranet aufmachen zu müssen zu diesem Zweck (Port Forwarding)
Wir brauchen keine SQL-Injection protection, und so weiter, für die Kommunikation zwischen iSpindel und Server, denn der Daten Transfer läuft unidirektional als JSON über TCP. Man könnte das theoretisch sogar mit UDP machen. Die übertragenen Strings haben vorgegebene Längen. Flooding lässt sich auch recht leicht verhindern. Gebt mir noch ein paar (Arbeits-)Tage Zeit (also ein paar Wochen) und das Python Server Skript ist wasserdicht.
Die Validierung der Eingangsdaten ist Kinderfasching und die verlorene Rechenzeit bei Fake Paketen ebenfalls.
Buffer- bzw. Stack Overflows gibt es auch nicht, dank Python.

Der (unwahrscheinliche) Verlust eines einzelnen oder sogar mehrerer Datenpakete ist auch leicht zu verschmerzen.
Der TCP Socket Server ist so simpel aufgebaut, dass DDOS sogar weniger wahrscheinlich ist als bei einer HTTP Lösung, denn es fällt so gut wie keine Rechenzeit an.
Das gilt umgekehrt auch für die Spindel. Davon rücken wir also nicht ab. Erst mal.

Die eigentlichen Schwierigkeiten beginnen erst im Bereich Benutzerverwaltung und Daten Visualisierung, also im HTTP Backend.
Mit einer vernünftigen Konfiguration der Datenbank (separater User) sind aber auch hier SQL Injections ausgeschlossen.
(Wobei die Benutzerverwaltung natürlich die Schwachstelle sein wird, die muss "bullet-proof" sein).

Ich habe in meiner beruflichen Laufbahn genug Firewalls installiert und konfiguriert, auch bei größeren Unternehmen (bis ich davon die Nase voll hatte, immer der Böse zu sein), und ausreichende Kenntnisse in TCP/IP, so dass ich mich da jetzt einfach mal aus dem Fenster lehne und sage, das passt so. :P
Sollte ich dennoch falsch liegen, ist der Schaden immer noch kalkulierbar bis nicht vorhanden.

Wir sollten erst mal was Benutzbares basteln, dann sehen wir weiter, lernen aus Fehlern, und dann kann man das alles immer noch hochskalieren.

Sam hat auf jeden Fall schon mal eine Firmware gebastelt, die im "Generic TCP" Protokoll ein "Token" Feld vorsieht.
Klappt noch nicht ganz, kann aber kein großes Problem mehr sein.

Darauf sollten wir aufbauen.
Das Konzept von Clemens passt da sicherlich bereits gut.
Das muss man jetzt zusammenbauen zu einer funktionierenden Alpha Version.

Dann schau'n wir mal, dann seh'n wir's schon... :P
Viele Grüße aus Fasano
Stephan
Barbers
Neuling
Neuling
Beiträge: 2
Registriert: Freitag 25. August 2017, 22:05

Re: iSpindel - Public Server - Mitstreiter gesucht!

#42

Beitrag von Barbers »

Entschuldigung das ich etwas drüber hinaus schieße, aber ich bau halt immer gleich skalierbare Sachen. Macht der Gewohnheit.
Ja DDOS geht mitlerweile ganz gut bei ordentlichen Hostern wie Hetzner, für http kann man halt noch cloudlfare dazwischen machen.
Wie gesagt um die Benutzerverwaltung und der Scherung des Webfrontends aus dem weg zu gehen ist ein Framework am einfachsten. Damit es schön wird reicht ja bootstrap.
Benutzeravatar
universam
Posting Freak
Posting Freak
Beiträge: 518
Registriert: Dienstag 20. September 2016, 16:43
Wohnort: Selters
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#43

Beitrag von universam »

Hallöchen,

die Firmware Unterstützung der iSpindel für den Public Server ist jetzt vorhanden.
https://github.com/universam1/iSpindel/issues/76
Schon cool welche Ausmaße das mittlerweile annimmt :popdrink

Gruss Sam
iSpindel - die DIY elektronische Spindel
Brauhelferlein - die mini Brausteuerung
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#44

Beitrag von Tozzi »

Servus Sam,

vielen Dank, das sieht super gut aus!

@Alle:

Falls Ihr den lokalen Server (Raspi) im Einsatz habt, bitte noch nicht die Firmware updaten.

Es wird eine kleine Änderung am Server Skript benötigt, ohne die ginge dann nichts mehr.
Die neue Version wird dann auch mit älteren Firmwares klarkommen, aber halt nicht umgekehrt.
Ich bin dran und es wird demnächst™ ein größeres Update inklusive neuem Raspi Image und verbesserter Doku geben.
Das wird dann von Haus aus schon eine recht runde Angelegenheit, die wirklich jeder einsetzen kann, der einen Raspi rumliegen hat.
Der lokale Server wird natürlich auch weiter existieren und gepflegt werden, mit der Möglichkeit, die Daten an den öffentlichen Server und auch weiterhin an Ubidots weiterzuleiten.
Ich zum Beispiel finde es schön, einen Raspi mit Touch Display direkt neben dem Gäreimer zu haben. Die Diagramme aktualisieren sich automatisch und man sieht gleich, was gerade los ist.
Auch weitere "Zuckerl" für den Raspi sind in Planung, mal sehen...

@Entwickler:
Ich muss noch ein paar nervige Merges und Code Review machen, und das Server Skript aktualisieren; bereits mit Rücksicht auf die angesprochenen potenziellen Probleme beim Einsatz auf einem öffentlich erreichbaren Server.
Sam hat in der Firmware bereits ein Preset namens "ispindel.de" mit eingebaut, das wird also eine echte Plug-and-Play Lösung werden.
Das Preset auswählen, Token eintragen, Account anlegen, los geht's. So der Plan.
Ich werde für die Weiterentwicklung des "Public Servers" dann ein eigenes Repo auf github anlegen, die Server Testumgebung bereitstellen und Bescheid sagen, sobald es so weit ist.
In der Zwischenzeit kann es nicht schaden, wenn Ihr mich auf dem Laufenden haltet.
Eine finale Datenbankstruktur wäre fein, dann kann ich gleich alle Checks mit einbauen.

Die Hauptbaustelle sehe ich in der Benutzerverwaltung und den graphischen Auswertungen, momentan.
Viele Grüße aus Fasano
Stephan
Benutzeravatar
universam
Posting Freak
Posting Freak
Beiträge: 518
Registriert: Dienstag 20. September 2016, 16:43
Wohnort: Selters
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#45

Beitrag von universam »

:goodpost:
Tolle Arbeit Stefan!
iSpindel - die DIY elektronische Spindel
Brauhelferlein - die mini Brausteuerung
clmnsk
Posting Klettermax
Posting Klettermax
Beiträge: 264
Registriert: Freitag 10. März 2017, 00:12
Wohnort: Berlin

Re: iSpindel - Public Server - Mitstreiter gesucht!

#46

Beitrag von clmnsk »

Aktueller Stand ist hier:
https://github.com/ckrack/ispindel-publ ... ee/develop

Es fehlt noch der Dialog eine neue Spindel anzulegen (in welchem man den Token angezeigt bekommt).
Grüße, Clemens
---
Hendi - 34L Topf - 32L Thermobehälter
10L Topf BIAB - Kühlschlange - Ikea 10L PP-Container
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#47

Beitrag von Tozzi »

Danke, Clemens, ich schau mir das ASAP genau an.
Scheint ja, als könnten wir bald loslegen! :thumbup
Viele Grüße aus Fasano
Stephan
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#48

Beitrag von Tozzi »

In der Tat ist die alte Version sogar weiterhin kompatibel, meine Warnung diesbzgl. kann also ignoriert werden. :P
Ich habe aber gerade eine neue Version auf den github committed und die Docs angepasst.
Der public Server rückt näher. :Smile
Viele Grüße aus Fasano
Stephan
Benutzeravatar
universam
Posting Freak
Posting Freak
Beiträge: 518
Registriert: Dienstag 20. September 2016, 16:43
Wohnort: Selters
Kontaktdaten:

Re: iSpindel - Public Server - Mitstreiter gesucht!

#49

Beitrag von universam »

Klasse Stefan,

werde das gleich mergen!

Was hälst du davon dein Python Code in (d)ein eigenes Repo out zu sourcen? Ich denke das hat es verdient :Bigsmile
iSpindel - die DIY elektronische Spindel
Brauhelferlein - die mini Brausteuerung
Benutzeravatar
Tozzi
Moderator
Moderator
Beiträge: 4768
Registriert: Montag 22. Februar 2016, 23:17
Wohnort: Fasano (BR) - Puglia - IT

Re: iSpindel - Public Server - Mitstreiter gesucht!

#50

Beitrag von Tozzi »

Danke, Sam, ja, ich denke das wird über kurz oder lang Sinn machen.
Das erleichtert dann künftig auch die Updates für Raspi- oder sonstige local Server Installationen.
Aber das Unterverzeichnis in Deinem Branch sollten wir dennoch weiterhin aktuell halten, da das für die meisten die erste Anlaufstation ist.

Der Witz an dem Python Skript ist ja, wie simpel das eigentlich ist.
Gerade für solche Anwendungen bietet sich das wirklich an.
Es gibt kaum potentielle Fehlerquellen. Ich werd noch zum Python Fan... :Wink
Nächste Woche häng ich mich nochmal rein, mal schauen, wie weit ich komme.
Für den Public Server steht da noch etwas Refactoring an. :Pulpfiction
Viele Grüße aus Fasano
Stephan
Antworten