Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi m311331,

Sonos Gruppen sind für Fhem transparent. Soll heißen, du gruppierst z.B.

set Sonos Groups [Sonos_Wohnzimmer, Sonos_Bad, Sonos_Schlaffzimmer]


Danach bilden die drei Player eine Gruppe, die das abspielen, was Sonos_Wohnzimmer gerade laufen hatte.

Ab jetzt wird jeder (naja, fast jeder) Befehl, der von dir an irgendeinen der drei Player gesendet wird, automatisch an den Gruppenmaster (Sonos_Wohnzimmer) gesendet, und wirkt damit auf alle Gruppenmitglieder.
Das fast bezieht sich darauf, dass manche Befehle natürlich direkt für den einzelnen Player gedacht sind: z.B. Lautstärke usw...
Für eine Gruppenlautstärke z.B. gibt es einen Extra-Befehl. Einfach im Wiki mal schauen. Ich habe das umgebaut, sodass die Befehle hoffentlich leichter zu finden sind...

Auflösen z.B.:

set Sonos Groups [Sonos_Wohnzimmer], [Sonos_Bad], [Sonos_Schlafzimmer]


Du kannst aber auch bei einem Player ein AddMember oder RemoveMember aufrufen.
Hinzufügen von Bad zum Wohnzimmer:

set Sonos_Wohnzimmer AddMember Sonos_Bad


Wieder auflösen:

set Sonos_Wohnzimmer RemoveMember Sonos_Bad


Grüße
Reinerlein

m311331

Hi reinerlein,


ich versuche gerade bei öffnen der Haustüre einen file abzuspielen
geht aber nicht der player untrebricht zwar das radio aber der file wird nicht abgespielt

in der fhem console geht der befehl set Sonos_Flur PlayURITemp \\192.168.0.23\SonosSpeak\test.mp3 30 aber
auf das notify nicht

define Sonos_Haustuere_Auf notify TF.Sensor1:open {\
fhem "set Sonos_Eingang PlayURITemp \\192.168.0.93\SonosSpeak\front door open.mp3 30";;\
}


im fhem log:
2014.12.17 16:37:02 1: PERL WARNING: Unrecognized escape \S passed through at (eval 17425) line 2.
2014.12.17 16:37:02 3: eval: {
fhem "set Sonos_Eingang PlayURITemp \\192.168.0.93\SonosSpeak\front door open.mp3 30";
}



mfg. m311331

Reinerlein

Hi 311331.

da wird dein String als Perl geparst, und das \S als Zeichen interpretiert. Schreib es einfach mal ohne Perl-Konstrukt:

define Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Eingang PlayURITemp \\192.168.0.93\SonosSpeak\front door open.mp3 30


Ansonsten musst du jeden Backslach verdoppeln...

Grüße
Reinerlein

m311331

Hi reinerlein,

Zitatdefine Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Eingang PlayURITemp \\192.168.0.93\SonosSpeak\front door open.mp3 30
leider geht das nicht bei mir

hast du noch eine idee oder soll ich mal mitloggen ?


mfg. m311331

Reinerlein

Hi m311331,

ich sehe gerade, das dort ja noch Leerzeichen drin waren...
Die müssen natürlich maskiert werden:

define Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Eingang PlayURITemp \\192.168.0.93\SonosSpeak\front%%20door%%20open.mp3 30

Das doppelte %-Zeichen wegen der Notify-Syntax...

Grüße
Reinerlein

m311331

Hi reinerlein,

Dankeschön !  :)

so geht es

was jetzt noch praktisch wäre wenn es ein "PlayAll" geben würde
ohne eben eine gruppe bilden zu müssen


mfg. m311331 

Reinerlein

Hi m311331,

das würde intern ja auch nur eine Gruppe machen, oder eben an jeden Player den Play Befehl senden...
Das kann man auch selbst machen. Dann hat man wenigstens alles in der Hand...

Grüße
Reinerleins

m311331

Hi reinerlein,

hab das mal gestestet mit den gruppen aber wenn ich gruppen bilde sind die
in der sonos app auch und ich kann irgendwie die einzelnen Player nicht mehr einzeln ansprechen

daher hätte ich nochmal die Frage wie wäre den der syntax richtig bei

define Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Eingang, Sono_Flur PlayURITemp \\192.168.0.93\SonosSpeak\front%%20door%%20open.mp3 30


das geht bei mir nicht


mfg. m311331

Reinerlein

Hi m311331,

manche Sachen sollte ich nochmal genau lesen, bevor ich den Post absende, sorry.

Zwischen den Devices in der Auflistung darf kein Leerzeichen sein:

define Sonos_Haustuere_Auf notify TF.Sensor1:open set Sonos_Eingang,Sonos_Flur PlayURITemp \\192.168.0.93\SonosSpeak\front%%20door%%20open.mp3 30
Und ich glaube, du hattest beim Flur ein "s" vergessen.

Versuch das mal...

Und zu den Gruppen: Das ist Absicht :)
Alles im Sonos-System soll allen Controllern (und Fhem ist auch nur ein Controller) in der gleichen Form und Aktualität zur Verfügung stehen...

Grüße
Reinerlein

m311331

Hi reienrlein,

so geht es  :)

Danke Dir !
sag mal wie sehe ich welche version von deinem modul ich habe ?


mfg. m311331

Reinerlein

Hi m311331,

der Befehl "version" gibt die Versionsnummern aller geladenen Module aus.

Bisherige Dev:
2.6-Dev

Neue aus dem SVN:
Commit-Nr. 7244

Die alte Version von meinem Updateserver (nicht mehr erreichbar) hatte noch keins von beiden...

Grüße
Reinerlein

m311331

Hi reienrlein,

Dankeschön !


mfg. m311331

m311331

Hi reinerlein,

kann es sein das das von deinem modul kommt ?

2014.12.18 12:54:54 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at FHEM/Blocking.pm line 117.
2014.12.18 12:54:54 1: CallBlockingFn: Can't connect to localhost:: IO::Socket::INET: Bad hostname 'localhost:'



mfg. m311331

matzemoerk

Ich habe Problemen beim Anlegen des userReadings für Favouriten usw. wie es im Wiki beschrieben ist:


attr Sonos_Wohnzimmer userReadings Favourites:LastActionResult.*?\
GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", \
"LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Radios:\
LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", \
"LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Playlists:\
LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Wohnzimmer", \
"LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }


Ich kopiere das Beispiel aus dem Wiki in die Fhem Eingabezeile und erhalte folgende Fehler:


Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.


Was mache ich falsch?

Grüße,
Matthias

Reinerlein

Hi,

@m311331: Ich verwende das Modul Blocking.pm nicht. Da musst du mal in das entsprechende Board posten...

@Matthias: Allgemein empfehle ich immer die Backslash-Schreibweise zu entfernen. Zu leicht kommt einfach ein Leerzeichen hinter den Backslash oder am Anfang der Zeile eines weg, sodass die Maskierung dann hin ist, und der Code dann u.U. nicht kompilierbar ist...
Ich mache das im Wiki nur, um die Zeilenbreite nicht zu groß werden zu lassen, und klarzumachen, was in eine Zeile soll... Dieses userReadings wird auch durch den Autocreate-Mechanismus angelegt. Lass dir doch einfach einen Player neu erkennen, dann kannst du den funktionierenden Code rauskopieren, bzw. nachschauen, was anders ist...

Grüße
Reinerlein