Sonos-Einrichtung

Begonnen von Bronze, 05 Mai 2020, 13:59:15

Vorheriges Thema - Nächstes Thema

Bronze

Vielen Dank.
Wer ist denn der Entwickler?

Otto123

findest Du hier:
http://fhem.de/MAINTAINER.txt

Aber ich denke nicht, dass es an ihm liegt. Es liegt aus meiner Sicht an deiner Konfiguration. Ich weiß bloß nicht mehr wie noch suchen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Hallo Thomas,

wozu willst Du das Sonos Modul hauptsächlich verwenden? Mir scheint Dir kommt es vorrangig auf die Sprachausgaben an?

Wir bauen gerade ein sonos2mqtt Variante. Es scheint ja so, dass Deine Umgebung irgendwie Probleme mit dem Sonos Modul von Reinerlein hat, dass kommt leider bei einigen vor. Vielleicht magst Du die sonos2mqtt Variante mit testen?

Seit gestern Abend (heute Morgen 😜) habe ich die Sprachausgabe fertig :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bronze

Hallo Otto,
so ist es, zur Sprachausgabe, um das System lebendiger zu bekommen.
Also das Modul SONOS löschen und das vor Dir angegebene Modul installieren?
Ich hoffe, es bleiben keine Reste vom SONOS in FHEM.

Danke und VG, Thomas

Otto123

Hallo Thomas,

ein delete Sonos sollte die komplette Sonos Umgebung in FHEM (also auch alle Player usw.) löschen.

Die derzeit vielleicht durchgängigste und aktuelle Beschreibung steht in meinem Blog.

Mal sehen ob Du damit klar kommst. Ich bin jetzt dummerweise 14 Tage nicht da ...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andre07

Hallo
Als ich das gelesen habe wollte ich das gleich mal testen
bis auf die Sprachausgabe geht alles Player lässt sich steuern.
Es wird zwar per tts das Sprachfile angelegt aber Sonos bleibt stumm
Mit dem anderen Modul funktioniert es dagegen...zugriff auf dem
Sonosplayer müsste vorhanden sein da ich die Freigabe Sonos
bekannt gemacht habe und nichts beanstandet wurde.
Woran kann das liegen das nachgeschaltete notify will wohl nichts senden?
defmod SonosTTS Text2Speech none
attr SonosTTS DbLogExclude .*
attr SonosTTS TTS_CacheFileDir /mnt/SonosSpeak
attr SonosTTS room System
attr SonosTTS userReadings cifsName {my $hostip=(split(' ', qx(hostname -I)))[0];;my $lastFileName=ReadingsVal($name,"lastFilename","");;$lastFileName=~s/\/var/x-file-cifs:\/\/$hostip/g;;$lastFileName}

setstate SonosTTS 2020-07-05 18:19:27 Player MQTT2_mqttjs_4d3c87f2
setstate SonosTTS 2020-07-05 18:19:27 cifsName /mnt/SonosSpeak/a60163281710e794a7ee32fa4eaacc43.mp3
setstate SonosTTS 2020-07-05 18:19:27 lastFilename /mnt/SonosSpeak/a60163281710e794a7ee32fa4eaacc43.mp3
setstate SonosTTS 2020-07-05 18:19:27 playing 0
setstate SonosTTS 2020-07-05 18:19:27 volume 80


Andre

Otto123

Hallo Andre,

ich habe festgestellt, dass meine Anleitung und die aktuellen Templates nicht ganz zusammenpassen. Ich teste das gerade und melde mich zurück.

Du sagst die Sonos Freigabe funktioniert vom Player, wie sieht dein notify aus?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andre07

das notify hab ich erst mal so übernommen wie auf deiner Seite
also so

defmod n_SonosSpeak notify SonosTTS:playing:.0 {fhem("set ".ReadingsVal($NAME,"Player","")." notify ".ReadingsVal($NAME,"volume","")." ".ReadingsVal($NAME,"cifsName",""))}
attr n_SonosSpeak DbLogExclude .*

setstate n_SonosSpeak 2020-07-05 18:19:27
setstate n_SonosSpeak 2020-07-05 17:24:44 state active


Otto123

naja ich sehe gerade, das userReadings cifsName stimmt nicht.  :o

Was ergibt bei Dir {qx(hostname -I)}in der FHEM Kommandozeile?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andre07

#39
192.168.178.46 192.168.178.84 192.168.178.100 2003:df:d74d:900:b7f3:7e21:5d49:75b1 fd00::30d5:d47c:8431:e5c9 2003:df:d74d:900:192c:f418:69c5:4615 2003:df:d74d:900:cb0c:e9b0:ad:e48b
Meine lokalen ipv4 ipv6 (2 wlans )

Andre

andre07

Meine Konfiguration

defmod SonosBridge MQTT2_DEVICE
attr SonosBridge DbLogExclude .*
attr SonosBridge IODev mqtt2client
attr SonosBridge bridgeRegexp "pm2/(RINCON_[A-Z0-9]+)[:/].* "$1"
attr SonosBridge icon start
attr SonosBridge model sonos2mqtt_bridge
attr SonosBridge readingList "pm2/connected:.* connected\
  homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),;; { "config_$1"=>$EVENT }}\
  "pm2/status/[^/]+/avtransport:.* {}\
  "pm2/status/[^/]+/renderingcontrol:.* {}
attr SonosBridge room MQTT2_DEVICE

setstate SonosBridge 2020-07-05 16:29:51 attrTemplateVersion 20200603
setstate SonosBridge 2020-07-05 16:55:12 config_RINCON_5CAAFD243CDE01400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","pause","play","playmode","previous","queue","seek","selecttrack","setavtransporturi","sleep","speak","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_5CAAFD243CDE01400/control","device":{"identifiers":["RINCON_5CAAFD243CDE01400"],"manufacturer":"Sonos","name":"Wohnzimmer"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_5CAAFD243CDE01400","name":"Wohnzimmer","state_topic":"sonos/RINCON_5CAAFD243CDE01400","unique_id":"sonos2mqtt_RINCON_5CAAFD243CDE01400_speaker","availability_topic":"sonos/connected","payload_available":"2"}




defmod MQTT2_mqttjs_4d3c87f2 MQTT2_DEVICE mqttjs_4d3c87f2
attr MQTT2_mqttjs_4d3c87f2 DbLogExclude .*
attr MQTT2_mqttjs_4d3c87f2 IODev mqtt2server
attr MQTT2_mqttjs_4d3c87f2 alias Wohnzimmer
attr MQTT2_mqttjs_4d3c87f2 devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen (0|1).(STOPPED|PAUSED_PLAYBACK):rc_BLANK 2.(STOPPED|PAUSED_PLAYBACK):rc_PLAY@green:play 2.(pause|stop):rc_STOP@red:play 2.PLAYING:rc_STOP@red:stop 2.(TRANSITIONING|play):rc_PLAY@yellow:stop 2.mute:audio_volume_mute@yellow:stop 2.volume:audio_volume_mid@yellow:stop 2.volumeDown:audio_volume_low@yellow:stop 2.volumeUp:audio_volume_high@yellow:stop 2.next:rc_NEXT@yellow:stop 2.previous:rc_PREVIOUS@yellow:stop (STOPPED|PAUSED_PLAYBACK).(false|previous|next|volumeDown|volumeUp|[0-9]+|CURRENT.*|NEXT.*|PAUSED_PLAYBACK):rc_BLANK \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.previous:rc_PREVIOUS:previous \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.next:rc_NEXT:next \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeDown:rc_VOLDOWN:volumeDown \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeUp:rc_VOLUP:volumeUp \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.false:rc_VOLUP:mute+true \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.true:rc_MUTE:mute+false
attr MQTT2_mqttjs_4d3c87f2 icon audio_volume_low
attr MQTT2_mqttjs_4d3c87f2 jsonMap volume_Master:volume mute_Master:mute transportState:state
attr MQTT2_mqttjs_4d3c87f2 model sonos2mqtt_speaker
attr MQTT2_mqttjs_4d3c87f2 readingList sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_5CAAFD243CDE01400:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  sonos/connected:.* bridgeConnected\
  sonos/RINCON_5CAAFD243CDE01400/error:.* { json2nameValue($EVENT) }
attr MQTT2_mqttjs_4d3c87f2 room MQTT2_DEVICE
attr MQTT2_mqttjs_4d3c87f2 setList stop:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "stop" }\
  play:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "play" }\
  pause:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "pause" }\
  toggle:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "toggle" }\
  volumeUp:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "volumeup" }\
  volumeDown:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "volumedown" }\
  volume:slider,0,1,100 sonos/RINCON_5CAAFD243CDE01400/control { "command": "volume", "input": $EVTPART1 }\
  mute:iconSwitch,false,rc_MUTE,true,rc_VOLUP { my $value = $EVTPART1 eq "true" ? "mute" : "unmute";;;; qq(sonos/RINCON_5CAAFD243CDE01400/control { "command": "$value" } ) }\
  next:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "next" }\
  previous:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "previous" }\
  joinGroup:textField sonos/RINCON_5CAAFD243CDE01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_5CAAFD243CDE01400","groupName","all");; qq(sonos/RINCON_5CAAFD243CDE01400/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField sonos/RINCON_5CAAFD243CDE01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField sonos/RINCON_5CAAFD243CDE01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_5CAAFD243CDE01400/control $payload)}\
  playUri:textField {fhem("sleep 1;; set $NAME play");; qq(sonos/RINCON_347E5C82560801400/control { "command": "setavtransporturi",  "input": "$EVTPART1"})}\
  speak:textField { my $tts="SonosTTS";;my $payload = $EVENT;;$payload =~ s/$EVTPART0 $EVTPART1 //g;; fhem("setreading $tts Player $NAME;;setreading $tts volume $EVTPART1;;set $tts tts $payload");;"{}"}
attr MQTT2_mqttjs_4d3c87f2 stateFormat [$name:bridgeConnected]\
[$name:bridgeConnected].[$name:state]\
[$name:state].previous\
[$name:state].next\
[$name:state].volumeDown\
[$name:state].volumeUp\
 ; ; ;\
[$name:state].[$name:mute]\
<br>[$name:state] CURRENT: [$name:AV_CurrentTrackMetaData_Artist] - [$name:AV_CurrentTrackMetaData_Title] - ([$name:currentTrack_Duration])\
<br>[$name:state] NEXT: &nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;[$name:AV_NextTrackMetaData_Artist] - [$name:AV_NextTrackMetaData_Title] - ([$name:nextTrack_Duration])



Erwähnen sollte man noch das unbedingt port 1883 am MQTT2 Server verwendet werden sollte sonst wird nichts gefunden.

Otto123

Die Bridge verwirrt mich: "pm2 ist ein eigenartiger Topic
Wie hast Du das hinbekommen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andre07

Ich habe die Bridge händisch angelegt danach das Template sonos2mqtt_bridge
zugewiesen.Anschließend gewartet das der Player erzeugt wird nichts passiert port auf 1883
und Player wurde angelegt.
Dabei ist wohl deiner Meinung was schief gelaufen  also alles noch mal auf Anfang
und es mit der Automatik probieren.

andre07

So jetzt mit Automatik wahrscheinlich bin ich zu blöd sowas selber anzulegen  :'(
defmod MQTT2_mqttjs_987404f5 MQTT2_DEVICE mqttjs_987404f5
attr MQTT2_mqttjs_987404f5 DbLogExclude .*
attr MQTT2_mqttjs_987404f5 IODev mqtt2server
attr MQTT2_mqttjs_987404f5 bridgeRegexp sonos/(RINCON_[A-Z0-9]+)[:/].* "$1"
attr MQTT2_mqttjs_987404f5 icon mqtt_bridge_2
attr MQTT2_mqttjs_987404f5 model sonos2mqtt_bridge
attr MQTT2_mqttjs_987404f5 readingList sonos/connected:.* connected\
  homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),;; { "config_$1"=>$EVENT }}\
  sonos/status/[^/]+/avtransport:.* {}\
  sonos/status/[^/]+/renderingcontrol:.* {}
attr MQTT2_mqttjs_987404f5 room MQTT2_DEVICE

setstate MQTT2_mqttjs_987404f5 2020-07-06 17:43:51 attrTemplateVersion 20200603
setstate MQTT2_mqttjs_987404f5 2020-07-06 17:44:30 subscriptions sonos/+/control sonos/cmd/+ sonos/set/+/+

die readingList sollte jetzt wohl passen

defmod MQTT2_RINCON_5CAAFD243CDE01400 MQTT2_DEVICE RINCON_5CAAFD243CDE01400
attr MQTT2_RINCON_5CAAFD243CDE01400 DbLogExclude .*
attr MQTT2_RINCON_5CAAFD243CDE01400 IODev mqtt2server
attr MQTT2_RINCON_5CAAFD243CDE01400 alias Wohnzimmer
attr MQTT2_RINCON_5CAAFD243CDE01400 devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen (0|1).(STOPPED|PAUSED_PLAYBACK):rc_BLANK 2.(STOPPED|PAUSED_PLAYBACK):rc_PLAY@green:play 2.(pause|stop):rc_STOP@red:play 2.PLAYING:rc_STOP@red:stop 2.(TRANSITIONING|play):rc_PLAY@yellow:stop 2.mute:audio_volume_mute@yellow:stop 2.volume:audio_volume_mid@yellow:stop 2.volumeDown:audio_volume_low@yellow:stop 2.volumeUp:audio_volume_high@yellow:stop 2.next:rc_NEXT@yellow:stop 2.previous:rc_PREVIOUS@yellow:stop (STOPPED|PAUSED_PLAYBACK).(false|previous|next|volumeDown|volumeUp|[0-9]+|CURRENT.*|NEXT.*|PAUSED_PLAYBACK):rc_BLANK \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.previous:rc_PREVIOUS:previous \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.next:rc_NEXT:next \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeDown:rc_VOLDOWN:volumeDown \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.volumeUp:rc_VOLUP:volumeUp \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.false:rc_VOLUP:mute+true \b(?!(STOPPED|PAUSED_PLAYBACK)\b)\w+.true:rc_MUTE:mute+false
attr MQTT2_RINCON_5CAAFD243CDE01400 icon audio_volume_low
attr MQTT2_RINCON_5CAAFD243CDE01400 jsonMap volume_Master:volume mute_Master:mute transportState:state
attr MQTT2_RINCON_5CAAFD243CDE01400 model sonos2mqtt_speaker
attr MQTT2_RINCON_5CAAFD243CDE01400 readingList sonos/status/wohnzimmer/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }\
  sonos/status/wohnzimmer/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }\
  sonos/RINCON_5CAAFD243CDE01400:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  sonos/connected:.* bridgeConnected\
  sonos/RINCON_5CAAFD243CDE01400/error:.* { json2nameValue($EVENT) }
attr MQTT2_RINCON_5CAAFD243CDE01400 room MQTT2_DEVICE
attr MQTT2_RINCON_5CAAFD243CDE01400 setList stop:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "stop" }\
  play:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "play" }\
  pause:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "pause" }\
  toggle:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "toggle" }\
  volumeUp:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "volumeup" }\
  volumeDown:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "volumedown" }\
  volume:slider,0,1,100 sonos/RINCON_5CAAFD243CDE01400/control { "command": "volume", "input": $EVTPART1 }\
  mute:iconSwitch,false,rc_MUTE,true,rc_VOLUP { my $value = $EVTPART1 eq "true" ? "mute" : "unmute";;;; qq(sonos/RINCON_5CAAFD243CDE01400/control { "command": "$value" } ) }\
  next:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "next" }\
  previous:noArg sonos/RINCON_5CAAFD243CDE01400/control { "command": "previous" }\
  joinGroup:textField sonos/RINCON_5CAAFD243CDE01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
  leaveGroup:noArg { my $value = ReadingsVal("RINCON_5CAAFD243CDE01400","groupName","all");; qq(sonos/RINCON_5CAAFD243CDE01400/control { "command": "leavegroup",  "input": "$value" } ) }\
  setAVTUri:textField sonos/RINCON_5CAAFD243CDE01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  notify:textField sonos/RINCON_5CAAFD243CDE01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":10,"volume":$EVTPART1,"delayMs":700}}\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_5CAAFD243CDE01400/control $payload)}\
  playUri:textField {fhem("sleep 1;; set $NAME play");; qq(sonos/RINCON_5CAAFD243CDE01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"})}\
  speak:textField { my $tts="SonosTTS";;my $payload = $EVENT;;$payload =~ s/$EVTPART0 $EVTPART1 //g;; fhem("setreading $tts Player $NAME;;setreading $tts volume $EVTPART1;;set $tts tts $payload");;"{}"}
attr MQTT2_RINCON_5CAAFD243CDE01400 stateFormat [$name:bridgeConnected]\
[$name:bridgeConnected].[$name:state]\
[$name:state].previous\
[$name:state].next\
[$name:state].volumeDown\
[$name:state].volumeUp\
&nbsp;;&nbsp;;&nbsp;;\
[$name:state].[$name:mute]\
<br>[$name:state] CURRENT: [$name:AV_CurrentTrackMetaData_Artist] - [$name:AV_CurrentTrackMetaData_Title] - ([$name:currentTrack_Duration])\
<br>[$name:state] NEXT: &nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;[$name:AV_NextTrackMetaData_Artist] - [$name:AV_NextTrackMetaData_Title] - ([$name:nextTrack_Duration])




Otto123

Das sieht auf den ersten Blick gut aus.
Bridge per Hand geht schon, da hast DU bloß den falschen topic eingetragen.

Ja meine Beschreibung haut noch nicht hin, ich bin noch am Basteln. Für die Speak Ausgabe musst Du noch die SonosTTS verbessern.
Da funktioniert das Zusammenbauen der url bei Dir nicht.
Vorschlag: Trag in das Reading host, das ein was bei Dir sonos erreichen kann. Du hast ja mehrere IP Adressen
define SonosTTS Text2Speech none
attr SonosTTS TTS_CacheFileDir /var/SonosSpeak
attr SonosTTS userReadings cifsName:lastFilename.* {my $host=ReadingsVal($name,'host','set host first');;my $lastFileName=ReadingsVal($name,'lastFilename','');;$lastFileName=~s/\/var/x-file-cifs:\/\/$host/g;;$lastFileName}
setreading SonosTTS host {(qx(hostname -s|tr -d '\n'))}
#setreading SonosTTS host {((split(' ', qx(hostname -I)))[0])}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz