Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi Jürgen,

wie geschrieben, kann man in einer ReadingsGroup (wie von mir als default erzeugt) HTML-Code ausgeben. Dort baue ich diese URL direkt in einen IMG-Tag ein...
Aber das müsste auch in einem Weblink gehen, auch dort kann man eine Perl-Prozedur angeben, die den HTML-Code für die Anzeige erzeugen soll...

Grüße
Reiner

dev0

#1996
Hallo Reiner,

ich erstelle zur Zeit ein Sonos Widget für smartVisu. Um die currentTrackPosition mit einem Slider darstellen und setzen zu können, benutze ich im Moment eine Kombination aus notify/at. Das notify (Trigger transportState) erstellt und löscht ein at, dass alle x Sekunden ein get CurrentTrackPosition auslöst. Das funktioniert so weit auch. Unschön daran ist, dass durch das Erzeugen/Löschen des at device das rote Fragezeichen zum Speichern dieser Änderung auffordert sobald man einen Track abspielt oder stoppt.
Jetzt kommst du ins Spiel :-) Praktisch wäre ein Attribut, dass in Sekunden festlegt wie oft das reading currentTrackPosition automatisch aktualisiert wird, wenn transportState PLAYING ist und der Player kein Slave einer Gruppe ist [Edit: und currentNormalAudio = 1].

Würdest du so etwas in der Art in das Sonos Modul einbauen?

/Uli

Reinerlein

Hi Ulli,

im Normalfall holt man sich einmal die currentTrackPosition (per Notify, da das Reading automatisch aktualisiert wird), merkt sich den Zeitstempel dazu und arbeitet mit einer eigenen Zeitfunktion.
Das tue ich auch für meine Vollbildanzeige der Player (erreichbar mit Klick/Tipp auf das Coverbild in der normalen Raumübersicht).

Dort starte ich einen Javascript-Timer, der die Anzeige aktualisiert (ohne eine erneute Anfrage beim Player). Leider ist das ganze etwas ungenau, sodass es nicht exakt mit der Realität übereinstimmt, aber das kann auch an mir liegen...
Das Reading currentTrackPosition wird bei jedem Wechsel des Transportstate  automatisch aktualisiert. Es enthält also immer die Position (und den dazugehörigen Zeitstempel) der letzten Zustandswechselaktion des Players.

Ich würde fhem nicht mit einer ständigen Abfrage der Position belästigen, da die im Normalfall ja linear verläuft :) Bei einer Änderung des Zustand (wie pause, start, aber auch beim Springen an eine andere Position im Titel usw.) wird das Reading ja aktualisiert.

Zu deiner Fragezeichenproblematik: du kannst ein Device als Temporär markieren. Dann wird es nicht für diese Speichern-Überprüfung herangezogen. Hier mal ein kurzer Thread dazu: http://forum.fhem.de/index.php/topic,39610.msg320626.html#msg320626

Grüße
Reiner

dev0

#1998
Hi Reiner,

auf die Idee dafür einen eigenen JavaScript Timer zu starten bin ich nicht gekommen, aber überfordert meine Kenntnisse wohl auch. Ich bin froh, dass ich die passenden fronthem Converter und Subs in Perl hinbekommen habe, um die Räume komfortabel gruppieren und trennen zu können. Vielleicht findet sich jemand, der das übernimmt, wenn ich das Widget veröffentlicht habe. Ich denke, ich werde es dann erstmal so lassen und gehe nur die Fragezeichenproblematik an. Danke für den Hinweis dazu und deine ausführliche Antwort.

Gruß
Uli

(Edit) Btw: kann ich die Warnungen aus dem IO::Socket::IP Modul ignorieren?
Odd number of elements in hash assignment at /usr/local/share/perl/5.18.2/IO/Socket/IP.pm line 352, <$client> line 7.

Reinerlein

Hi Uli,

so kompliziert ist das mit dem Javascript Timer nicht. Du brauchst eine Javascript-Prozedur, die automatisch aufgerufen wird, und die die Aktualisierung deines Sliders durchführt. Am Ende dieser Prozedur startest du wieder den Timer, der diese Prozedur nach einer bestimmten Zeit (z.B. einer Sekunde) wieder aufruft.
Dann brauchst du nur noch initial einmal den Timer mit dem Namen dieser Prozedur aufzurufen...

Abstraktes Beispiel:

function timerEvent() {
   //Hier den Code zum Aktualisieren des Slider hintun...

  if ('Es soll weiter aktualisiert werden') {
    setTimeout('timerEvent()', 1000);
  }
}

//Starte den AktualisierungsTimer
setTimeout('timerEvent()', 100);


Die Meldungen bzgl. IP kannst/musst du ignorieren. Ich habe bislang keine Möglichkeit gefunden, diese Meldungen abzuschalten.
Die kommen irgendwie häufiger, wenn man exzessiv Netzwerkverkehr produziert...
Das betrifft aber alle Perl-Netzwerk Aktionen.

Grüße
Reiner

justme1968

zur fehlermeldung gibt es weiter oben etwas. du kannst das perl modul patchen. dann ist sie weg. der fehler liegt ziemlich sicher dort.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dev0

#2001
Hi Reiner,

sieht erstmal wirklich nicht so kompliziert aus, ich werde mir das mal ansehen.

Mir ist aber geade noch etwas anderes aufgefallen, bin aber nicht sicher, ob das an meiner Installation liegt, glaube aber eher nicht.
Wenn Ich meine 3 Sonosräume (1x Connect, 1x Play:1 und 2x Play:3 (L+R)) über den Sonos Controller gruppiere und dann ebenfalls mit der Sonos Software den Master der Gruppe aus der Gruppe herausnehme, dann wird einer der beiden ehemaligen Slaves ein Master für den verbliebenen Slave. In FHEM ist der verbliebe Slave dann im transportState ERROR, obwohl er die Musik des neuen Masters abspielt. Verstehst Du was ich meine und kannst Du das nachvollziehen oder funktioniert das bei dir/euch?

@Andre: In der 3-zeiligen Sub hatte ich die Warnungen schon ausgeschaltet, war mir nur nicht sicher ob die vielleicht doch etwas ernstes sagen wollen :-)

/Uli

dantist

Ich bin grade dabei, nach und nach die täglichen Fehlermeldungen im Logfile auszumerzen. Jetzt ist Sonos dran ;D

Folgendes taucht immer wieder auf:

Loading device description failed with error: 500 Can't connect to 192.168.xxx.xxx:5000 (Verbindungsaufbau abgelehnt) at ./FHEM/00_SONOS.pm line 3590 thread 1.

Hinter der Adresse verbirgt sich ein Netzwerkspeicher, der von Sonos indiziert ist aber nicht immer läuft. Lässt sich die Fehlermeldung irgendwie abstellen?

Elektrolurch

Hallo Reinerlein,

nach einigen Anfangsschwierigkeiten wirds aber schon langsam...
Ich habe da aber noch ein paar log-Einträge:

1.
2015.08.18 17:00:43 1: Including ./FHEM/00_utils_Sonos.cfg
Smartmatch is experimental at ./FHEM/00_SONOS.pm line 5383.
Current: "fhem.pl", gPath: "./FHEM"

Da gibt es wohl einen patch, um in der neuen perl-Version den ... - Vergleichsoperator wieder zu legalisieren? :-)

2. Aber das hier kommt bei jedem Zugriff auf Sonos und "ballert" mir das log-File zu:
Odd number of elements in hash assignment at /usr/share/perl/5.20/IO/Socket/IP.pm line 109, <$client> line 8.

Es ist ein neues debian auf einem Cubietruck. Im Augenblick läuft nur Sonos drauf, da ich das erst stabil hin bekommen möchte. Der Rest ist noch auf einer Fritzbox, zieht aber nach dem ich mein Sonos fertig gestrickt habe, auch um.
,
Ich habe nach den log-Ausgaben im Forum gesucht und festgestellt, das andere Nutzer das Problem auch haben. Leider aber nirgens eine Erklärung oder Abhilfe dafür gefunden.
Wg. Screenreader versuche ich meine logs möglichst sauber zu halten. Gibt es ev. eine Lösung?

Grüße

Elektrolurch

configDB und Windows befreite Zone!

justme1968

zu 2.: schau mal etwas weiter oben im thread. da hatte ich einen kleinen patch gepostet der die meldung behebt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

raspklaus

@ dantist

trag die IP unter ignoredips ein, dann ist die Meldung weg

Elektrolurch

Hallo Andre,

Zitat:
zu 2.: schau mal etwas weiter oben im thread. da hatte ich einen kleinen patch gepostet der die meldung behebt.

:-(
1. Jetzt habe ich die letzten sechs Seiten durchgeblättert... nichts gefunden oder überlesen
2. Die Suche gibt nur genau meine Frage aus, aber die Forumssuchmaschine ist ja eh nicht so toll.
3. Über startpage.com findet er nichst, sagt der Familienfilter sei ev. dran schuld, aber das ist eher ja Anektote (gibts für patch noch eine Bedeutung, die ich nicht kenne?)

Hast Du ev. die Nummer des Beitrages?
Ich kann mich nur schwach daran erinnern, dass es mal einen Beitrag gab, in dem aus dem IODEV - Hash Teile für ssl ausgeklammert wurden, aber dann geht das IODEV ja nicht mehr für ssl????
Oder hatte das mit der Meldung hir nichts zu tun??

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

der post ist hier: http://forum.fhem.de/index.php/topic,10033.msg259741.html#msg259741

es gibt damit eine eine einschränkung bezüglich ssl und LWP. aber das ist zumindest bei mir nicht relevant.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dantist

Zitat von: raspklaus am 20 August 2015, 11:52:32
@ dantist
trag die IP unter ignoredips ein, dann ist die Meldung weg

Habe ich inzwischen getan, die Meldung taucht aber weiterhin auf  ??? Muss der Port 5000 mit rein?

det.

Hallo Reiner,
gibt es irgend eine Möglichkeit über einen Befehl FHEM zu vermitteln, das die Player nicht mehr am Netz sind um diese nach Ausschalten der SONOS Player über Funksteckdose an folgenden LOG Einträgen zu hindern? Sonst läuft alles zur vollsten Zufriedenheit!
Zitat2015.08.29 16:49:44 2: ROOMMATE set rr_DET location underway
Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.63:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1 Unsubscription request failed with error: 500 Can't connect to 192.168.2.70:1400 (No route to host) at FHEM/lib/UPnP/ControlPoint.pm line 1018 thread 1
2015.08.29 08:11:32 2: ROOMMATE set rr_DET location home
Hab verbose global auf 2, daher ist es heute fast das Einzige im LOG und ich hab mal alle Zeilen reinkopiert, sorry das es soviel und immer das Gleiche ist.
LG
det.