Flask Webserver Status-Bilder aktualisieren

Django, Flask, Bottle, WSGI, CGI…
Antworten
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Hallo Forum,

ich hoffe ihr könnt mir einen Denkanstoß geben. Meine google-Suche gab keine großen Erfolge.

Ich betreibe an mehreren Raspberry Pi RGB Matrixen. Über einen Flask Webserver auf einem weiteren Raspberry lassen sich die Matrixen konfigurieren.
Jetzt war mein Plan, den Status der Matrixen auf dem Webserver zu visualisieren. Also sende ich bei Bedarf dem Matrix-Raspberry ein Kommando. Der wiederum macht ein Abbild als png-Datei der aktuellen Matrix-Anzeige und sendet sie dem Server.
Und auf dem Server kommt immer die gleiche matrix.png an. Leider wird die erste Bilddatei leider zwischen gespeichert und dadurch der Status nicht aktualisiert.

Ich wäre über jeden Gedankenansatz dankbar. Wie kann man den Cache für die Bilddateien deaktivieren?

Danke schön

Liebe Grüße
Agascha
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hallo,

das geht auf verschiedene Arten und Weisen. Ein weg zB waere, an jedes Reuest fuer das Bild einen ansonsten ungenutzten Parameter mit einer Zufallszahl anzuhaengen, wodurch das Request immer neu ist fuer den Browser. Ein anderer besteht darin, die notwendigen Cache-Header so zu setzen, dass der Browser eben nicht cacht.

Wichtig hierbei ist in beiden Faellen, dass du die Auslieferung der PNG-Datei *nicht* ueber den Flask static Service machst, denn der ist genau dafuer designed, caching auszunutzen!

Eine Diskussion der Caching-Header: https://stackoverflow.com/questions/988 ... -responses
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Danke schön... hat geholfen
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Hallo,

kaum konnte dank euch das letzte Problem gelöst werden und schon stehe ich vor dem nächsten Problem .

Der Raspberry erstellt brav ein Bild von der Ausgabe der Matrix.
Der Webserver ist in der Lage das Statusbild anzuzeigen.

Leider schaffe ich es nicht dem Server das Bild vom Raspberry zu übergeben.

Würde mich freuen, wenn ihr mich auch hier in die richtige Richtung schubsen könntet.

Danke schön

Liebe Grüße
Agascha
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Frage verstehe ich nicht. Wer genau soll da jetzt ein Bild übergeben bekommen?
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Sorry,

ich habe mich unglücklich ausgedrückt.

Ich möchte ein Bild zum Webserver senden.

Der Raspberry macht intern dieses Bild als Statusbild der Matrix. Und dieses Bild möchte ich auf dem Webserver anzeigen.

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

Habe ich immer noch nicht so richtig verstanden. Angezeigt wird das Bild ja von einem Browser. Der redet mit einem Webserver. Und um diese beiden Beteiligten ging es mM nach am Anfang hier: der Webserver hat ein neues Bild, und der Browser muss überredet werden, dass auch immer abzuholen.

Woher kommt also jetzt die Frage nach dem senden des Bildes? Soll der Matrix-Pi das senden? Du schreibst im ersten Post so, als ob das geht.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Am Anfang schreibst Du, dass die einzelnen Raspis abgefragt werden, also wäre auf jedem Rechner ein eigener Flask-Server eine Möglichkeit.
Aber erzähl doch mal genauer, wie die ganze Anlage funktioniert.
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Sorry, wegen der verzögerten Antwort. Aber bei mir ging es drunter und drüber.

Ich versuche das Szenario einmal genauer zu beschreiben:
- Ich betreibe mehrere Raspberrys die Informationen aus dem Internet per GSM beziehen und jeweils auf einer RGB-Matrix anzeigen.
- Weiterhin betreibe ich einen Flask-Webserver auf dem jede oben genannte Matrix konfiguriert wird und eine ID zugeordnet bekommt.
- Zyklisch fragen jetzt die Matrix-Steuer-Raspberrys ihre Informationen aus dem Internet ab. Ein Server ist dabei der Konfigurations-Flask-Webserver.
- Wenn ich aktuell die Konfiguration für eine Matrix auf dem Flask-Webserver ändere, holt sich der Raspberry mit der passenden ID das Kommando ab und setzt es um.

- Was mir jetzt noch fehlt ist ein Abbild der einzelnen Matrix auf dem Flask-Webserver als Status-Monitoringbild.
- Aktuell schaffe ich es schon einmal, die Matrix mit einem Kommando ein png-Abbild von der RGB-Matrixausgabe zu erstellen.
- Leider habe ich es nicht geschafft das Flask-Socket-IO in meinen Flask-Websever zu integrieren. Deshalb lasse ich z.Zt. einen Socket-Server mit Port 8004 parallel zu dem Flask-Webserver mit Port 8005 laufen. Auf diese Art bekomme ich die Statusbilder von der Matrix übertragen und zentral auf dem Webserver angezeigt, wenn das einer Matrix das entsprechende Kommando sende.
- Ich würde aber gerne das jeweilige Status-Bild einer Matrix, ihrer Konfiguration zugeordnet bekommen. Das scheint aktuell durch den Einsatz der zwei Server schier unmöglich.

Ich denke, dass ich den Flask-Socket-IO Server zum Bildaustausch in den Flask-Webserver in dem die Konfiguration läuft, integrieren muss...

Hoffe jetzt ist es ein wenig deutlicher geworden

Liebe Grüße
Agascha
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum muß denn der Raspberry die Matrix erzeugen, wenn doch die Information, was angezeigt wird, vom Server kommt?
Warum brauchst Du denn Socket-IO? Ich sehe nichts, wo nicht normale HTTP-Request ausreichen würden.
Und wo hast Du konkret Probleme, Socket-IO mit Flask zu benutzen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn die Matrix-Server sich die Darstellung vom zentralen flask Server holen, dann hat der doch auch schon alle notwendigen Informationen. Der kann dann doch auch einfach die Daten seinerseits darstellen. Da irgendwas mühselig von den Endpunkten zurückzuführen hat doch gar keinen Mehrwert.
Agascha88
User
Beiträge: 23
Registriert: Sonntag 6. März 2022, 21:04

Guten Abend,

dank eurer Tipps habe ich den Versand der Statusbilder zum Server jetzt über HTTP-Request lösen können.
Jetzt liegen im Ordner "static" die Bilder der einzelnen Matrixen und werden bei Bedarf aktualisiert.
Die Matrixen schicken ihre Bilder inklusiver ihrer config-ID in diesem Format "1234567_matrix.png". wobei 1234567 die entsprechende config-nummer ist.

Auf dem Server möchte ich gerne auf der entsprechenden Configseite der einzelnen Matrix nur das zugehörige Statusbild angezeigt bekommen.

Unter anderem ist auf dieser Seite das Feld gepflegt:
<label>Oeffentliche ID</label>
{{ form.public_id() }}

Versucht habe ich es bisher so:
<img src="{{ url_for('static', filename='\'' + form.public_id() + ''\') }}"/>

Leider wird mir so aber nicht nur das value ausgegeben. Sondern der Inhalt des gesamten Feldes. Geplant hatte ich eigentlich, wenn ich das value des Feldes auslesen könnte es noch mit _matrix.png zu verknüpfen.
Dann denke ich, dass mir das richtige Statusbild angezeigt wird.

Leider hapert es bei mir nur das value des Feldes public_id auszulesen und das Ergebnis dann mit _matrix.png zu verknüpfen.

Ich würde mich freuen, wenn ihr mir wieder einen Tipp geben könntet.

Wünsche euch einen schönen Sommeranfangabend
Agascha
Antworten