zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

26. Die Wohnküche, Teil "Wohnen" (Stand 05.12.2018)

In der Wohnküche gibt es 2 Geräte, die ein paar Gedanken hinsichtlich Automatiserung Wert sind. Zum einen das Fernsehgerät, welches aber fast nur für das Anschauen der Abendnachrichten und der vielen Bilder auf unserem Server genutzt wird, sowie die Musikanlage.

Das Fernsehgerät von Samsung hat einen LAN-Anschluss. Mir ist nur bekannt, dass man darüber auch die Befehle der Fernbedienung schicken kann. Diese durch das Tablet zu ersetzen, macht aber eher wenig Sinn. Spannender wäre, wenn ich Nachrichten sehen möchte und dazu nur eine einzige Taste drücken müsste. Das Gerät müsste dann zur richtigen Uhrzeit auf dem richtigen Kanal eingeschaltet und am Ende wieder ausgeschaltet werden. Da mir keine direkten Befehle bekannt sind und ich auch keine Methode kenne, den aktuellen Status des Geräts zu ermitteln, kann ich das nicht implementieren.

Wir haben in mühsamer Arbeit alle unsere CDs auf den Server in Form von FLAC-Dateien übertragen (die silbernen Scheiben liegen nun in Archivkartons unter dem Ehebett) und diese noch mühsamer ordentlich "getagt", so wenig Tags wie möglich und alle notwendigen richtig und insbesondere auch das Cover korrekt - wozu hat man denn einen Flachbett-Scanner? Neben den BM6-Aktivlautsprechern (hervorragend restauriert von Michael, dem "BM Fan" aus dem Forum aktives hören) steht dort noch ein Streamer/Vorverstärker Aroio SU von der Firma Abacus, die ich aufgrund der hervorragenden Beratung und des exzellenten Service nur empfehlen kann.

Von der datentechnischen Seite betrachtet handelt es sich um einen Logitec Media Server (LMS), der auf meiner Synologie läuft, und dem zugehörigen Player. Die Automatisierung soll umfassen:

Auf der Synology ist das Einrichten des LMS einfach, da als Zusatzpaket verfügbar.

Der Server und der Player müssen natürlich FHEM bekannt gemacht werden:

define sb_synology SB_SERVER 192.168.178.32
   attr sb_synology alivetimer 120
   attr sb_synology doalivecheck false
   attr sb_synology httpport 9000
   attr sb_synology maxcmdstack 200
   attr sb_synology maxfavorites 30
   attr sb_synology room Multimedia

define sb_abacus SB_PLAYER b8:27:eb:7e:2a:da
   attr sb_abacus IODev sb_synology
   attr sb_abacus amplifier play
   attr sb_abacus coverartheight 50
   attr sb_abacus coverartwidth 50
   attr sb_abacus donotnotify true
   attr sb_abacus fadeinsecs 10
   attr sb_abacus room Multimedia
   attr sb_abacus ttslanguage de
   attr sb_abacus ttslink http://translate.google.com/translate_tts ie=UTF-8&tl=&q=&client=tw-ob
   attr sb_abacus volumeLimit 100
   attr sb_abacus volumeStep 10

Die beiden mit tts beginnenden Attribute werden automatisch angelegt und sind bei mir natürlich völlig sinnlos - mein Haus wird niemals Google mit Daten versorgen! Ich benötige jetzt noch die Tasten zur Fernbedienung und die entsprechenden Funktionen, um die Tasten mit dem Abspielgerät zu verbinden.

define wk_pause dummy
   attr wk_pause devStateIcon 0:20_m_pause:1
   attr wk_pause fp_zw_wohnkueche 500,700,0
   attr wk_pause room Wohnkueche

define wk_play dummy
   attr wk_play devStateIcon 0:20_m_play:1
   attr wk_play fp_zw_wohnkueche 500,900,0
   attr wk_play room Wohnkueche

define wk_mute dummy
   attr wk_mute devStateIcon 0:20_m_mute:1
   attr wk_mute fp_zw_wohnkueche 300,900,0
   attr wk_mute room Wohnkueche

define wk_volumeup dummy
   attr wk_volumeup devStateIcon 0:20_m_volumeup:1
   attr wk_volumeup fp_zw_wohnkueche 300,1100,0
   attr wk_volumeup room Wohnkueche

define wk_volumedown dummy
   attr wk_volumedown devStateIcon 0:20_m_volumedown:1
   attr wk_volumedown fp_zw_wohnkueche 300,700,0
   attr wk_volumedown room Wohnkueche

define wk_prev dummy
   attr wk_prev devStateIcon 0:20_m_prev:1
   attr wk_prev fp_zw_wohnkueche 100,700,0
   attr wk_prev room Wohnkueche

define wk_next dummy
   attr wk_next devStateIcon 0:20_m_next:1
   attr wk_next fp_zw_wohnkueche 100,900,0
   attr wk_next room Wohnkueche

define wk_n_pause notify wk_pause:1 set sb_abacus pause;; set wk_pause 0
   attr wk_n_pause room Wohnkueche

define wk_n_play notify wk_play:1 set sb_abacus play;; set wk_play 0
   attr wk_n_play room Wohnkueche

define wk_n_mute notify wk_mute:1 set sb_abacus mute;; set wk_mute 0
   attr wk_n_mute room Wohnkueche

define wk_n_volumeup notify wk_volumeup:1 set sb_abacus volumeUp;; set wk_volumeup 0
   attr wk_n_volumeup room Wohnkueche

define wk_n_volumedown notify wk_volumedown:1 set sb_abacus volumeDown;; set wk_volumedown 0
   attr wk_n_volumedown room Wohnkueche

define wk_n_prev notify wk_prev:1 set sb_abacus prev;; set wk_prev 0
   attr wk_n_prev room Wohnkueche

define wk_n_next notify wk_next:1 set sb_abacus next;; set wk_next 0
   attr wk_n_next room Wohnkueche

In Summe sieht die Bedienoberfläche in der Wohnküche dann so aus:

Eine nette Spielerei wäre, wenn man jetzt noch sehen würde, welche Musik gerade gespielt wird. Also das Cover der CD, der Titel, welche Lautstärke am Streamer eingestellt ist und dazu noch den Status des Streamers. Das ganze aber nur bei eingeschaltetem Streamer und als Highlight dann noch das Cover deutlich abgedunkelt, wenn der Streamer in Pause ist. Das kann man alle programmieren und das Ergebnis ist wie folgt:

Nachfolgend der dazugehörige Code (aus fhem.cfg kopiert). Die dummy-Variable "wk_maske" sorgt dafür, dass je nach Status (playing, pause, off) das Cover unterschiedlich dargestellt wird (normal, abgedunkelt, unsichtbar). Bei ausgeschaltetem Streamer sorgt die dummy-Variable "wk_masketext" dafür, dass der Text - er bleibt in den Readings unverändert - mit der Hintergrundfarbe überdeckt und somit unsichtbar wird.

define wk_maske dummy
attr wk_maske devStateIcon 0:20_maske0 1:20_maske1 2:20_maske2
attr wk_maske fp_zw_wohnkueche 99,1098,0
attr wk_maske room Wohnkueche

define wk_aktuellerTitel readingsProxy sb_abacus:currentTitle
attr wk_aktuellerTitel fp_zw_wohnkueche 20,815,0
attr wk_aktuellerTitel room Wohnkueche

define wk_maskesetzen DOIF ([sb_abacus] eq "off")(set wk_maske 0, set wk_masketext 0)\
DOELSEIF ([sb_abacus:playStatus] eq "playing")(set wk_maske 1, set wk_masketext 1)\
DOELSEIF ([sb_abacus:playStatus] ne "playing") (set wk_maske 2, set wk_masketext 1)
attr wk_maskesetzen cmdState off|playing|pause
attr wk_maskesetzen do always
attr wk_maskesetzen room Wohnkueche

define wk_aktuellerStatus readingsProxy sb_abacus:playStatus
attr wk_aktuellerStatus fp_zw_wohnkueche 20,710,0
attr wk_aktuellerStatus room Wohnkueche

define wk_aktuelleLautstaerke readingsProxy sb_abacus:volume
attr wk_aktuelleLautstaerke fp_zw_wohnkueche 60,815,0
attr wk_aktuelleLautstaerke room Wohnkueche

define wk_coveraktualisieren notify wk_aktuellerTitel trigger WEB JS:location.reload()
attr wk_coveraktualisieren room Wohnkueche

define wk_masketext dummy
attr wk_masketext devStateIcon 0:20_masketext0 1:20_masketext1
attr wk_masketext fp_zw_wohnkueche 20,675,0
attr wk_masketext room Wohnkueche

Wichtig ist noch ein Eintrag in der bereits in Kapitel 14 kurz beschriebenen css-Datei, damit die Maske auch wirklich den Text überdeckt. Dazu muss man einen Indexwert festlegen.

#wk_maske.devicestate     { position:absolute; z-index: 100; }
#wk_masketext.devicestate { position:absolute; z-index: 100; }

Als kleine Spielerei habe ich noch implementiert, dass bei eingeschaltetem Fernsehgerät die Musikwiedergabe in Pause geht und nach dem Ausschalten des Fernsehgeräts die Musik wieder abgespielt wird. Dabei habe ich auch noch ergänzt, dass die Lautstärke bei Wechsel auf Pause in 10 Stufen auf Null reduziert wird.

weiter zu: 27. Die Sprachausgabe