SONOS in FHEM einbinden zur Sprachausgabe

Ich hatte davon gehört, dass man SONOS Lautsprecher auch in FHEM einbinden kann und dann auf den SONOS Lautsprechern einfach Sprache ausgeben lassen kann.

Dann habe ich davon gelesen, dass man aus FHEM heraus bei bestimmten Events Texte ausgeben lassen kann. Der Einsatzzweck bei mir sollte sein, dass mir die SONOS Lautsprecher Play:1 melden sollen, wenn meine Waschmaschine im Keller fertig ist.

Ich möchte noch mal erwähnen, dass das alles nicht auf meinem Mist gewachsen ist, sondern ich mir die Infos, wie es geht bei anderen „Pionieren“ im Internet zusammengesucht habe. Also gebührt der Dank für diese Lösung hier auch nicht mir, sondern ich möchte einfach aufschreiben, wie ich es dann gemacht habe. Die meisten Infos habe ich aus dem www.meintechblog.de geholt.

Welche Komponenten brauche ich:

  • FHEM auf Raspberry mit Homematic Verbindung (HM LAN Adapter bei mir)
  • Sonos Lautsprecher, z.B. SONOS Lautsprecher Play:1
  • Steckdose mit Leistungsmessung. In meinem Fall von Homematic

Zuerst muss man mal FHEM aktualisieren, sodass das neueste SONOS Modul enthalten ist zur Sicherheit.

FHEM Befehl „update“

Danach FHEM neustarten mit „shutdown restart“

Wie imFHEM Wiki zu SONOS beschrieben, fehlen einige Softwarekomponenten. Die habe ich mit

sudo apt-get update && sudo apt-get -y install libwww-perl libsoap-lite-perl libxml-parser-lite-perl

per ssh nachinstalliert.

Für die Verwendung von Sprachausgabe braucht man einen Samba Share auf dem Rechner, auf den von FHEM aus zugegriffen werden kann. Für Dateien wird ein Ordner angelegt, mit Berechtigungen versehen und danach Samba Berechtigungen in die smb.conf Datei eingetragen.

Dazu habe ich in einer ssh Shell folgendes eingegeben:

sudo apt-get update && sudo apt-get -y install samba samba-common-bin

sudo mkdir -p /opt/fhem/SonosSpeak
sudo chmod 777 /opt/fhem/SonosSpeak
sudo nano /etc/samba/smb.conf

In der Konfig Datei habe ich den neuen Share am Ende eingetragen

[SonosSpeak]
 read only = false
 path = /opt/fhem/SonosSpeak
 guest ok = yes

Der Samba Dienst wird danach neu gestartet mit

sudo /etc/init.d/samba restart

Ich habe also alles genau so gemacht, wie in dem oben beschriebenen Blog.

Im FHEM GUI habe ich

define Sonos SONOS

eingegeben, mit dem dann mein SONOS System definiert wurde. Durch den Save Config Button habe ich die Definition dauerhaft gespeichert. Der Hinweis war noch gut: da das SONOS Modul die Namen der SONOS Lautsprecher selbst vergibt, wenn es sie erkennt, ist es besser, wenn man alle SONOS Lautsprecher bereits richtig benannt hat in der SONOS App und auch alle temporären Gruppierungen aufgelöst hat. Sonst gibt es nachher komische Namen. Aber man kann das natürlich auch später noch in derm fhem.cfg Datei selbst korrigieren.

Nach einer kurzen Weile gab es dann einen neuen Raum „SONOS“ in dem alle meine Lautsprecher aufgelistet werden. Also wurden alle Komponenten erkannt und ich konnte sie ab dann auch schon steuern.

Entsprechend dem FHEM Wiki und dem Blog habe ich die passenden Einstellungen für die Sprachdateien für meine SONOS Definition als Attribute in der fhem.cfg Datei ergänzt:

attr Sonos targetSpeakDir /opt/fhem/SonosSpeak
attr Sonos targetSpeakURL \\<ip-Adresse-des-raspberry>\SonosSpeak
attr Sonos targetSpeakFileTimestamp
attr Sonos targetSpeakMP3FileDir /opt/fhem/SonosSpeak

Jetzt kommen die Einstellungen für die Steckdose, die die Waschmaschine bei mir überwacht. Die Steckdose heisst bei mir „steckdose02“. Bei Meintechblog.de haben sie die Steckdose noch umbenannt. Die Kommentare zeigen ungefähr, was gemacht wird:

#Dummy HR.WaschmaschineBetrieb definieren
define HR.WaschmaschineBetrieb dummy
attr HR.WaschmaschineBetrieb event-on-change-reading state
#fuer das GUI noch ein entsprechendes Symbol zum manuellen testen
attr HR.WaschmaschineBetrieb fm_type onbutton,state
attr HR.WaschmaschineBetrieb room Waschkeller

#Dummy HR.WaschmaschineBetrieb zeigt bei mehr als 30 Watt Verbrauch, dass ein Waschvorgang gestartet wurde
define HRWaschmaschineBetriebAn notify steckdose02_pwr:power.* {fhem ("set HR.WaschmaschineBetrieb on;; setstate HRWaschmaschineAutoOff defined") if (ReadingsVal("steckdose02_pwr","power","") >= 30 && Value("HR.WaschmaschineBetrieb") ne "on")}

#Dummy HR.WaschmaschineHoherVerbrauch 
define HR.WaschmaschineHoherVerbrauch dummy
attr HR.WaschmaschineHoherVerbrauch event-on-change-reading state
attr HR.WaschmaschineHoherVerbrauch room Waschkeller

#Dummy HR.WaschmaschineHoherVerbrauch wird bei mehr als 5 Watt Verbrauch eingeschaltet
define HRWaschmaschineHoherVerbrauchAn notify ActionDetector:.*|steckdose02_pwr:power.* {fhem ("set HR.WaschmaschineHoherVerbrauch on;; setstate HRWaschmaschineAutoStandby defined") if (ReadingsVal("steckdose02_pwr","power","") > 5 && Value("HR.WaschmaschineBetrieb") eq "on")}
attr HRWaschmaschineHoherVerbrauchAn room Waschkeller

#Dummy HR.WaschmaschineHoherVerbrauch wird bei weniger als 5 Watt ausgeschaltet
define HRWaschmaschineHoherVerbrauchAus notify steckdose02_pwr:power.* {fhem ("set HR.WaschmaschineHoherVerbrauch off") if (ReadingsVal("steckdose02_pwr","power","") <= 5 && Value("HR.WaschmaschineBetrieb") eq "on")}
attr HRWaschmaschineHoherVerbrauchAus room Waschkeller

#Watchdog für -5 Minuten kein erneuter hoher Verbrauch-
define HRWaschmaschineAutoStandby watchdog HR.WaschmaschineHoherVerbrauch:off 00:05 HR.WaschmaschineHoherVerbrauch:on set HR.WaschmaschineBetrieb standby
attr HRWaschmaschineAutoStandby alias DogAutoStandby
attr HRWaschmaschineAutoStandby regexp1WontReactivate 1
attr HRWaschmaschineAutoStandby room Waschkeller

Also in Prosa funktioniert das so:

  • Wenn die Steckdose über 30 Watt verbraucht, wird ein Kennzeichen gesetzt, dass die Waschmaschine läuft
  • Wenn die Waschmaschine als „laufend“ erkannt wird, setze ein Kennzeichen, dass die Waschmaschine einen hohen Verbrauch hat, wenn dieser über 5 Watt liegt (hier kann man / muss man variieren, wenn der Ruhestrom der Waschmaschine abweicht, aber meine Waschmaschine braucht im Ruhemodus, als auch wenn sie fertig ist, ca. 3 Watt)
  • Braucht die Waschmaschine unter 5 Watt, dann wird das Kennzeichen für hohen Verbrauch wieder ausgeschaltet
  • Ein Watchdog überwacht das Kennzeichen für hohen Verbrauch: wenn dort 5 Minuten lang kein erneuter hoher Verbrauch erkannt wird, nachdem der hohe Verbrauch ausgeschaltet wurde, scheint der Waschvorgang vorbei zu sein

Das mit dem hohen Verbrauch und den 5 Minuten wird verwendet, weil eine Waschmaschine zwischendurch auch mal eine Denkpause einlegt, wo sie sehr wenig verbraucht, aber dann weitermacht. Also kann man nicht einfach auf einen abgefallenen Verbrauch reagieren. Das haben die vom meintechblog.de schon gut erkannt.

Der Watchdog setzt den Dummy für WaschmaschineBetrieb auf den Status „standby“, was nun als Auslöser für einen Notifier genutzt werden kann, damit SONOS einen Text ausgeben kann:

define WaschmaschineIstFertig notify HR.WaschmaschineBetrieb:standby set Sonos_Lounge Speak 30 de Waschmaschine ist fertig

Hierdurch gebe ich dann auf meinen SONOS Lautsprecher(n) Lounge (das sind zwei SONOS Play:1 Lautsprecher) den Satz „Waschmaschine ist fertig“ mit Lautstärke „30“ aus.

So funktioniert das ganze also. Also vielen Dank an den meintechblog.de. Das hat Spass gemacht!

Schreibe einen Kommentar