Automatischer MP3 download, falls nicht auf SDKarte

Hallo Forum,
ich habe zwei kleine Kinder (1,2 jahre umd 3 Jahre) und entsprechend auch zwei Espuinos. (Übrigens mit genau nur einem knopf, als Bedienelement)

Die Kinder tauschen die Karten und es nervt mich beide SDKarten füllen und die IDs anlernen zuüssen.
Ja, import export der IDs wäre möglich, aber die MP3 müssen trotzdem auf der SDKarte sein.

Mir schwebt daher ein Feature vor, das:

  • Auf Wunsch an einer fest definierten Stelle im Internet nach einer Datei .txt sucht. (Z.b. webserver, geteilter nextcloud ordner, o.ä)
  • in der Datei steht eine url wo die mp3 geladen werden kann und der gewünschte ordner auf der lokalen sd (optional)
  • wir nun eine bisher unbekannte karte aufgelegt prüft die software ob sie downloadinfos findet. Falls ja, wird der download signalisiert (ansagen oder neopixel), die datei in den wunschordner runter geladen, angelernt und anschließend abgespielt.

Was haltet ihr davon?
Da ich selbst entwickler bin kann ich die entwicklung übernehmen.
Aber vielleicht macht es sinn das feature noch etwas mehr auszuarbeiten. :wink:

Die Idee gab es schon mal. @QDaniel hatte da auch mal was umgesetzt (dachte ich)

Siehe auch hier:

Danke für den Link. Aber so richtig scheint da ja kein fertiges Feature draus geworden zu sein.
Sollen denn nun noch weiteres Features kommen? Oder eher nicht?

Da ich selbst zwei Kinder mit jeweils einem ESPuino habe, kann ich das gut nachvollziehen, dass man gerne ein solches Feature hätte. Andererseits halte ich es aber auch für einen Corner-Case, denn ich wäre ehrlich gesagt überrascht, wenn allzu viele User selbst beabsichtigen, lokal einen Webserver zu betreiben.

Sachen, die mir spontan so einfallen:

  • Was passiert, wenn ein Download angestoßen wird und dieser abreißt? Es liegt dann ein unnvollständiges File auf der SD. Oder vielleicht willst du auch 50 Files übertragen (ein ganzer Ordner) und bei File 33 gab’s ein Problem. Wie weißt du denn, dass es unvollständig ist?
  • Wie weiß man denn, dass ein Download läuft? Progress auf dem Neopixel, der andere Sachen ganz oder teilweise überschreibt?
  • Download für Karte 1 läuft noch aber Kind legt Karte 2 auf, wofür auch ein Download benötigt wird. Was passiert dann?
  • Ein Download läuft und über das Webinterface versucht noch jmd. gleichzeitig etwas hochzuladen. Klappt das vom Speicher?
  • Kann man auf dem ESPuino Kram abspielen, während der Download läuft? Also reicht das von der Performance und vor allem wie sieht das mit Speicher mit https aus? Und was passiert erst, wenn Download + Webradio gleichzeitig abgewickelt werden sollen, die dann im ungünstigsten Falle beide https sind.
  • Kriegst du die ganzen Playmodes abgedeckt? Was passiert z.B., wenn der Playmode „zufälliges File im lokalen Ordner ist“ und aber noch gar nix im Ordner liegt, weil es noch übertragen werden muss? Wie wird dann ein zufälliges File bestimmt?
  • Ein Download reißt ab und der Benutzer legt die Karte nochmal drauf, um es erneut zu triggern. Er hat jedoch DONT_ACCEPT_SAME_RFID_TWICE aktiv. Muss dann neu gestartet werden? Bedenke: Das wird gerne in Kombination von PAUSE_WHEN_RFID_REMOVED benutzt.
  • Du hast von „Downloadinfos“ gesprochen. Womit editierst du das? Vermutlich eher nicht von Hand weil fehlerträchtig, oder?
  • Irgendwann wird wer kommen und sich wünschen, dass auch Credentials unterstützt werden. Und dann gibt’s verschiedene Plattformen, wo die Credentials unterschiedlich übergeben werden müssen.

Hand auf’s Herz: Es wird der TOD das (und noch viel mehr) alles handeln zu wollen. Es wird damit enden, dass der Benutzer mit umständlicheren NVS-Zuweisungen hantiert (URL kommt dazu) und dann wird man hingehen und Karte für Karte auflegen und jeweils immer warten, bis der Download abgeschlossen ist. Weil sonst ist die Komplexität schwierig zu beherrschen. Zeitgleich musst du deine „Downloadinfos“ aber noch pflegen. Was hast du unterm Strich gewonnen?

Hallo,

das mit dem automatisch laden kann schon kräftig komplex werden. Was wäre denn wenn man einen anderen Ansatz verfolgt und zwar das es eine Master und eine Slave Box gibt?

Die Slave-Box zieht sich alle Informationen von der Masterbox.

Oder ein unabhängiger Ansatz. Man hat eine App die nacheinander per API die Informationen auf zwei Boxen überträgt?

Mal zwei Ideen :slight_smile:

Das war eine Idee hinter meinem „Espuino Manager“, bin aber mangels Zeit noch nicht weiter dazu gekommen…

Ich hatte ja mal vorgeschlagen, dass man eine Box per mount_ftpfs einhängt und dann ein rsync drauf macht.

1 „Gefällt mir“

Die Idee mit ftp finde ich durchaus interessant, weil man dann quasi Standardfunktionen nutzen kann.

Alternativ sehe ich auch gerade das die API viele Funktionen beherrscht.

Erst per FTP alles syncen und dann per API die neuen IDs einlesen.

1 „Gefällt mir“

Danke für die vielen Antworten.
Keine Ahnung ob meine Idee eine Edge-Case ist, aber mit dir - biologist - wäre wir ja schon zwei :slight_smile:

Meine Idee der Umsetzung ist.
Irgendwo bei einem Hoster (ionos, strato, beliebigen-billig-hoster-einsetzen) liegen in einem Ordner folgende Dateien:
12345678.card
abcdefgh.card
meinemusik.mp3
tollemusik.mp3
Die Dateien sind unter https://meinedomainebeimbillighoster.de/espuino/12345678.card erreichbar.

12345678.card:
3541276
/downloads/
https://meinedomainebeimbillighoster.de/espuino/tollemusik.mp3

Bedeutung:

  1. Dateigröße in Byte (damit man prüfen ob alles empfangen wurde)
  2. Ordner auf der lokalen SD-Karte
  3. URL zum Download (weitere Zeilen könnten weitere Dateien sein - für Hörspiele)

Die Datei 12345678.card, also die Nummer ist natürlich identisch mit der ID der Karte.

Natürlich hat biologist rechts das es sehr viele Randfälle gibt. Aber ich würde es einfach halten:

  • Downloads nur wenn sonst nichts anderes ist.
  • Auch das Webinterface erlaubt dann keine Uploads oder keine Musikwiedergabe
  • Schon gar kein WebStream

Ich würde es so umsetzen das die Dateien erstmal tollemusik.mp3.tmp heißen. Erst wenn alle Daten empfangen wurden (was ich weiß da ich die Größe kenne), würde ich die Datei umbenennen und die Karte registrieren.
Beim Systemstart würde die Box alle .tmp Dateien löschen - dann bleiben da keine Leichen liegen.

Es nervt mich einfach schon jetzt Kollosal, immer beide Boxen bespielen zu müssen. Jetzt machen wir gerade 20 neue Weihnachtslieder…

3 „Gefällt mir“

Eine andere Idee, nämlich ein externes Programm was die ganze Musik verwaltet und einfach mehrere Boxen (z.B. per FTP) bespielen kann, die Karten registriert usw, hatte ich auch schon.
Möglicherweise sogar einfacher - aber nicht so smart, finde ich.

@JHB Gibt es schon etwas von deinen „Espuino Manager“ zu setzen? Vielleicht können wir da zusammen ran?

Finde den Ansatz super und würde es auch einfach halten.
Hab zur Zeit leider wenig Zeit um bei der Entwicklung zu unterstützen, das feature würde ich aber sehr begrüßen.

ja, Projektvorstellung: Espuino Manager - #2 von JHB

Aber leider mangels Zeit derzeit eher weniger aktiv in Entwicklung

Würde das gerne auch auf eine „modernes“ Framework setzen, wahrschenlich .NET MAUI

Vielen Dank,
da triffst du bei mir ins Schwarze.
Hätte das für mich schon länger ins Auge gefasst, aber da es leider immer wieder dringlicheres gibt, bis dato nicht angegangen.

Ich dachte da vorerst an eine Lösung mit einem NAS im LAN, d.h. SSL nicht unbedingt notwendig und ein NAS sollte auch nicht selten in technikaffinen Familien anzutreffen sein.

Wenn das über https://provider.xyz von den Ressourcen her noch unterzubringen ist, umso besser.

Somit würde ich das auch sehr begrüßen!

NAS/FRITZ!Box Mediaserver - es gab mal dieses Thema dazu:

und hier eine schlanke Implementierung:

Ich kann leider beim coden nicht helfen, aber ich wäre für Tests verfügbar, da ich diese Funktion auch sehr interessant fände :slight_smile:

An DLNA habe ich bei mir auch schon gedacht. Auch vor allem, dass ich vom Smartphone als DLNA-Client, dem ESP als DLNA-Renderer sagen könnte, er möge vom NAS als DLNA-Server etwas abspielen.

Das gäbe es auch noch: GitHub - yellobyte/SoapESP32: Scan local network for DLNA media servers, browse their content and download files. For ESP32 devices.

Sorry war lange nicht mehr hier.
Bin aktuell wieder dabei mit dem aktuellen Code neue QUino’s aufzusetzen.

Bin aktuell dabei was wie die T*nies-Cloud zu erstellen. Wo das System die Card-ID an ein Server schickt und dann die Daten bekommt.

Warte aktuell noch auf die Komponenten. Sobald fertig lass ich es euch wissen.
Leider funktionieren meine ESP32-S3 nicht, hängen in einer Bootschleife fest wegen dem NVS.

1 „Gefällt mir“

Meine ersten Tests funktionieren soweit wieder habs nun mit Lolin Pros getestet.

Werde noch die allgemeine Benutzerfreundlichkeit anpassen und dann mein repo auf GitHub aktualisieren.

Das beschreiben der Karten hab ich nun erstmal gelassen. Hab es nun über ne Cloud-Lösung realisiert.

Wenn die Karte nicht im NVS wird versucht die TagID an ein hinterlegbaren Server zu schicken, der wiederum die Daten bereitstellt.

Die Files werden dann im Hintergrund herunterladen. Damit aber nicht auf das herunterladen erst gewartet wird, werden die Mediafiles wenn noch nicht auf der SD einfach gestreamt.

Im Cloud Interface ist es dann auch möglich WebRadios oder Befehle zuzuweisen.

1 „Gefällt mir“

Habe nun die erste Version auf GitHub gestellt:

ESP32-Code:

Server:
Ist noch sehr Work in Progress …

Public: http://quino.0011.de //EDIT : Typo

Code:

2 „Gefällt mir“

Gute Idee das Ganze. :+1: 1-2 Fragen hätte ich noch:

Warum änderst du so viel in anderen Dateien, die nichts mit dem Feature zu tun haben?

Power.cpp, Rfid*.cpp, alle settings_*.h

Diese Änderungen haben doch nichts mit deinem Feature zu tun?

Warum ist das Feature der Default „AN“? besser wäre per Default aus, und der Servername in den Kommentaren, maximal…