SonosFIFO verwaltet MP3-Sprachansagen in ioBroker zentral. Die Automationen (z. B. Blockly) lösen lediglich einen Profilnamen aus. Die Verwaltung kümmert sich um Lautsprecher, MP3, Lautstärke, optionale Ankündigung, Priorität, Nachtmodus und Warteschlange.
| Komponente | Konfiguration / Speicherort |
|---|---|
| ioBroker | JavaScript-Adapter javascript.0 |
| Sonos-HTTP-API | http://192.168.10.11:5005 |
| Sonos-HTTP-API Dienst | sonosapi.service |
| Installationsverzeichnis der API | /home/iobroker/node-sonos-http-api-current/ |
| Zentrale MP3-Ablage (ioBroker-Upload) | /opt/iobroker/iobroker-data/files/0_userdata.0/clips/ |
| Symbolischer Link der Sonos-API | /home/iobroker/node-sonos-http-api-current/static/clips |
| Alle Zustände | 0_userdata.0.Sprachansagen |
Wichtig: Der ioBroker-Ordner ist der einzige MP3-Speicherort. Neue MP3-Dateien über die ioBroker-Oberfläche nach 0_userdata.0 / clips hochladen. Nicht zusätzlich in das Sonos-Installationsverzeichnis kopieren.
Der folgende symbolische Link verbindet beide Systeme:
/home/iobroker/node-sonos-http-api-current/static/clips -> /opt/iobroker/iobroker-data/files/0_userdata.0/clips
Link und Webzugriff prüfen:
ls -ld /home/iobroker/node-sonos-http-api-current/static/clips readlink -f /home/iobroker/node-sonos-http-api-current/static/clips curl -I http://127.0.0.1:5005/clips/gong.mp3 sudo systemctl status sonosapi --no-pager
Erwartet: readlink -f zeigt den ioBroker-MP3-Ordner; der HTTP-Aufruf liefert 200 OK.
Neuinstallation des Links (nur falls noch nicht vorhanden): Das vorhandene Verzeichnis vorher sichern und sicherstellen, dass die MP3-Dateien im ioBroker-Ordner liegen. Niemals ein befülltes static/clips blind löschen oder überschreiben.
SRC=/opt/iobroker/iobroker-data/files/0_userdata.0/clips DST=/home/iobroker/node-sonos-http-api-current/static/clips # Nur ausführen, wenn DST kein existierendes Verzeichnis/Link mehr ist: sudo ln -s "$SRC" "$DST"
Flur ist erreichbar.gong.mp3, waschmaschine_fertig.mp3, Windalarm.mp3 und Wasseralarm_HWR.mp3 liegen im zentralen ioBroker-Clip-Ordner./clip/-Aufrufe können sonst die Wiedergabe überlagern.| ioBroker-Skript | Inhalt |
|---|---|
script.js.common.SonosFIFO_Profile | Datei SonosFIFO_Profile.js; Kategorien und sämtliche MP3-Profile. |
script.js.common.SonosFIFO | Datei SonosFIFO_Controller.js; Wiedergabe, Prioritäten, Nachtmodus, Status, Persistenz und Buttons. |
[SonosFIFO Profile] 4 Profile veroeffentlicht.[SonosFIFO] Profile geladen: 4 und [SonosFIFO] v4.0 bereit.0_userdata.0.Sprachansagen.Status müssen Konfigurationsfehler und LetzterFehler leer sein. Der Nachtmodus muss einen plausiblen Wert zeigen.0_userdata.0.Sprachansagen.Ausloeser erscheinen die Profil-Taster WaschmaschineFertig, Gong, Windalarm und WasseralarmHWR.Status.Beschaeftigt=false und Status.WartendGesamt=0 gelten.Intern.SpeicherJSON sichern/exportieren.SonosFIFO_Profile.js aktualisieren, starten und Veröffentlichung im Log prüfen.SonosFIFO_Controller.js aktualisieren und starten.Einstellungen kontrollieren.
Das interne Speicherformat wird bewusst beibehalten, damit die Warteschlange beim Controller-Austausch nicht zurückgesetzt wird. Intern.SpeicherJSON nicht löschen oder manuell bearbeiten.
Einzige Konfigurationsquelle: SonosFIFO_Profile.js. Änderungen in den Objekten Konfiguration.ProfileJSON sind nicht der richtige Weg: Das Profilskript überschreibt diese beim nächsten Start.
const KATEGORIEN = { Info: { raum: 'Flur', lautstaerke: 70, gong: true, gongLautstaerke: 55 }, Warnung: { raum: 'Flur', lautstaerke: 85, gong: true, gongLautstaerke: 70 }, Alarm: { raum: 'Flur', lautstaerke: 95, gong: false, gongLautstaerke: 70 } };
| Profilname | Kategorie | MP3 | Nachtfreigabe |
|---|---|---|---|
WaschmaschineFertig | Info | waschmaschine_fertig.mp3 | Nein |
Gong | Info | gong.mp3 | Nein |
Windalarm | Warnung | Windalarm.mp3 | Nein |
WasseralarmHWR | Alarm | Wasseralarm_HWR.mp3 | Ja (kritischer Alarm) |
WasseralarmHWR ist bewusst nachts freigegeben. Falls dieser Alarm nachts nicht spielen soll, im Profilskript nachtsErlaubt: false setzen. Die Alarm-Kategorie allein erteilt keine Nachtfreigabe.
Neues Profil hinzufügen:
TrocknerFertig: { prioritaet: 'Info', datei: 'trockner_fertig.mp3', lautstaerke: 75, gong: true },
PROFILE ergänzen. Erlaubt sind Profilnamen mit Buchstabe am Anfang, danach nur Buchstaben A–Z, Ziffern und Unterstriche.prioritaet (Info/Warnung/Alarm), datei, optional raum, lautstaerke (0–100), gong (wahr/falsch), gongLautstaerke (0–100), ankuendigungDatei (MP3 nur für dieses Profil), nachtsErlaubt (ausschließlich bei Alarm relevant).
Der Profilparameter gong: true bedeutet: Vor der eigentlichen Sprachansage einen Ankündigungston spielen. Dieser Ton muss nicht gong.mp3 heißen.
Einstellung unter 0_userdata.0.Sprachansagen.Einstellungen | Standarddatei | Verwendung |
|---|---|---|
AnkuendigungInfo | gong.mp3 | Ankündigung für Info-Profile |
AnkuendigungWarnung | gong.mp3 | Ankündigung für Warnungsprofile |
AnkuendigungAlarm | gong.mp3 | Ankündigung für Alarmprofile (sofern dort gong: true) |
Beispiel: AnkuendigungWarnung = warnung.mp3. Die Datei muss vorher im ioBroker-Clip-Ordner liegen. Ein Profil kann mit dem Parameter ankuendigungDatei (z. B. sonderton.mp3) eine abweichende MP3 auswählen. Die Ankündigungslautstärke ist separat einstellbar.
Datenpunkt 0_userdata.0.Sprachansagen.Ausloeser.<Profilname> auf true setzen. Der Controller stellt ihn automatisch auf false zurück. Eingehende Tastendrücke werden unabhängig von ihrem ACK-Flag erkannt.
Um versehentliche Doppelklicks zu vermeiden, werden weitere Tastendrücke desselben Profils innerhalb von Einstellungen.TasterSperreMs (Standard 1500 ms) ignoriert. Jeder zulässige Tastendruck führt zu einem neuen Auftrag, auch wenn bereits eine Ansage läuft.
Blockly-Block „Nachricht an anderes Skript“:
javascript.0script.js.common.SonosFIFOansageWaschmaschineFertigIndividuelle Lautstärken, ohne das Profil zu verändern:
WaschmaschineFertig|75 → Ansage mit 75 %WaschmaschineFertig|75|45 → Ansage 75 %, Ankündigung 45 %
Die Antwort auf messageTo (optional „Mit Ergebnissen“) meldet, ob ein Auftrag dauerhaft angenommen oder z. B. wegen Nachtmodus verworfen wurde. Sie meldet nicht, dass die MP3 bereits zu Ende abgespielt wurde.
Eingang.Profil: einen Profilnamen oder ein Profil|Lautstärke|Gonglautstärke-Kommando schreiben.Eingang.AnfrageJSON: Parameterobjekt als JSON schreiben, z. B. {„profil“:„WaschmaschineFertig“,„lautstaerke“:75}.messageTo-Parameterobjekte sind ebenfalls möglich, z. B. {profil:'WaschmaschineFertig', lautstaerke:75, raum:'Flur'}.Für sicherheitskritische Automationen messageTo mit Rückmeldung verwenden, nicht einen kurzen Tasterimpuls. Anfragen, die während eines Controller-Ausfalls gar nicht ankommen, können nicht gespeichert werden. Doppelte Alarmierung über einen unabhängigen Weg empfohlen.
Alarm > Warnung > Info über die nächste. Innerhalb derselben Kategorie bleibt die Reihenfolge erhalten.Einstellungen.NachtmodusQuelle enthält die Quell-Datenpunkt-ID, standardmäßig knx.0.Zentral.Tag=0_Nacht=1.Tag=0_Nacht=1_Schlafzimmer.0 = Tag und 1 = Nacht; auch boolesche Werte werden erkannt.nachtsErlaubt: true) dürfen nachts abgespielt werden.Einstellungen.NachtmodusTest = true erzwingt Nacht zu Testzwecken; false aktiviert wieder die echte Quelle. Diese Einstellung niemals versehentlich aktiviert lassen.
Alle folgenden Namen liegen unter 0_userdata.0.Sprachansagen.
| Gruppe | Datenpunkte | Zweck |
|---|---|---|
Ausloeser | <Profilname> | Automatisch erzeugte Profil-Taster (boolean); einmal auf true setzen |
Eingang | Profil, AnfrageJSON | Alternative Eingänge für Texte bzw. JSON-Aufträge |
Konfiguration | ProfileJSON | Durch Profilskript veröffentlichte Konfiguration; nicht manuell bearbeiten |
| Datenpunkt | Funktion |
|---|---|
Pausiert | true: nach laufender Ansage keine weiteren Aufträge starten; false: fortsetzen |
WarteschlangeLeeren | Alle wartenden Aufträge entfernen; laufende Wiedergabe beenden lassen |
FehlerQuittieren | Fehlerzustand aufheben; ein möglicherweise nicht vollständig gespielter aktiver Auftrag startet von vorne |
| Datenpunkt | Bedeutung |
|---|---|
AnkuendigungInfo / AnkuendigungWarnung / AnkuendigungAlarm | MP3 für die jeweilige Kategorie, Standard gong.mp3 |
TasterSperreMs | Entprellung der Profil-Taster, Standard 1500 ms (0–10000) |
GongPauseMs | Pause zwischen Ankündigung und Ansage, Standard 1000 ms |
ZwischenAuftraegenMs | Abstand zwischen Aufträgen, Standard 800 ms |
HTTPTimeoutMs | HTTP-Timeout pro Sonos-Clip, Standard 90000 ms |
NachtmodusQuelle | Quell-Datenpunkt-ID für Tag/Nacht |
NachtmodusTest | true = Nacht erzwingen; false = echten Zustand lesen |
| Datenpunkte | Bedeutung |
|---|---|
Zustand, Beschaeftigt, Phase | Bereitschaft, Fehler/Pause und Fortschritt der aktiven Ansage |
Profil, Datei, Raum, Prioritaet | Aktuell bearbeiteter Auftrag |
WartendGesamt, WartendAlarm, WartendWarnung, WartendInfo | Anzahl wartender Aufträge, jeweils ohne aktiven Auftrag |
WarteschlangeJSON | Nach Priorität sortierte, vorgesehene Reihenfolge |
ProfileJSON | Effektiv aufgelöste Profile (inkl. Kategorie-Standardwerte) |
Konfigurationsfehler, LetzterFehler | Fehler bei Profilübernahme beziehungsweise Wiedergabe/Speicherung |
LetzteAnsage, LetzteAnsageZeit | Letzte abgeschlossene Ansage |
Nachtmodus, NachtsperreAktiv, NachtmodusQuelle | Nachtzustand und verwendete Quelle |
NachtsUnterdrueckt, LetzteUnterdrueckung | Statistik verworfener Aufträge |
LetzterTaster, TasterIgnoriert | Bedienung und Doppelklick-Entprellung |
Intern.SpeicherJSON enthält die dauerhaft gespeicherte Warteschlange einschließlich ggf. aktivem Auftrag, Pause-/Fehlerstatus und Zählern. Nicht manuell ändern oder löschen.
0_userdata.0 / clips hochladen; Dateinamen exakt in Profil eintragen.SonosFIFO_Profile bearbeiten und neu starten.Einstellungen ändern; keine Skriptänderung nötig.Steuerung.Pausiert = true; laufende Ansage wird noch beendet.Steuerung.WarteschlangeLeeren = true; nur wartende Aufträge werden entfernt.Status.LetzterFehler und Sonos-API prüfen, danach Steuerung.FehlerQuittieren auslösen.Status.WarteschlangeJSON, Status.WartendGesamt und die ioBroker-Logmeldungen verwenden.Intern.SpeicherJSON sichern. ioBroker-/Proxmox-Backup einschließen.
Achtung: Je nach Profil können Warnungen/Alarme laut abgespielt werden (Kategorie-Standards 85/95 %). Zu Testzwecken kann aus Blockly vorübergehend eine niedrigere Lautstärke übergeben werden, z. B. Windalarm|35.
Status.Konfigurationsfehler und Status.LetzterFehler müssen leer sein; Steuerung.Pausiert=false, Nachtstatus beachten.Ausloeser.Gong auf true setzen. Erwartung: gong.mp3 auf Flur, automatische Rückstellung auf false.Steuerung.Pausiert=true, anschließend per Blockly WaschmaschineFertig, Windalarm und WasseralarmHWR einreihen. WarteschlangeJSON muss Alarm vor Warnung vor Info anzeigen.Steuerung.Pausiert=false: Alle Aufträge werden in Prioritätsreihenfolge vollständig abgearbeitet.Einstellungen.NachtmodusTest=true (nur bewusst zum Testen!). Info/Warnung werden unterdrückt; WasseralarmHWR ist freigegeben. Danach NachtmodusTest=false.Status.WartendGesamt=0 und Status.Zustand=Bereit kontrollieren.clip-Aufrufe oder einen zweiten FIFO-Controller verwenden.