Derzeit plane ich eine kleine Steuerung mit einem Monitoringsystem inkl. Webinterface. Ich würde jedoch gerne auch mit der Steuerung interagieren. Für dieses Projekt werde ich einen Raspberry verwenden. Ich bin momentan noch auf der Suche nach dem perfekten Umsetzungskonzept und wäre euch für jegliche Anregungen dankbar. - kostenloses Hosting der Website? - kostenlose Datenbank? ThinkSpeak wäre auch eine nette Lösung nur gefällt es mit in Sachen Datenweiterleitung und Interaktion mit der Steuerung nicht sonderlich.
:
Verschoben durch Moderator
Philipp W. schrieb: > - kostenloses Hosting der Website? Ein Webinterface bedeutet nicht unbedingt, dass das zu verwaltende Gerät per Internet erreichbar ist. Vielleicht befindet es sich ja bei Dir zuhause im Intranet. Dann lass doch auf dem Gerät einen einfachen Webserver laufen, den andere Geräte übers Intranet erreichen können. > - kostenlose Datenbank? Für viele Zwecke reicht SQLite: https://de.wikipedia.org/wiki/SQLite
Auf dem Raspi läuft ein vollwertiges (Debian)-Linux. Damit wird der genauso zum Webserver wie alle anderen Linux-Rechner auch. Apache, nginx, MariaDB, PHP, was auch immer, und alles kostenlos. Das Web ist mehr als randvoll mit allem, was man dazu braucht. Oliver
Dankeschön für die ersten Anregungen. Ich möchte die Website jedoch nicht am RasPi lokal hostn.
Philipp W. schrieb: > Dankeschön für die ersten Anregungen. > Ich möchte die Website jedoch nicht am RasPi lokal hostn. Okay, also was willst Du eigentlich machen? Auf welchem Rechner soll das Webinterface laufen, und welche Verbindung soll dieser zum Rasberry Pi haben?
:
Bearbeitet durch User
Hi Phillip, na, kostenlos wird schwierig. > - kostenloses Hosting der Website? > - kostenlose Datenbank? Es gibt aber genügen Angebote, wo man für wenig Euros einen Server im Internet bekommt. Da kannst Du dann alles installieren was du möchtest (Grafana,Influxdb usw.) z.B. https://contabo.de/?show=konfigurator&vserver_id=206 Ich habe mit der Fa. nichts zu tun, habe aber dort seit einiger Zeit dort auch ein paar Server stehen, und nutze die ganz ähnlich. Gibt es aber bestimmt auch bei ganz vielen andern Anbietern.. Gruß Ingo , DH1AAD
Philipp W. schrieb: > Dankeschön für die ersten Anregungen. > Ich möchte die Website jedoch nicht am RasPi lokal hostn. Warum nicht lokal? Wie kommen die Daten zum Webserver wenn der nicht auf dem Raspi läuft, lass mich raten, der Raspi soll in die DB schreiben und der Webserver pollt die Daten aus der DB? Schreib doch mal auf wie du dir den Datenfluss vorstellst Und warum du das so machen möchtest, oft sind die "einfachen Ideen" gar nicht so einfach
cppbert3 schrieb: > Wie kommen die Daten zum Webserver AQMP, MQTT, HTTP/POST, ach es gibt so viele einfache Lösungen, zu denen es Tonnen von fertigen Frameworks und Libs gibt.
Unbekannter schrieb: > cppbert3 schrieb: > Wie kommen die Daten zum Webserver > > AQMP, MQTT, HTTP/POST, ach es gibt so viele einfache Lösungen, zu denen > es Tonnen von fertigen Frameworks und Libs gibt. Ist mir klar, der Eingangspost lässt aber vermuten das das nicht alle wissen
Tut mir leid, dass ich nicht gleich zu Beginn schon alles ausführlich und genau beschrieben habe. Der Grund dafür ist das ich auf diesem Gebiet eher ein Neuling bin. Habe lediglich gute Kenntnisse in C und C++. Was den Datenfluss angeht habe ich keine fixen Vorstellungen. Die Idee, dass ich zwischen dem Raspi und dem Webinterface eine DB nutzen könnte gefiel mir vor meinem ersten Eintrag hier jedoch am besten. Ich bin jedoch für andere Lösungen gerne offen. Ich versuche nochmals gesammelt meine Eckpunkt zu schildern. Über des Webinterface sollen Daten vom Raspi angezeigt werden und ebenso auch Befehle an den Raspi geschickt werden können. - die Datenübertragung soll über WiFi passieren - Das Webinterface soll auf einem servicierten Webhost liegen - cool wäre auch wenn ein zeitlicher Verlauf der Daten auf der Website angezeigt wird (daher die Idee mit der Datenbank) Ich bin mir noch nicht sicher ob ich bei diesem Projekt von grafischen Entwicklungsumgebungen nicht eher Abstand nehmen sollte, oder wird es sonst zu knifflig? Mir geht es bei diesem Projekt primär um den Lerneffekt und es sollte kostenfrei bleiben. Vielen Dank für eure Unterstützung.
Daten mit Python an einen Server mit PHP zu senden und in eine Datenbank zu schreiben ist nicht schwierig. Das haben unsere Battlefield 2 Server schon vor 10 Jahren gemacht. Aber bei WLAN muss man immer mal damit rechnen, das es nicht sofort geht, sondern man muss fehlertolerant schreiben. Kannst du mit PHP und Webfrontends schon was? Philipp W. schrieb: > und ebenso > auch Befehle an den Raspi geschickt werden können. Das ist schon komplizierter und riecht nach Sicherheitsloch.
:
Bearbeitet durch User
Philipp W. schrieb: > Über des Webinterface sollen Daten vom Raspi angezeigt werden und ebenso > auch Befehle an den Raspi geschickt werden können. Wenn jedermann übers Internet an Dein Gerät Befehle senden kann, dann hast Du ein Sicherheitsproblem. Natürlich kann man sich eine entsprechende Authentifizierung überlegen und erst ein Login mit Benutzername und Passwort verlangen etc., aber es gibt halt auch immer mal wieder Sicherheitslücken in Webservern. Irgendwas sicherheitskritisches sollte also besser nicht übers Internet erreichbar sein.
Mark B. schrieb: > Natürlich kann man sich eine entsprechende Authentifizierung überlegen > und erst ein Login mit Benutzername und Passwort verlangen etc. ... was schon deshalb schwierig wird, weil ich bisher noch keinen kostenlosen Hoster mit TLS gesehen habe. Ja, das kann man auch irgendwie anders nachbauen, aber ist das wirklich der Sinn dieses Projekts? Philipp W. schrieb: > Was den Datenfluss angeht habe ich keine fixen Vorstellungen. Das Problem sehe ich eher so: Du hast gar keine Vorstellungen. Das ist an sich nicht schlimm (jeder fängt so an), aber mein Eindruck ist, dass du die Komplexität dieses ganzen Vorhabens unterschätzt. Erstens kann man keine guten Entscheidungen treffen, wenn man die Folgen nicht absehen kann, und zweitens ist es auf Dauer frustrierend, wenn sich ständig neue Komplikationen ergeben. Mach's dir am Anfang nicht komplizierter, als es unbedingt sein muss: Lass das ganze Internet weg. Kleiner Webserver auf dem Raspi (mein Vorschlag wäre lighttpd), kleine Datenbank im Hintergrund (z.B. SQLite), vielleicht schreibst du auch einfach nur in ein Textfile. Mit PHP und HTML befassen. Das Ergebnis sieht wenig schön aus und ist nur lokal verfügbar, aber du erkennst, wie die Dinge zusammenhängen und was dich überhaupt interessiert. Diese Fähigkeiten sind auch mit hoher Wahrscheinlichkeit noch nützlich, wenn du irgendwann etwas anderes "mit Internet" machst. Danach kannst du entscheiden, in welche Richtung es weitergeht, wo du vielleicht Frameworks einsetzen möchtest, oder ob du eine komplett selbstgestrickte Lösung haben möchtest. An diesem Punkt kannst du dann auch eine sinnvolle Entscheidung treffen, ob dir ein kostenloser Hoster ausreichende Funktionen anbietet, um deinen Ansatz zu verfolgen, oder ob es sich nicht doch lohnt, sich damit zu beschäftigen, wie man den Raspi ausreichend abhärtet, um ihn auch öffentlich verfügbar zu machen. Um das Thema Netzsicherheit kommst du sowieso nicht herum.
Philipp W. schrieb: > Tut mir leid, dass ich nicht gleich zu Beginn schon alles ausführlich > und genau beschrieben habe. Der Grund dafür ist das ich auf diesem > Gebiet eher ein Neuling bin. Habe lediglich gute Kenntnisse in C und > C++. Das ist ja schonmal eine gute Voraussetzung. > Was den Datenfluss angeht habe ich keine fixen Vorstellungen. Die Idee, > dass ich zwischen dem Raspi und dem Webinterface eine DB nutzen könnte > gefiel mir vor meinem ersten Eintrag hier jedoch am besten. Ich bin > jedoch für andere Lösungen gerne offen. Meine (ganz persönliche) Erfahrung ist, daß klassische Relationale Datenbanken in sehr vielen Fällen eine sehr gute, und in mindestens ebensovielen Fällen eine sehr schlechte Wahl sind. Für Zeitserien sind sie meist nicht allzu gut geeignet, dafür gibt es oft wesentlich bessere Lösungen. Es sei denn, man darf niemals nie nicht einen Datenpunkt verlieren, aber das ist bei Deinem Projekt... naja. > Ich versuche nochmals gesammelt meine Eckpunkt zu schildern. > Über des Webinterface sollen Daten vom Raspi angezeigt werden und ebenso > auch Befehle an den Raspi geschickt werden können. > - die Datenübertragung soll über WiFi passieren WLAN ist noch unsicherer als kabelgebundene Netzwerke, und auch in denen muß man sich schon intensive Gedanken über Ausfälle machen. > - Das Webinterface soll auf einem servicierten Webhost liegen Das ist eher... nicht so schwierig. > - cool wäre auch wenn ein zeitlicher Verlauf der Daten auf der Website > angezeigt wird (daher die Idee mit der Datenbank) Tja, und hier geht es dann langsam los... aber mehr dazu weiter unten. ;-) > Ich bin mir noch nicht sicher ob ich bei diesem Projekt von grafischen > Entwicklungsumgebungen nicht eher Abstand nehmen sollte, oder wird es > sonst zu knifflig? Mir geht es bei diesem Projekt primär um den > Lerneffekt und es sollte kostenfrei bleiben. Wenn Du lernen möchtest, solltest Du Dir einen guten Texteditor mit sowas wie Syntax-Highlighting und idealerweise Tab-Completion für die gewünschte Sprache suchen. Heute dürften Atom, Sublime, VSCode, Kate und UltraEdit bieten, was Du brauchst. Okay, kommen wir zu dem, was ich von Deiner Idee vielleicht verstanden habe, oder möglicherweise auch nicht. 1. Du hast einen Raspberry Pi, der irgendwelche Daten sammeln soll. 2. Du möchtest gerne ein wenig (oder ein wenig mehr) Python lernen. 3. Du möchtest die Daten vom Pi auf einen Webserver übertragen. 4. Der Webserver soll die Daten speichern und per Webinterface anzeigen. 5. Der Webserver soll Bedienelemente anzeigen um den RasPi einzustellen. Habe ich das richtig verstanden? Dann... habe ich vielleicht ein paar Tipps. ;-) Zunächst möchte ich aber kurz auf die anderen Tipps eingehen, die Dir hier gegeben wurden. Hier war mehrfach die Rede von relationalen Datenbanken wie MySQL. Diese halte ich für Deinen Anwendungsfall für weitgehend ungeeignet: die Features, die solche Datenbanken bieten, etwa relationale und transaktionale Sicherheit, brauchst Du für Zeitserien normalerweise gar nicht. Aber genau diese Features, die Du gar nicht brauchst, machen Relationale Datenbanken ziemlich teuer. Es war auch die Rede von PHP, dabei möchtest Du doch -- wenn ich das richtig sehe -- eigentlich Python lernen. Mit Python kann man wunderbare Webinterfaces schreiben, dazu komme ich allerdings später. Warum Du jetzt auch noch PHP lernen sollst, ist mir (vorsichtig gesagt) schleierhaft. Okay, kommen wir nach dieser kurzen Vorrede zum Eingemachten. Ich möchte das gerne quasi "chronologisch" anhand des Datenflusses behandeln: 1. Datensammlung 2. Datenübertragung 3. Datenspeicherung 4. Visualisierung der Daten 5. "Befehlsübertragung" 6. Kostenloses Hosting 7. Zeitkritikalität 8. Housekeeping 1. Datensammlung Vermutlich hast Du bereits eine Idee, wie Dein RasPi die Daten sammeln soll; wenn nicht, dann frag' bitte einfach. Da gibt es ja viele Möglichkeiten: digitale Signale über die GPIO-Pins lesen, USB-Gerätschaften, und so weiter. Ich ganz persönlich mag Dir den Rat geben, die Daten zunächst einmal auf dem RasPi zu puffern, sie also zwischenzuspeichern, damit -- wenn das WLAN mal ausfallen und / oder der Server einmal nicht erreichbar sein sollte -- keine Daten verloren gehen. Wie Du das mit relativ wenig Aufwand machen kannst, dazu mehr unter Punkt 3 "Datenspeicherung". 2. Datenübertragung Die Übertragung der Daten kann auf vielen Wegen stattfinden, hier wurden bereits einige Message Queues genannt. Da Dein Webserver allerdings ohnehin bereits eine Webschnittstelle hat, bietet sich die natürlich an. Auf diese Weise kannst Du a) unterschiedlicheste Datenformate übertragen (JSON, CSV, XML oä.), von denen Du Dir eines (oder sogar mehrere) frei auswählen kannst. In diesem Fall würde ich vermutlich aus Gründen der Performanz und Sparsamkeit bei der Datenübertragung das gute alte CSV-Format nehmen, die Daten komprimieren und -- siehe auch unter Punkt 8 "Zeitkritikalität" -- die Daten in regelmäßigen Abständen auf den Webserver übertragen. Nachteil: Du siehst neue Daten nicht sofort, sondern schlimmstenfalls erst nach Ablauf des zeitlichen Abstandes plus Übertragungs- und Eintragungszeit. Vorteil: je größer die Datenmenge ist, desto besser kann sie für die Übertragung komprimiert werden. 3. Datenspeicherung Für die Speicherung der Daten auf dem Server würde ich einen gemischten Ansatz wählen: kurzfristig würde ich die Daten in einen Redis-Server schreiben, der den großen Vorteil hat, die Daten im Arbeitsspeicher und damit maximal performant verfügbar vorzuhalten. Später, wenn das Redis-Kontingent erschöpft ist, würde ich die Daten dann wieder komprimieren und in eine Relationale Datenbank wie PostgreSQL schreiben. Dies auch wegen Punkt 6, "Kostenloses Hosting". Dann sind die Daten zwar noch vorhanden, aber der Zugriff dauert wesentlich länger. So etwas nennt sich "Multi-Tiered Storage", allerdings wirst Du es in diesem Fall selbst implementieren müssen... ist jedoch wirklich nicht allzu schwierig. 4. Visualisierung der Daten Es gibt unendlich viele Möglichkeiten, Deine Daten anständig und übersichtlich darzustellen. Das geht los mit einfachen Bibliotheken wie jq-Plot oder Flot, mit denen Du möglicherweise anfangen solltest; später, wenn Du Python besser kannst, könnten die äußerst leistungsfähige Python-Bibliothek Pandas benutzen und Deine Daten darüber nicht nur statistisch analysieren, sondern auch mit DataTables zu einer interaktiven Tabelle und / oder über Bokeh und pandas-bokeh interaktive Datenplots zeichnen (lassen). In [1] diesem Beitrag von mir siehst Du ein sehr einfaches Beispiel, was mit diesen Techniken möglich ist. (Bitte die dt_*.html zunächst lokal abspeichern...) [1] Beitrag "Re: Linux wird nicht wirklich akzeptiert, woran liegt das ?" 5. "Befehlsübertragung" Bei der Übertragung von Befehlen auf den RasPi kannst Du intern denselben Redis benutzen, entweder eine Liste oder auch dessen Publish-/Subscribe-Mechanismus... oder sogar beides. Im letzteren Fall mit PubSub wären Websockets wohl hilfreich, oder der RasPi kann eine Liste blockierend abrufen bis ein neuer Eintrag da ist, oder... hier sind wir wieder bei Fragen wie Pufferung und dem Ausfall von WLAN, Internet, des RasPi oder Ähnlichem. 6. Kostenloses Hosting Eine sehr beliebte (und bei überschaubaren Größenordnungen kostenlose) Plattform zum Hosting von Python-Webapplikationen ist Heroku. Dort bekommst Du kostenlos etliche Stunden Rechenzeit, und außerdem eine PostgreSQL-Datenbank mit bis zu 10.000 Zeilen sowie einen Redis-Server mit bis zu 25 Megabyte. 7. Zeitkritikalität Tja, hier kann ich leider nicht allzuviel sagen, weil ich Deine Anforderungen nicht ausreichend genau kenne. Müssen die Daten SOFORT auf dem Webserver verfügbar sein? Müssen die Befehle an den RasPi SOFORT umgesetzt werden? Dann fallen Lösungen mit einer Zwischenpufferung trotzdem nicht aus, denn eine Pufferung kann -- wenn sie korrekt implementiert ist -- zwei Szenarien abfangen: einen Ausfall von WLAN oder Internet, und obendrein (wenn mit Komprimierung kombiniert) eine signifikante Reduktion der zu übertragenden Datenmengen. Und wenn Du Deine Daten nur einmal täglich oder gar wöchentlich überträgst, kannst Du bei Deinem Provider auch noch maximale Rechenzeit sparen... 8. Housekeeping Nun, die meisten kostenlosen Hoster haben gewisse... Beschränkungen, meistens in Bezug auf Prozessorzeit und Datenvolumen. Deswegen ist es womöglich sinnvoll, die Daten nicht nur remote auf Deinem Webserver zu speichern, sondern obendrein auch noch lokal -- und Deine Daten auf dem Webserver nach einer gewissen Zeit einfach zu löschen. Meiner Erfahrung nach verlieren Daten mit zunehmendem Alter an Wert. Soviel erstmal zu meinen ersten Gedanken. Vielleicht magst Du, wenn Du Dich ein wenig in Python hineingefuchst hast, einmal ins Flask-Mega-Tutorial von Miguel Grinberg [1] schauen, der einen herausragend guten Kurs über die Entwicklung von Webapplikationen unter Python mit dem Flask-Webframework geschrieben hat. Eine weitere unglaublich gute Quelle ist ExploreFlask [2], ebenso zu Python und Flask. (Du merkst schon, ich bin ein Freund von Flask...) Deutlich umfangreichere Python-Webframeworks, die zwar mehr Funktionalität, dafür jedoch viel weniger Flexibilität mitbringen, sind das ebenfalls äußerst beliebte Django und das nicht (mehr) ganz so bekannte Plone. YMMV -- für Deine Anwendung würde aber ich eher ein Microframework wie Flask oder Bottle nutzen. Wenn Du Fragen hast, ist hier vielleicht nicht der schlechteste Ort dafür, und Du bist herzlich eingeladen, mir eine PM zu schreiben. Viel Erfolg und Vergnügen! [1] https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world [2] https://exploreflask.com/en/latest/
Danke für die wirklich hilfreichen Kommentare. > Wenn Du Fragen hast, ist hier vielleicht nicht der schlechteste Ort > dafür, und Du bist herzlich eingeladen, mir eine PM zu schreiben. Viel > Erfolg und Vergnügen! Danke auch für das nette Angebot, ich werde dir auf jeden Fall schreiben. Ich werde mich dann schön langsam an die Arbeiten machen und werde mich bei Fragen wieder melden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.