Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Ralli

Lass mich raten: Du hast das Sonos-Modul nicht deaktiviert, als Du die neuen Player mit dem Controller eingebunden hast?

Mache folgendes:

1) Sonos-Modul auf disable setzen
2) Alles, was mit den neuen Playern zu tun hat, in fhem löschen (die Player, die dazugehörigen RGs usw.)
3) Sonos-Modul wieder auf enable setzen

Nun wird das Modul die Player neu entdecken und einbinden mit dem Namen, den die Player im Sonos-Controller haben.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Elektrolurch

Hallo Reinerlein,

kurze Rückmeldung und zwei Fragen:

1. Die Umschaltung auf externen Eingang funktioniert nun. Warum ist nicht ganz klar. Möglicherweise war die Lautstärke an dem Enigma-Receiver zu gering eingestellt.....

2. Ich habe:
buttonEvents 1:MU 1:MD
als Attribute definiert und mit disable 1 und anschliessendem disable 0 Sonos neu gestartet und die Attribute einlesen lassen. Trotzdem bekomme ich kein Event vom Player, wenn ich kurz hintereinander die Mute und die Up - Taste drücke.
elsif($rd eq 'buttonEvents')
{
Log3($ccname,3,(caller(0))[3] . ": buttonEvents $val");

return undef;
Idee war, mit den Tastenkombinationen am Player zum nächsten /vorherigen Internetsender zu wechseln.

2. my $cmd = "set $master startSearchlist $kategorie $kategoriename $titel" . '/'. $album . '/' . $interpret . ' ' . $option;
$option kann '-' sein, wenn ich die gefundene Liste direkt abspielen will, ansonsten leer, damit das gefundene Ergebnis zur Playliste hinzugefügt wird.
Und nun meine Frage:
a) (hatten wir schon) Das Hinzufügen zur Playliste stoppt die laufende Wiedergabe und startet sie wieder beim ersten Song. Da wolltest Du noch was ändern...
aber
b) Mir ist aufgefallen, dass das gefundene Ergebnis der Suche immer an der aktuellen Abspielposition eingefügt wird.
Kann man das ev. so ändern (oder über ein Atttribut) steuerbar machen, dass das gefundene Ergebnis  der Suche immer hinten an die aktuelle Playliste angeängt wird? Eigentlich fände ich das vom Handling logischer.....

Ansonsten läuft alles super und sogar ziemlich schnell. Wenn ich am Player per Knopf die Lautstärke ändere, sehe ich das auch sofort auf dem Bildschirm.
Mir ist noch aufgefallen, das VolumeUp und VolumeDown das Event "relativeVolume" generieren. Das habe ich dann wie folgt umgesetzt, um meinen Lautstärkeregler  auf dem Bildschirm zu aktualisieren:
elsif(($cmd  eq 'SetRelativeVolume') && defined($master))
{
$res =~s/SetRelativeVolume: //;
Log3($ccname,3,(caller(0))[3] . ": relativeVolume -> Volume $res");
XCall('readingsSingleUpdate',$cchash,'Volume',$res,1);
} # if SetRelativeVolume
Der Wert entspricht doch dem Volume?

Gruß Elektrolurch


configDB und Windows befreite Zone!

micomat

Danke euch :) Daran wird es liegen.


Gruß
Markus
Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

Reinerlein

Hallo Elektrolurch,

das Mute-Event wird nicht mehr generiert, da der Button am Player von Sonos irgendwann in einen Play/Pause-Button umgestellt wurde.
Damit gehen nur noch die Up-/Down-Buttons. Mach doch einfach ein UD-Event für einen zurück, und ein DU-Event für einen vor in deiner Radioliste...

Das mit dem Stoppen der Wiedergabe ist hier schon behoben... ich bin auch gerade dabei, die Doku nachzuziehen, um das zu Veröffentlichen... bin aber beruflich spontan in Deutschland unterwegs, sodass ich vermutlich erst zum Wochenende hin zum Veröffentlichen komme...
Das mit dem Hintenanhängen kann ich sicherlich noch einbauen. Ich schaue mir das mal an...

Bei RelativeVolume kann eine positive oder negative Zahl übergeben werden. Positiv macht lauter, negativ macht leiser... Wenn du eine Lautstärke direkt setzen willst, ist das ungeeignet...
Das Ergebnis, was in LastActionResult abgelegt wird, enthält dann die wirklich gesetzte neue Lautstärke...

Grüße
Reiner

Elektrolurch

Hallo Reinerlein,

Zitat:
Damit gehen nur noch die Up-/Down-Buttons. Mach doch einfach ein UD-Event für einen zurück, und ein DU-Event für einen vor in deiner Radioliste...

Ich müsste aber vermutlich 1:UU definieren, da ich ja ansonsten nicht mehr die Lautstärke über die Buttons am Player verstellen kann, oder sehe ich das falsch?


relativeVolume: Ich habe auf der GUI zwei Knöpfe, die VolumeUp und VolumeDown an den Player senden. Die Schrittweite kann man ja mit dem attr VolumeStep (z.B.) auf 5 einstellen.
Wenn vom Player eine Volumenänderung gemeldet wird, so bekomme ich ja das event "Volume" und kann damit den Lautsärkeregler (knob) aktualisieren.
Ich hatte mich nur zunächst darüber gewundert, das bei VolueUp / Down kein "Volume" - Event generiert wird und zufällig hatte ich dann in der LastAction das RelativeVolume entdeckt. Dabei ist die Änderung ja doch nicht relativ, sondern der absolute Lautstärkewert. Eigentlich sollte da auch ein "Volume" - Event generiert werden...
...na ja habe ja eine Lösung gefunden. War mir nur so aufgefallen.

Ich hatte hier das Thema "Bookmark - Helper" von Andre gefunden. Da ich auch Hörbücher höre, die aber derzeit wegen der fehlenden Möglichkeit (automatischen) an die letzte gehörte Stelle zu springen, nutze ich einen MP3-Player.

Hat sich zu dem Thema noch was ergeben oder wird das noch weiter verfolgt?

Klappt übrigens prima mit dem Einlesen der Sonos-Bibliothek. Generire mir aus dem Hash  da ein dreistufiges Menü, mit dem man CDs, Interpreten usw. auswählen kann. Über zusätzliche Textfelder kann ich dann auch noch die Filter-Funktionen Deines Search-Befehls befüllen.
Schade ist eigentlich nur, dass man das effiktive Suchergebnis des search-Befehls nicht visualisieren kann.

Viel Spaß und Erfolg auf Deiner G-Reise.

Elektrolurch
configDB und Windows befreite Zone!

Reinerlein

Hi Elektrolurch,

das mit den Button-Events ist immer zusätzlich zur normalen Funktionalität. Du hast aber recht, wenn du z.B. "1:UD" definierst, dann wird das Event auch ausgeführt, wenn du mit einem Fhem-Skript (oder über die Oberfläche) einmal Up und einmal Down innerhalb von 1 Sekunde ausführst. Oder mit dem normalen Sonos-Controller... Das dürfte aber doch recht selten sein...

Zu dem RelativeVolume: Das ist eine Funktion der Sonos-Player. Ich frage für die Rückmeldung nur das am Player nun wirklich eingestellte ab. Es sind also schon zwei verschiedene Befehle, die mir einen weiteren Aufruf an den Player sparen.
Bsp.: Wenn ich mit SetVolume eine relative Änderung durchführen will, brauche ich erst die aktuelle Lautstärke, rechne meine Änderung drauf (oder runter), setze diesen neuen Wert, und frage als Ergebnis die aktuelle Lautstärke wieder ab.
Mit SetRelativeVolume teile ich nur die gewünschte Änderung mit, und frage das Ergebnis ab.
Und ja, als Folge sollte bei beiden Varianten trotzdem ein Volume-Änderungs-Event in Fhem generiert werden. Wie auch bei jeder Änderung z.B. über den Controller. Es gibt nur einen Unterschied im Reading "LastActionResult" nach der Ausführung...

Bei den Bookmarks geht es sicherlich noch weiter... nur komme ich da momentan nicht zu :(
Aber einige Funktionalitäten sind ja schon drin... vielleicht reicht dir das ja. Im Wiki unter http://www.fhemwiki.de/wiki/SONOS#Zusammenfassung_der_Bookmarkeinrichtung gibt es eine Beschreibung dazu... Der für dich interessante Bereich ist: Bookmarks für Titel...

Grüße
Reiner

MandelHL

Hallo,

ich habe jetzt mein Sonos wieder in mein FHEM eingebunden und möchte mir wieder bei geöffneter Tür die offenen Fenster durchgeben lassen.

Meine Log-Datei wirft mir dabei die folgende Fehlermeldung aus:
PERL WARNING: Bareword found where operator expected at (eval 773) line 2, near "@@fenster"
2015.11.25 20:16:20 3: eval: my $EVTPART0='open';my $TYPE='CUL_HM';my $SELF='Haustuerkontakt';my $EVENT='open';my $NAME='Sensor_Haustuer';{
    my @@fenster = ();
    push(@@fenster, 'Badezimmerfenster im Erdgeschoss') if (Value("Sensor_Badezimmerfenster_EG") eq "open");
    push(@@fenster, 'Schlafzimmerfenster') if (Value("Sensor_Schlafzimmerfenster") eq "open");
if (scalar(@@fenster) && (Value("Sensor_Haustuer") eq "open")) {
my $durchsage = 'Achtung! Die Haustür wurde geöffnet. Folgende Fenster sind noch offen: '.join(', ', @@fenster);
fhem('set Sonos_Kueche Speak 45 de '.$durchsage);
fhem('set Sonos_Bad_EG Speak 35 de '.$durchsage);
DebianMail('yyyyyyyyyyyy@@gmail.com','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');
DebianMail('xxxxxxxxx@@gmail.com','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');
}
}


Die Haustuer.cfg sieht so aus:
define Haustuerkontakt notify Sensor_Haustuer:open {\
    my @@fenster = ();;\
    push(@@fenster, 'Badezimmerfenster im Erdgeschoss') if (Value("Sensor_Badezimmerfenster_EG") eq "open");;\
    push(@@fenster, 'Schlafzimmerfenster') if (Value("Sensor_Schlafzimmerfenster") eq "open");;\
if (scalar(@@fenster) && (Value("Sensor_Haustuer") eq "open")) {\
my $durchsage = 'Achtung! Die Haustür wurde geöffnet. Folgende Fenster sind noch offen: '.join(', ', @@fenster);;\
fhem('set Sonos_Kueche Speak 45 de '.$durchsage);;\
fhem('set Sonos_Bad_EG Speak 35 de '.$durchsage);;\
DebianMail('yyyyyyyyyyy@@gmail.com','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');;\
DebianMail('xxxxxxxxxxxx@@gmail.com','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');;\
}\
}


Könnt Ihr mir helfen und mitteilen, warum die Durchsage nicht mehr funktioniert? Es hatte ja schon mal funktioniert.

Danke und viele Grüße
Mandel

Reinerlein

Hi Mandel,

hast du vielleicht den Fhem-Featurelevel hochgesetzt?
Dann würden die doppelten @-Zeichen zuviel sein...

Grüße
Reiner

mandeloh

Danke, Reiner. Das war's.

Mitch

Ich bekomme immer wieder diese Fheler im Log:

Loading device description failed with error: 401 Unauthorised at ./FHEM/00_SONOS.pm line 3590 thread 1.
Loading device description failed with error: 401 Unauthorised at ./FHEM/00_SONOS.pm line 3590 thread 1.
Loading device description failed with error: 401 Unauthorised at ./FHEM/00_SONOS.pm line 3590 thread 1.


Was hat es denn damit auf sich?
Rechteprobleme?
FHEM im Proxmox Container

aherby

Hallo Reiner,

ich habe gerade mal etwas gespielt und Wireshark genutzt.
Wenn ich mich nicht verlesen habe, könnte mit dem unten gezeigten Parameter die
neue Funktion ,,Trueplay" ein und aus geschaltet werden.

Trueplay funktioniert beim Play1, Play3 und Play5. Die Soundbar wird bisher nicht unterstützt.

Vielleicht findet die Funktion ja den Weg in das Modul.

Danke

Gruß aherby
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

Reinerlein

Hi aherby,

ich dachte, dass wäre etwas, was man kalibrieren muss, und demnach mit dem Sonos-Controller (auf iOs) durchführen muss?
Oder ist das dann, wenn es einmal eingestellt ist, dass man die Verwendung der Soundverbesserung ein- bzw. ausschalten kann?

@Mitch: das sieht nach einer Nicht-Sonos-Komponente aus, die sich wieder einschummelt... Du könntest höchstens mal den Log hochdrehen, und versuchen die IP-Adresse dazu herauszufinden. Diese kannst du dann ignorieren lassen...

Grüße
Reiner

aherby

Guten Morgen Reiner,

Treuplay muss wie du sagt einmal kalibriert werden. Dazu schaltet man Trueplay beim ersten Mal ein und wird dann direkt zur Information von Trueplay (Text und Video) geleitet. (kleiner Hinweis: Man sollte den Sonos-Geräte in der Firewall oder Fritzbox nicht zu viel verbieten, sonst kann Sonos den Testton nicht laden und man bekommt eine Fehlermeldung)
Nach erfolgreicher Kalibrierung wird dann die Einstellung gespeichert und kann ein- und aus geschaltet werden.

Im iPhone findet man auch direkt die Möglichkeit ,,Trueplay Neu einstellen" dann kommt man wieder zur Anleitung und könnte Trueplay neu kalibrieren.
Dies ist aber, solang der Player nicht verstellt wird, nicht nötig.
Außerdem ist die Kalibrierung schon recht laut (genauso wie die Kalibrierung vom Sub).

Wenn weitere Infos benötigt werden oder ich was testen soll einfach melden.

Gruß aherby
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

rapster

Zitat von: Reinerlein am 30 November 2015, 23:53:25Du könntest höchstens mal den Log hochdrehen, und versuchen die IP-Adresse dazu herauszufinden. Diese kannst du dann ignorieren lassen...

Hi Reiner,

das habe ich mich schonmal bei meiner Installation gefragt,

wie währe es mit einem Attribut "includedIPs"?

Da sich gefühlt die Hardware um SONOS herum häufiger ändert als die Sonosplayer selber.

Gruß
Claudiu

Mitch

Zitat von: Reinerlein am 30 November 2015, 23:53:25@Mitch: das sieht nach einer Nicht-Sonos-Komponente aus, die sich wieder einschummelt... Du könntest höchstens mal den Log hochdrehen, und versuchen die IP-Adresse dazu herauszufinden. Diese kannst du dann ignorieren lassen...

Danke!
Gerade den Loglevel hoch gesetzt und nun warte ich auf einer neue Meldung  8)
FHEM im Proxmox Container