Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi,

@Alex: Für 2. musst du dir vorher den Abspielstatus (transportState) selber merken (am Besten in einem Reading eines deiner Notifies dazu, damit es optisch nah dran ist), und nur wenn dieser auf PLAYING stand, dann auch wieder den Play-Befehl absetzen.
Für 1. musst du mal im Event-Monitor schauen, was überhaupt für Events ankommen...

@Visionsurfer: Dazu gibt es im Wiki ein Beispiel: https://wiki.fhem.de/wiki/SONOS#Beispiel_f.C3.BCr_ein_Shell-Skript_zum_Aufr.C3.A4umen_eines_Speak-Verzeichnisses

Grüße
Reinerlein

bruece-lee

Hallo,

ich habe noch eine Frage zur Sprachausgabe: Ist es möglich eine Sprachausgabe anzustoßen, die zeitgleich auf allen Sonos Lautsprechern ausgegeben wird OHNE dass diese zuvor in eine gemeinsame Gruppe hinzugefügt wurden?

Ich würde gerne alle Sprachausgaben immer an alle Lautsprecher schicken und im Anschluss soll jede Box wieder in ihren alten Zustand zurückkehren. Ist das möglich? Oder muss ich den Speak-Befehl an jede Box einzeln schicken und damit leben, dass die Sprachausgabe in dem Fall leicht zeitversetzt erfolgt?

Danke und Gruß,
Bruece-Lee

inesa394

Hallo
Nutze seit kurzen auch Sonos in fhem meistens zur Sprachausgabe.
Am späten Abend bis zum Morgen werden meinen Boxen vom Stromnetz getrennt.
Leider scheint sich das Modul jedesmal aufzuhängen und verursacht auf meinen
Intel Nuc 100% Systemlast erst ein Neustart läßt es wieder normal arbeiten.
Dieser Prozeß ist der Übeltäter " /usr/bin/perl ./FHEM/00_SONOS.pm 4711 3 0"
Wenn ich den abschieße ist alles wieder normal Systemlast geht runter.
Ich könnte jetzt natürlich das System jeden Morgen automatisch neu starten will
ich aber nicht. Gibt es zu meinen Problem vieleicht schon eine Lösung ?


Ines


bruece-lee

Hallo Ines,

das Wiki hat eine Lösung dafür:

https://wiki.fhem.de/wiki/SONOS (ganz unten auf der Seite)

define RebootSonosDOIF DOIF ([FunksteckerSonos:state] eq "on" )(deleteattr MeinSonosDevice disable) (save)
DOELSEIF ([FunksteckerSonos:state] eq "off" )(attr MeinSonosDevice disable 1)(save)

Tobias

Hi,
ich möchte im laufenden Track vorspulen können. Das geht ja mit "set <mySonos> currentTrackPosition ??". Problem ist nun das ich in TabletUI nur ein button definieren möchte. Also benötigt man einen relativen bezug. Mit VolumeU und VolumeD ist das ja schon möglich.
Könnte dieses Feature auch noch bzgl CurrentTrackPosition mit aufgenommen werden? Zb. pro Befehl ein 10sek Sprung...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Reinerlein

Hi Tobias,

reicht dir dafür auch eine Relativangabe beim set von "currentTrackPosition", also z.B.

set Sonos_Bad currentTrackPosition +10
.
.
set Sonos_Bad currentTrackPosition +1:05
.
.
set Sonos_Bad currentTrackPosition +5%
?
Natürlich auch mit "-".

Dann baue ich das mal ein. Ich muss mich aber auch noch um den neuen SVN-Zugang kümmern, momentan kann ich gar nicht einchecken :)

Grüße
Reiner

Tobias

Hi Rainer, das würde völlig ausreichend sein. Danke

Gesendet von meinem Leap mit Tapatalk

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

dogexan

Hallo zusammen,

ich denke ich habe mein zweites Problem nun wie folgt gelöst:

CALLMONITOR:.*ring set Sonos_Wohnzimmer Stop ; set Sonos_Wohnzimmer Mute 1 ; set Sonos_Wohnzimmer PlayURITemp \\IP\SonosSpeak\Klingelton.mp3 15
CALLMONITOR:.*connect set Sonos_Wohnzimmer Stop ; set Sonos_Wohnzimmer Mute 1
CALLMONITOR:.*disconnect { if(Value("Sonosstatus") eq "an") {fhem("sleep 1 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play") }}


Da ich nicht wirklich PERL beherrsche, musste ich mir mit diesen Hilfs-Notifys und einem Dummy (Sonosstatus) helfen. So kann ich mit dem Notify CALLMONITOR:.*disconnect... auswerten ob vor dem Anruf (ankommend oder auch abgehend) Musik lief oder der Ton vom Fernseher abgespielt wurde.


CALLMONITOR:.*call { if(ReadingsVal("Sonos_Wohnzimmer", "transportState", "") eq "PLAYING" || ReadingsVal("SonyTV", "input", "") eq "ExtInput") {fhem ("set Sonosstatus an")} else {fhem("set Sonosstatus aus")}}
CALLMONITOR:.*ring { if(ReadingsVal("Sonos_Wohnzimmer", "transportState", "") eq "PLAYING" || ReadingsVal("SonyTV", "input", "") eq "ExtInput") {fhem ("set Sonosstatus an")} else {fhem("set Sonosstatus aus")}}


Die Mute Befehle musste ich einbauen da sonst der Ton nicht aus- bzw. eingeschaltet wird wenn der Fernseher läuft. Ob der Ton am Fernserer momentan an oder aus ist, werte ich durch ReadingsVal("SonyTV", "input", "") eq "ExtInput") aus.

An dem 1. Problem beiße ich mir jetzt die Zähne aus.
Zitat1. Wenn der Anrufer auflegt bevor ich ans Telefon gehen kann wird natürlich nochmal der Klingelton abgespielt. Es wäre also nicht schlecht wenn das Abspielen abgebrochen werden könnte wenn der Anrufer auflegt. Zumindest ein 2. Mal abspielen möchte ich gerne vermeiden.

Ich weiß nicht wie ich es anstellen soll, dass währenddessen der Klingelton abgespielt wird und der Anrufer einhängt (Hier entsteht das Event "disconnect" von dem Modul CALLMONITOR) der Klingelton beendet wird und das wieder abgespielt wird was vorher lief.

Ich finde es wäre praktisch wenn man "PlayURITemp" abbrechen könnte. ::)

Ich würde dann
CALLMONITOR:.*disconnect { if(Value("Sonosstatus") eq "an") {fhem("sleep 1 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play") }}
in etwa das ändern:
CALLMONITOR:.*disconnect { if(ReadingsVal("Sonos_Wohnzimmer", "currentTitle", "") eq "Klingelton" {fhem(set Sonos_Wohnzimmer PlayURITempCancel)} elsif(Value("Sonosstatus") eq "an") {fhem("sleep 1 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play") }}

PlayURITempCancel wäre jetzt an dieser Stelle mein ausgedachter Befehl der PlayURITemp abbrechen kann.

Wäre so eine Umsetzung möglich oder hat jemand vielleicht eine andere bessere Idee?

Vielen Dank

P.S. Vielleicht weiß auch jemand wie ich den ganzen Wust von Notifys und den sicherlich vermeidbaren Dummy, "schöner" gestallten könnte, eventuell in der 99_myUtils.pm  ::) Aber das ist eher Nebensache.

Gruß Alex

Elektrolurch

Zitat:
Ich würde gerne alle Sprachausgaben immer an alle Lautsprecher schicken und im Anschluss soll jede Box wieder in ihren alten Zustand zurückkehren. Ist das möglich? Oder muss ich den Speak-Befehl an jede Box einzeln schicken und damit leben, dass die Sprachausgabe in dem Fall leicht zeitversetzt erfolgt?

An dem Thema habe ich mir auch son die Finger wund programmiert. Problem dabei ist, dass ich u.a. eine S1 habe (die schon zu einem Pärchen gruppiert sind) und wenn ich versuche, die mit den anderen zusammen für so eine Durchsage zu gruppieren, dann zerfällt die Gruppe komplett und die Player bleiben sogar stehen. Mehr als drei Player zu einer Gruppe ohne Störung zusammenzufassen, ist mir noch nicht gelungen.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

dogexan

Kleines Update zu meinem Problem,

mit:
CALLMONITOR:.*disconnect { if(ReadingsVal("CALLMONITOR", "missed_call", "0")>0) {fhem("set Sonos_Wohnzimmer Stop ; sleep 28 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play")} elsif(Value("Sonosstatus") eq "an") {fhem("sleep 1 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play") }}

hab ich jetzt eine Lösung gefunden mit der ich leben kann. Den oben genannten Code hab ich als Ersatz für das disconnect notify in meinem letzten Post verwendet:
ZitatCALLMONITOR:.*disconnect { if(Value("Sonosstatus") eq "an") {fhem("sleep 1 ; set Sonos_Wohnzimmer Mute 0 ; set Sonos_Wohnzimmer Play") }}

Einziger Nachteil ist das der Ton nicht direkt wieder eingeschlatet wird nachdem während des Klingels eingehangen wurde. Mit "sleep 28" muss ich warten bis der Klingelton im Hintergrund zu ende ist und ich mit "Mute 0" bzw. "Play" den Ton vom Fernsehprogramm oder Musik wieder einschalten kann.

Gruß Alex




Tobias

Hi,
ich habe sehr viele MEldungen im Log:
Loading device description failed with error: 404 Not Found at ./FHEM/00_SONOS.pm line 3747 thread 1
Keine Ahnung welche IP-Adresse /Gerät dieses verursacht.
Ist es nicht besser anstatt dem Attribut "igoreIPs" eine Art Whitelist zu setzen? Zb. "acceptedIPs"?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Wuppi68

Zitat von: Tobias am 01 Januar 2017, 16:18:13
Hi,
ich habe sehr viele MEldungen im Log:
Loading device description failed with error: 404 Not Found at ./FHEM/00_SONOS.pm line 3747 thread 1
Keine Ahnung welche IP-Adresse /Gerät dieses verursacht.
Ist es nicht besser anstatt dem Attribut "igoreIPs" eine Art Whitelist zu setzen? Zb. "acceptedIPs"?

die Whitelist heißt usedonlyIps im Sonos Modul
FHEM unter Proxmox als VM

Tobias

Danke, hab ich glatt übersehen... sorry und danke :)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

visionsurfer

Hallo,

ich nutze die Weckautomation in Verbindung mit dem Residents Modul. Dazu gibt es ja im Wiki eine ausführliche Anleitung.
In den ganzen Beispiel Macros die dabei sind, wird ja auch einiges von Sonos verwendet.
Ich versuche das nun gerade bei mir einzubinden. Doch an einer Stelle hänge ich.

Ich habe aus dem Beispiel folgendes eingebunden:


## Stop playback bedroom's Sonos device might be involved in
fhem "set Sonos_Schlafzimmer:transportState=PLAYING stop;";

## Make Bedroom's and Bathroom's Sonos devices a single device
## and do not touch other Sonos devices (this is why we use RemoveMember!)
fhem "sleep 10; set Sonos_Schlafzimmer RemoveMember Sonos_Schlafzimmer";
fhem "sleep 11; set Sonos_Bad RemoveMember Sonos_Bad";

## Group Bedroom's and Bathroom's Sonos devices with Bedroom as master
fhem "sleep 12; set Sonos_Bad AddMember Sonos_Schlafzimmer; set Sonos_Schlafzimmer:FILTER=Shuffle!=1 Shuffle 1; set Sonos_Schlafzimmer,Sonos_Bad:FILTER=Volume!=12 Volume 12";

## Start music from playlist
fhem "sleep 13; set Sonos_Schlafzimmer StartPlaylist Abendentspannung";


Ich habe 2 Boxen wie zu erkennen ist. Sonos_Schlafzimmer und Sonos_Bad.
Ich habe das alles in meinem Status gosleep eingebunden. Wenn ich nun in diesen Status gehe, dann fängt meine Box im Schlafzimmer auch an die Musik zu spielen. Nur die Box im Bad bleibt still.

Mach ich da irgendwas falsch ? Ich komme leider nicht drauf.
Die beiden Boxen sollen doch als Gruppe gebildet werden ? Oder muss ich erst noch irgendwo was anderes machen ?

Grüße,
Visionsurfer

dantist

Wie kann ich denn als Musikquelle eine Sonos Connect auswählen? In der Sonos-App nennt sich das "Eingang", in meinem Fall heißt die Connect "Plattenspieler: Sonos Connect".