Darstellung von Variablen-Werten auf einer Website

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Guten Tag,

ich suche derzeit für folgendes Problem eine Lösung. Ich würde gerne die Werte von Python-Variablen auf einer Website ausgeben. Es handelt sich im Wesentlichen um Zahlenwerte (Temperaturen), die online für Fernzugriff angezeigt werden müssen.
Ein Webserver mit index-html-Datei existiert auf der gleichen Maschine. Ich würde gerne auf eine Datenbank verzichten.

Die Frage ist also zusammengefasst: wie schreibe ich die Werte aus Python-Variablen am einfachsten in eine index.html Datei? Oder gibt es einen anderen, einfacheren Weg? Die Werte aktualisieren sich einmal pro Sekunde, also relativ häufig.

Ich bin um jeden Hinweis dankbar, da ich derzeit damit kaum weiter komme.. danke!

Faraday
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die schreibst du nicht in eine HTML Seite. Sondern du benutzt ein Rahmenwerk zur Webserver-Programmierung wie zB bottle, und erzeugst damit die Webseite auf Anforderung. Gefüttert mit den Temperaturrrn entweder bei bedarf, oder sammeln in einem Hintergrund-Thread.

Solltest du deine esoterische Ablehnung einer Datenbank überwinden können, kannst du stattdessen auch zb das RDD-Tool verwenden, welches gleich die Darstellung als Graph erlaubt. Das kommt dann mit deutlich weniger Programmierung aus.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du könntest die Daten im JSON-Format ausliefern. Schau dir im Fall von Flask dazu am besten mal flask.jsonify() an.
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Danke für die Hinweise bis hierhin. Ich werde mir das definitiv ansehen! Meine "esoterische" Ablehnung basiert eigentlich nur darauf, dass ich fürchte, dass ich es ohnehin nicht beherrschen werde. Ich bin Starkstromtechniker von Beruf, und ich brauche die Werte eigentlich nur zu Überwachung eines experimentellen Aufbaus aus der Ferne (es sind auch nicht nur Temperaturen, sondern noch andere Werte).

Für mein Verständnis: bottle läuft als Teil des Webservers?
Danke für Eure Unterstützung, die ich sehr schätze.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, bottle ist selbst ein Webserver. Geschrieben in Python, nur eine Datei runter laden zur Installation, und wenige Zeilen Code.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Faraday:
Liefer mal bitte ein Muster, damit man sehen kann, in welcher Form die Original-Daten vorliegen. Nutzt du eine Datei, serielle Schnittstelle oder ähnliches als Datenquelle? Muss der Empfänger nur den Ist-Zustand oder auch alle bisherigen Daten seit der letzten Abfrage sehen können?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Faraday: Webprogrammierung läuft unter Python so: du nutzt WSGI, das ist der de-facto Standard unter Python in Kombination mit einem WSGI-Rahmenwerk wie Bottle. Bei WSGI funktioniert so (vereinfacht gesagt): du bindest eine URL an eine Python-Funktion, die beim Aufruf der URL ausgeführt wird. In deinem Falle würde dann die HTML Seite mit Hilfe der Template Engine von Bottle dynamisch "on the fly" gebaut, inkl. deinem Sensor Wert. Bottle bringt einen eigenen Server mit, der reicht für dein Anliegen (erst mal).

Das mag vielleicht kompliziert klingen, ist es aber nicht. Wie __deets__ schon sagt, dass sind ~10 Zeilen Code plus der Code / das HTML für das Template. Hast du schon auf die Webseite von Bottle geschaut?

Gruß, noisefloor
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Hallo. Hier zur Präzisierung meines Projekts:

die Daten werden von einem Sensor als serieller Datenstrom einmal pro Sekunde geliefert und über USB in einen Raspberry geschickt. Ich habe bereits geschafft, die Daten aus dem Datenstrom der Schnittstelle zu lesen und jeden Wert in einer Python-Variable abzulegen und auch am Bildschirm im Terminal auszugeben. Das funktioniert. Es läuft also ein Python-Programm, welches sekündlich die Daten liest und lokal im Terminal anzeigt. Alles was jetzt noch fehlt ist, diese Daten online auf einer Website anzuzeigen. :-)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

"Alles" ist halt so ziemlich alles. Das bisschen serielle Schnittstelle lesen ist da leider der kleinste Teil.

Es kommt fuer das vorgehen darauf an, was fuer eine Darstellung du fuer die Daten willst. Da hast du trotz nachfrage nicht drauf geantwortet. Reicht dir eine Darstellung vom ist-wert? Bzw. von einer Reihe von Ist-werten? Dann ist das ganze mit bottle recht einfach zu machen.

Oder brauchst du auch den Verlauf, willst also eine Grafik mit einer Temperaturkurve? Dann wird es deutlich komplizierter, und es bietet sich eben so etwas wie das RDD-Tool.
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Dann war ich nicht präzise genug, bitte um Entschuldigung.
Ich möchte die Daten zur Fernüberwachung der Anlagenparameter nutzen, also eine reine Anzeige der aktuellen Werte. Jede Sekunde aktualisiert sich der Wert, aber es wird eben immer nur der aktuelle Wert angezeigt.
Keine Historie, keine Diagramme, nichts. Das KANN man irgendwann mal machen, wenn ich verstehe, was da überhaupt passiert. Im ersten Schritt genügt es mir, den Inhalt von zirka 5-10 Variablen online anzuzeigen. Mehr nicht.
Eine Selbst-Aktualisierung der Website wäre ein Traum, also so dass man immer automatisch den aktuellen Wert sieht, und nicht auf "aktualisieren" klicken muss.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wie gut sind denn deine Kenntnisse in Sachen Webseitenprogrammierung? Traust du dir zu, die Daten selbst grafisch aufzubereiten? Weißt du wie man eine Seite automatisch neuladen kann? Dann müsstest du ja nur ein entsprechendes Template erstellen und die aktuellen Daten mittels Bottle oder Flask dort einfügen.
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Meine Kenntnisse sind sehr gering, deswegen frage ich hier ja so blöd. :-)
Ich habe das mit der Auto-Aktualisierung schonmal mit einer simplen Index-PHP Datei gemacht, das war ein Befehl im Verzeichnis soweit ich weiß. Das wäre nicht das Problem. Kann jemand mal ein super einfaches Beispiel geben wie so ein Code aussehen könnte, wenn man annimmt, dass z.B. eine Integer in Variable A liegt? In A liegt jetzt jede Sekunde ein neuer Integer-Wert. Wie bekomme ich den auf die Website wenn ich Bottle installiert habe?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

So geht das mit bottle (abgewandelt vom offiziellen Tutorial https://bottlepy.org/docs/dev/tutorial. ... ello-world)

Code: Alles auswählen

from bottle import route, run

temperatur = 20.9

@route('/hello')
def hello():
    return "Temperatur: {}".format(temperatur)

run(host='localhost', port=8080, debug=True)
Danach kannst du auf "http://deincomputer:8080/hello" die Temperatur auslesen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Mit dynamischer Aktualisierung:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
import bottle
import time
import random

@bottle.route("/")
def slow():
    yield u"<html><div>Current temperature: <span id='tmp'></span>°C</div>\n"
    while True:
        current_temperature = random.random()*5+18
        yield "<script>document.getElementById('tmp').innerHTML='%.1f';</script>\n" % current_temperature
        time.sleep(1)

bottle.run()
Faraday
User
Beiträge: 6
Registriert: Dienstag 5. Dezember 2017, 22:37

Ich danke sehr herzlich und werde das so bald ich kann ausprobieren! Herzlichen Dank für alle Hinweise und Tipps!
Antworten