Aus meiner Sicht ist das Thema gefixt - hab’s getestet:
Habe mir jetzt (zum ersten Mal bei ESPuino) Claude zu Hilfe genommen. Das werde ich jetzt öfter mal machen ![]()
@Chris_KA Ich hoffe du bist mir jetzt nicht böse, dass ich das quasi „hijackt“ habe. Größtenteils ist Claude deinem Fix gefolgt.
Problem
Ein Webradio-Tag, das beim Booten aufliegt (physisch oder via Auto-Replay PLAY_LAST_RFID_AFTER_REBOOT), spielt nicht — weil das WLAN zum Zeitpunkt der Tag-Verarbeitung noch nicht verbunden ist. Der vorhandene Retry-Mechanismus war für genau diesen Fall toter Code (er hing an gTriedToConnectToHost, das nur gesetzt wird, wenn connecttohost() überhaupt erreicht wird — was im Fehlerfall nie passiert).
Fixes (2 zusammenhängende)
1. Retry nach WLAN-Connect
- Scheitert ein Webstream mangels WLAN, wird der Tag gemerkt (
gRetryRfidTagId) undgRetryRfidOnWifiConnectgesetzt. - Sobald WLAN steht, wird der Tag erneut in die RFID-Queue gelegt — nur wenn nichts anderes läuft, mit geprüftem
xQueueSend(Fehlschlag wird geloggt statt still verworfen). - Funktioniert unabhängig vom Reboot-Feature und deckt auch m3u-Webstreams ab.
- Der alte, kaputte Mechanismus (
gPlayLastRfIdWhenWiFiConnected/gTriedToConnectToHost) wurde entfernt.
2. DONT_ACCEPT_SAME_RFID_TWICE-Lockout
- Die Sperre wird jetzt beim Akzeptieren des Tags scharfgeschaltet statt erst bei aktiver Wiedergabe. Sonst bliebe ein Tag mit sofort scheiterndem ersten Track für immer gesperrt — was auch Fix 1 blockiert hätte.
Zwei Abweichungen vom Forums-Vorschlag (durch Code-Analyse erzwungen)
- Retry nutzt
gCurrentRfidTagIdstattgPlayProperties.playRfidTag(letzteres ist auf dem Fehlerpfad nie gesetzt). - Idle-Check + Rückgabewert-Prüfung beim Re-Enqueue.