sonos2mqtt device health

Begonnen von Guybrush, 10 März 2026, 19:41:14

Vorheriges Thema - Nächstes Thema

Guybrush

gibt es eine Möglichkeit, dass Lautsprecher regelmäßig ihren Status melden bzw. man diesen abfragen kann? Meine Putze und Kinder ziehen nämlich ständig die Stecker von irgendwelchen Boxen. Ich würde die daher gern mit nem Watchdog überwachen lassen, dass die auch noch präsent sind. Alternativ ginge es wohl auch mit presence check auf deren mac adresse. das wäre aber nur eine notlösung. schöner wärs, wenn man das zb über die Rückgabe der Ist Lautstärke zb lösen könnte, da man so auch weiss, dass die funktionieren und nicht nur im wlan hängen.

Otto123

Hi,

set Befehl (z.B. set xxx Volume) setzt in Folge auf alle Fälle das volume Reading. Also deine Idee sollte grundlegend funktionieren: nur die aktuelle Lautstärke setzen und auf das Reading triggern.
Nur für die konkrete Umsetzung fehlt mir jetzt noch die Idee.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Guybrush

also die Lautstärke auf das setzen, was im reading steht wäre wohl eine Idee, die man ausprobieren könnte. es gäb sonst noch die möglichkeit vpn sonos2mqtt direkt, die Ist-Lautstärke abzufragen:

https://sonos2mqtt.svrooij.io/control/advanced.html

was meinst du dazu? Wenn das auch über die sonos2mqtt Funktion laufen würde, wäre das perfekt. idee wäre dann über ein AT die Lautstärke regelmäßig abzufragen und einen Watchdog auf Volume laufen zu lassen.

Otto123

#3
Ja das kannst Du selbst einfach über x_raw_payload absetzen (den code so wie er ist in das Feld im FHEMWEB einwerfen), bzw. so in der Art:
set xxx x_raw_payload {
  "command": "adv-command",
  "input": {
    "cmd": "RenderingControlService.GetVolume",
    "val": {
      "InstanceID": 0,
      "Channel": "Master"
    },
    "reply": "GetVolumeResponse"
  }
}
danach wird das Reading CurrentVolume (nicht Volume ;) ) gesetzt. Auf das kannst Du triggern. Dieses Reading wird sonst nicht verwendet bzw. gesetzt. D.h es wird wirklich mit Deiner Aktion gesetzt.

Die strukturellen NL im json String kannst Du weglassen. ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Guybrush

Ich hab das jetzt so gelöst, wie du meintest. Funktioniert. Daher danke für seinen input :)

damit wird alle 5 Minuten die aktuelle Lautstärke aller Sonos Lautsprecher abgefragt:
defmod Sonos.Healthcheck.AT at +*00:05 {\
    my $payload = '{\
                      "command": "adv-command",\
                      "input": {\
                        "cmd": "RenderingControlService.GetVolume",\
                        "val": {\
                          "InstanceID": 0,\
                          "Channel": "Master"\
                        },\
                        "reply": "GetVolumeResponse"\
                      }\
                    }';;\
\
    fhem("set .*:FILTER=DEF=RINCON.*:FILTER=TYPE=MQTT2_DEVICE x_raw_payload $payload");;\
}\

attr Sonos.Healthcheck.AT room Interfaces->Sonos

und mit dem watchdog überprüft, ob die Lautstärke mindestens innerhalb der letzten 15 Minuten vom Sonos Gerät zurückgemeldet wurde:
defmod Sonos.Wohnen.Watchdog watchdog Sonos\.Wohnen:CurrentVolume:\s\d{1,2} 00:15:00 SAME setreading OfflineDevices device-$NAME offline
attr Sonos.Wohnen.Watchdog userattr notifyMessage
attr Sonos.Wohnen.Watchdog DbLogExclude .*
attr Sonos.Wohnen.Watchdog activateOnStart 1
attr Sonos.Wohnen.Watchdog autoRestart 1
attr Sonos.Wohnen.Watchdog group Watchdog
attr Sonos.Wohnen.Watchdog room Interfaces->Sonos,Überwachung

Über mein dummy Device OfflineDevices läuft dann wiederkehrend ein DOIF was mir bei Fehlern entsprechende Meldungen schickt.