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
Flask Webserver Status-Bilder aktualisieren
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
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
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
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
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.
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.
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
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
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?
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?
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.
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
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