Grundsatzfrage - Wetterdaten aus SQLite DB auslesen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
schappenberg
User
Beiträge: 11
Registriert: Sonntag 18. Oktober 2015, 23:12

Hallo,

mein erster Beitrag, bin Python Anfänger, mein erstes Projekt ist eine Wetterstation, ich kann inzwischen Daten zyklisch über die serielle Schnittstelle lesen und in eine Datenbank (SQLite) schreiben.
Das ganze mache ich mit eine Schleife und einem simplen time.sleep(120) alle 2 Minuten. Jetzt möchte ich aber die abgespeicherten Daten wieder aus der DB auslesen und mit einer simplen statische HTML Seite visualisieren. Nach einiges an Recherche mache ich das jetzt in einem eigenen Thread, in diesem rufe ich eine Funktion auf die mir die Daten mit einzelnen SQL Aufrufen aus der DB holt. Also jeder Wert (mittlere Temperatur diese Woche, Niederschlag, gestern/letzte Woche, ...) wird alle 120 s mit einer Abfrage live aus der DB geholt.
Meine Frage:
ist das ganze sinnvoll oder macht man das in der "echten" Programmierwelt anders? Ich habe auch davon gelesen die Daten zuerst ein eine Pyhton Liste (oder ein Dict) zu lesen und dann den Daten von dort zu verarbeiten, nur wüßte ich nicht was das in meinem Fall für Vorteile hätte, ich habe ja genug Zeit (120 s) die Daten abzurufen und zu verarbeiten.

Danke fürs lesen,

Schappenberg
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

... und willkommen im Forum. :-)

"Thread" hört sich falsch an... Wo läuft der Thread denn? Im Programm der Datenerfassung? Grundsätzlich kannst und solltest du das Trennen, d.h. ein Python-Skript für die Erfassung und eins, welches die Webseite ausliefert.
Die Grafik würde ich denke ich auch nur "on demand" generieren und nicht alle 120 Sekunden. Du hast ja sicherlich Stunden (wie nachts) wo sich das nie einer ansieht.

Wie erstellst du die Webseite denn? Welches Python Webframework verwendest du?

Wenn dein Skript zur Messdatenerfassung "nur" alle 120 Sekunden läuft, dann würde ich es tendenziell eher alle 120 Sekunden periodisch über eine systemd Timer Unit ausführen anstatt das Skript 120 Sekunden warten zu lassen.

Gruß, noisefloor
schappenberg
User
Beiträge: 11
Registriert: Sonntag 18. Oktober 2015, 23:12

Hallo,
Danke für die rasche Antwort! Ja, die Auswertung ist einfach eine Funktion im Hauptprogramm, die nach der Datenabfrage von der Wetterstation aufgerufen wird.
Also Webframework hätte ich jetzt kein spezielles verwendet, ich habe als Buch zum Anfangen "Head first Python" und da wird ganz einfach HTML Syntax Zeile für Zeile generiert. Wenn du allerdings einen Framework Vorschlag für Anfänger (und ABSOLUT einfacher Web Seite) hast, nehm ich gern ;-)
Der Vorschlag mit dem systemd Timer hört sich vernünftig an, das werd ich mal so umbauen.
THX, Schappenberg
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@schappenberg: `bottle` oder `flask` sind wohl die beiden verbreitetsten Mikrorahmenwerke für Webanwendungen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Also Webframework hätte ich jetzt kein spezielles verwendet, ich habe als Buch zum Anfangen "Head first Python" und da wird ganz einfach HTML Syntax Zeile für Zeile generiert.
Eigentlich ist alles einfacher, als die HTML-Seite so zusammen zu bauen...

Wie gesagt würde man das eher so machen, dass man a) ein Webframework wie Flask oder Battle verwendet, das b) unabhängig von der Datenerfassung läuft und c) die Seite on-demand (also beim entsprechenden HTML-Request) baut und ausliefert - und nicht alle X Min automatisch.

Gruß, noisefloor
schappenberg
User
Beiträge: 11
Registriert: Sonntag 18. Oktober 2015, 23:12

Danke für die Infos, dann weiß ich schon mal in welche Richtung ich mich weiter informiere!
Antworten