Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bilderstream modularisieren #40

Open
ProfZiebart opened this issue Dec 19, 2021 · 4 comments
Open

Bilderstream modularisieren #40

ProfZiebart opened this issue Dec 19, 2021 · 4 comments

Comments

@ProfZiebart
Copy link

Ich arbeite an einer ähnlichen Lösung, möchte dafür aber MagicMirror als Basis nehmen. Das ist sehr leicht konfigurierbar und mit Hilfe von Puppeteer kann ich per Skript automatisiert das MM-Bild als png wegspeichern.
Könnte man dieses Projekt hier irgendwie abspecken, damit ich nur den "Kanal" also den Stream des pngs. vom Server zum ESP32 alleine nutzen kann?
Der Rest läuft ja schon auf dem Raspi.
Auch bin ich mir nicht sicher, ob ich das irgendwie OHNE basecamp hinbekommen kann, welches ja nicht mehr supported wird.

@jdede
Copy link
Collaborator

jdede commented Dec 19, 2021

Im Prinzip schon. Die Umwandlung in das Rohdatenformat geschieht in der index.php:

function rawImage($im, $hasRed) {

Diese Funktion müsste man dann entsprechend umschreiben. Der Code auf dem ESP schreibt diese Daten dann Pixelweise auf das Display:
void drawPixels(char *data, size_t len, boolean start){

Der ganze Code ist schon etwas in die Jahre gekommen und müsste überarbeitet werden. So implementiert der Arduino-Code einen einfachen HTTP-Client. Neben den Wechsel auf ein anderes Framework zur Konfiguration würde ich persönlich dies ebenfalls anpassen wollen.

Auf Grund des Alters des gesamten Codes und den zwischenzeitlichen Entwicklungen würde ich den Code für den ESP32 komplett neu schreiben -- wahrscheinlich in Python für microPython. Hier müssten alle benötigten Funktionen schon verfügbar sein und der Code deutlich übersichtlicher werden.

Leider fehlt mir jedoch die Zeit für dieses Projekt.

@ProfZiebart
Copy link
Author

ProfZiebart commented Jan 10, 2022 via email

@jdede
Copy link
Collaborator

jdede commented Jan 10, 2022

Klingt logisch. Auf der Serverseite wollte ich so etwas mal via Flask oder Django implementieren. Dann gäb es entsprechende URLs für verschiedene Bilderrahmen. Würde einen Token für jeden Bilderrahmen nutzen, dann kann man die Serverseite noch ein wenig erweitern. Die URLs müssten dann entsprechend logisch aufgebaut sein. Angenommen es gibt 4 Bilder, würde es wie folgt bauen:

  • http://127.0.0.1/<TOKEN>/1 1. Bild
  • http://127.0.0.1/<TOKEN>/1/next 302er Redirect auf - http://127.0.0.1/<TOKEN>/2
  • http://127.0.0.1/<TOKEN>/1/prev 302er Redirect auf - http://127.0.0.1/<TOKEN>/4
  • http://127.0.0.1/<TOKEN>/4/prev 302er Redirect auf - http://127.0.0.1/<TOKEN>/3
  • http://127.0.0.1/<TOKEN>/4/next 302er Redirect auf - http://127.0.0.1/<TOKEN>/1

Dies hätte den Vorteil, dass der Server stateless wäre und kein Zeiger umgebogen werden muss. So könnte man auch ganz einfach einen Sprung z.B. auf die 1. Seite realisieren.

Mit DeepSleep und Buttons macht Arduino mehr Sinn. Die Python-VM benötigt standardmäßig 3-5 Sekunden zum Starten. Sorgt für eine schlechtere Usability und lässt sich nur mit Tricks umgehen.
Bei Arduino muss man dafür ein wenig mehr Hirnschmalz in den Verbindungsaufbau sowie die Requests und deren Fehlerbehandlung stecken.

Bei den Arduino-Libs bin ich nun nicht so ganz auf dem Laufenden. Aber eine HTTP(S)-Bib, die auch Redirects unterstützt sollte inzwischen zu finden sein. Notfalls kann man das auch noch mal selbst implementieren. Aber so hätte man eine saubere Lösung, die kaum Intelligenz auf dem ESP benötigt.

Weitere offene Punkte fallen mir derzeit nicht wirklich ein. Nur das Allgemeine:

  • Code modularisieren
  • Bibliotheken aktualisieren
  • Config auslagern
  • Das manuelle Parsen des Datenstreams besser implementieren / in eine Bibliothek packen

Ach ja, es wäre schön, den Code als saubere State Machine zu schreiben. Das wäre deutlich schöner und einfacher zu lesen...

Soweit meine Kommentare. Viel Erfolg! :-)

@ProfZiebart
Copy link
Author

ProfZiebart commented Jan 11, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants