Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi Stephan,

OK, das ist natürlich ein Fehler, den man lange suchen kann...

Ich habe dazu einen Hinweis in die nächste Version der Wikiseite geschrieben; dass man an dieser Stelle mit Backslashs als letztes Zeichen vor dem Zeilenumbruch aufpassen soll (bzw. dieses weglassen soll)...

Grüße
Reiner

Spartacus

Hallo,
ich bin mal wieder am Basteln, aber irgendwie finde ich den Fehler nicht!
Wenn der Wert in currentTrackURI leer ist, dann sollen die Befehle ausgeführt werden.Was ist hier falsch?

DEF-Bereich:

Sonos_Buero:presence:.appeared
{
if (ReadingsVal ("Sonos_Buero","currentTrackURI","x") eq "")
  {
   fhem "set Sonos_Buero Volume 10";;
   fhem "set Sonos_Buero Treble 10";;
   fhem "set Sonos_Buero Bass 3";;
   fhem "set Sonos_Buero Balance 0";;
   fhem "set Sonos_Buero Loudness 1";;
   fhem "set Sonos_Buero LEDState 0"
  }
}


Fehler im Logfile:
2014.04.29 14:38:53 5: Notify loop for Sonos_Buero presence: appeared
2014.04.29 14:38:53 5: Triggering Init_Buero
2014.04.29 14:38:53 4: Init_Buero exec
{
if (ReadingsVal ("Sonos_Buero","currentTrackURI","x") eq "")
  {
   fhem "set Sonos_Buero Volume 10";;
   fhem "set Sonos_Buero Treble 10";;
   fhem "set Sonos_Buero Bass 3";;
   fhem "set Sonos_Buero Balance 0";;
   fhem "set Sonos_Buero Loudness 1";;
   fhem "set Sonos_Buero LEDState 0"
  }
}
2014.04.29 14:38:53 5: Cmd: >{
if (ReadingsVal ("Sonos_Buero","currentTrackURI","x") eq "")
  {
   fhem "set Sonos_Buero Volume 10";
   fhem "set Sonos_Buero Treble 10";
   fhem "set Sonos_Buero Bass 3";
   fhem "set Sonos_Buero Balance 0";
   fhem "set Sonos_Buero Loudness 1";
   fhem "set Sonos_Buero LEDState 0"
  }
}<
2014.04.29 14:38:53 5: Sender: not on any display, ignoring notify
2014.04.29 14:38:53 4: eventTypes: SONOSPLAYER Sonos_Buero presence: appeared -> presence: appeared
2014.04.29 14:38:53 4: eventTypes: SONOSPLAYER Sonos_Buero fieldType:  -> fieldType:


sorry, ich sehe es einfach nicht!

Spartacus!
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

strauch

Zitat von: Reinerlein am 01 April 2014, 11:51:08
@strauch: Der Fehler ist komisch. An der Stelle hole ich mir das Sonos-Device aus der Fhem-Deviceliste. Das bedeutet, du hast in deinem Fhem-System ein Device, welches keinen Typ definiert hat (darüber identifiziere ich das Sonos-Device).
Geht das überhaupt regulär?

Ich komme mit dem Fehler leider noch nicht weiter, hast du irgendwie eine Möglichkeit die Geräte auszuspucken die diesen Fehler verursachen?

Ich hab jetzt auch noch folgende Fehler:
Loading device description failed with error: 500 Can't connect to 192.168.200.101:60617 (timeout) at FHEM/00_SONOS.pm line 2194 thread 1
Loading device description failed with error: 500 Can't connect to 192.168.200.101:60617 (No route to host) at FHEM/00_SONOS.pm line 2194 thread 1


Immernoch Version 2.5 im Einsatz. Gibts vielleicht eine Möglichkeit die Geräte abzumelden, wenn ich sie ausschalte? Die werden, eh per Heimautomation an und ausgeschaltet.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Spartacus

Hallo,
auch ich komme leider nicht weiter. Meine Initialisierungs Routinen sollen nur laufen, wenn der Player eingestöpselt wird, und nicht wenn fhem gestartet wird.. Aber irgendwie ist da noch der Wurm drin. Ich finde den Fehler nicht! (siehe meinen Post weiter oben..)

Zur Zeit wird bei jedem Start von fhem für jeden Player ein Init ausgeführt, da das mit der Abfrage der URI nicht funzt. Das sieht dann so aus:
# Initialisierung von Terrasse wenn Player mit Strom versorgt wird
# WDR 2 Ruhrgebiet als Default.
define Init_Terrasse notify Sonos_Terrasse:presence:.appeared \
{fhem "set Sonos_Terrasse LoadRadio WDR2%%20Ruhrgebiet"};; \
{fhem "set Sonos_Terrasse Volume 3"};;\
{fhem "set Sonos_Terrasse Treble 10"};;\
{fhem "set Sonos_Terrasse Bass 3"};;\
{fhem "set Sonos_Terrasse Balance 0"};;\
{fhem "set Sonos_Terrasse Loudness 1"};;\
{fhem "set Sonos_Terrasse LEDState 0"}
attr Init_Terrasse disable 0
attr Init_Terrasse group Sonos Player
attr Init_Terrasse room Init


Ich habe derzeit 7 Player im Haus und für jeden Player eine eigene Init Routine. Das ist zwar nicht sehr elegant, weiss aber noch nicht, wie ich das anstellen soll! Ein zusätzliches Problem ist, dass fhem regelmäßig abkachelt, wenn beim Start die Init-Befehle ausführt werden. Disable ich die Init-Routinen läuft fhem stabil. Hat jemand einen tipp woran das liegt? Ist fhem mit diesen vielen BEfehlen beim Start überfordert?

Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Reinerlein

Hi zusammen,

@strauch: Ich baue da mal eine Ausgabe ein, damit man was im Log vorfindet, was er überhaupt gesucht hat (wenn er nichts findet)...

@Spartacus: Hast du schon mal versucht, nicht direkt beim Event-Ereignis das Setzen der Sonos-Vorbelegungen durchzuführen?

Also, in dem Init-Event startest du nur einen Timer für später, der dann den entsprechenden Player initialisiert. Das kannst du dann auch so auslagern, dass du nur eine Methodik hinterlegst, die dann per Variable den Devicenamen des entsprechenden Players erhält, und somit für alle gleichermaßen funktioniert...

Ich könnte mir halt vorstellen, dass zu dem Zeitpunkt des Events die von die abgefragte Information (currentTrackURI leer) noch nicht vorliegt (auch wenn es aus dem Statefile geladen wird, wird dabei eine Reihenfolge durchgeführt, sodass zum Zeitpunkt von Event A die Information B vielleicht noch nicht vorliegt).
Dieser Kontextbezug ist in Fhem nicht gut gelöst, da die Events immer "sofort" kommen, auch wenn das "Objekt" (es ist halt keins) des Fhem-Devices noch nicht vollständig wieder aufgebaut wurde...

Grüße
Reiner

Spartacus

Hallo,
hm! Verstehe ich nicht so ganz, was da baläuft!.
Aber:
habe jetzt mal ein sleep eingebaut:
Sonos_Buero:presence:.appeared
{
fhem "sleep 60";;
if (ReadingsVal ("Sonos_Buero","currentTrackURI","") eq "")
  {
   fhem "set Sonos_Buero LoadRadio WDR2%%20Ruhrgebiet";;
   fhem "set Sonos_Buero Volume 10";;
   fhem "set Sonos_Buero Treble 10";;
   fhem "set Sonos_Buero Bass 3";;
   fhem "set Sonos_Buero Balance 0";;
   fhem "set Sonos_Buero Loudness 1";;
   fhem "set Sonos_Buero LEDState 0"
  }
}

Jetzt verhält er sich richtig! Aber das ist natürlich doof, da das System für 60sec. lahmgelegt wird.  Meinst Du das mit dem timer so?

Sonos_Bad:presence:.appeared
define InitBadLater at +00:00:10 trigger BadInit

und dann...

define BadInit notify BadInit \
set Sonos_Bad Volume
...


Wäre ziemlich kompliziert, oder wie sollte das mit dem Timer gehen...

Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Reinerlein

Hi Spartacus,

das mit dem Sleep geht in die gleiche Richtung. Fhem-Intern ist das ein Timer, der nach der angegebenen Zeit den Rest des Statements ausführt.
Das bedeutet, das mein Gedankengang richtig ist: Die Readings sind einfach noch nicht fertig eingelesen...

Du könntest aber auch einfach eine kleine Prozedur in deine myUtils packen, dem du einen Parameter für den Namen des zu initialisierenden Fhem-Devices mitgibst. Diesen Parameter kannst du in einem Notify aus den Notify-Variablen ermitteln, und übergeben.
So kannst du ein einziges Notify-Event machen, welches auf z.B. "Sonos_.*:.appeared" reagiert, und dort deinen Timeraufruf eintragen. Dann hast du für alle Player mit einem Notify und einer Perl-Prozedur alles erschlagen...

Mit der Dauer der Pause, bzw. dem Abstand für den Timer musst du dann mal spielen. Ich denke, dass ein paar Sekunden reichen. Sonst kannst du dir auch ein Notify auf das globale "initialized"-Event eintragen, und dann dort alles lostreten...

Grüße
Reiner

strauch

Zitat von: Reinerlein am 02 Mai 2014, 12:33:54
@strauch: Ich baue da mal eine Ausgabe ein, damit man was im Log vorfindet, was er überhaupt gesucht hat (wenn er nichts findet)...

Danke. Hast du hierzu noch eine Idee?
Loading device description failed with error: 500 Can't connect to 192.168.200.101:60617 (timeout) at FHEM/00_SONOS.pm line 2194 thread 1

Damit wird gerade im Minutentakt mein Log vollgeschrieben.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Reinerlein

Hi Strauch,

ist denn die angegebene IP-Adresse einer deiner Zoneplayer?
Nicht dass sich da ein Fremdgerät eingeschlichen hat :-)

Ansonsten könntest mal in den Logs (notfalls Level 5) prüfen, ob der IsAlive-Erkennungsmechanismus deinen abgeschalteten Player sauber erkennt und auf disappeared stellt...

So wie sich das anfühlt, scheint sich da aber ein Fremdgerät zwischenzumelden, den man dann natürlich nicht für die ganzen Subscriptions erreicht...

Grüße
Reiner

strauch

Ist ein Fremdgerät, ein Desktop Rechner, irritiert der vielleicht weil da das Sonosprogramm drauf läuft?! Was kann ich denn nun machen?
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Reinerlein

Hi strauch,

hast du zufällig die Möglichkeit, mit dem Intel Device Spy mal zu schauen, als was sich dein Computer da so meldet?
Eigentlich fange ich alles Nicht-Sonosmäßige ab, zumindest versuche ich das :-)

Wenn man den Spy startet, zeigt er in einer Liste *alle* UPnP Komponenten im lokalen Netz an. Da sind dann alle Zoneplayer, und alle anderen Devices (wie z.B. eine Fritzbox o.ä.).
Dort sollte dann auch dein Computer zu sehen sein, und als welches Device er sich meldet (Device URN)...

Grüße
Reiner

strauch

Hi Rainerlein, die Möglichkeit hab ich bestimmt dann schau ich mal. Danke für den Tipp


Gesendet von meinem Nexus 4 mit Tapatalk

FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

strauch

Taucht im Intel Device Spy nicht auf, versuche ich es manuell hinzuzufügen mit http://192.168.200.101:60617 sagt er das er: "could not load device".
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

strauch

Hallo Reinerlein, ich hab mal angehangen was das Sonos Modul so alles Nachts von sich gibt.Ich überlege jetzt einfach das Loglevel auf 1 zu setzten. Ich finds so anstregend die anderen Meldungen dazwischen zu finden :-).

Sind manche Meldungen einfach und da lässt sich auch nichts ändern oder sind das wirklich "Fehler" die da bei mir auflaufen?!

Grüße

strauch
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Reinerlein

Hi strauch,

da mischen sich zwei Probleme (soweit ich das überblicken konnte):
- Der Player, der gar keiner ist (mit der 101 in der IP)
- Der Player, der weg ist, und das Modul weiß das nicht (mit der 151 in der IP)

für beides wäre es gut, mal einen 5er Log-Auszug zu haben, da dort auch die Meldungen vom IsAlive-Checker enthalten sind. Dort sieht man mal, ob und warum der Checker den fehlenden 151er nicht bemerkt.

Außerdem sieht man beim Discover-Event des 101er mal, was da überhaupt reinkommt, und warum er der Meinung ist, dass sei ein Zoneplayer...

Wenn du kannst, versuch doch nur die Log-Ausgaben des Submoduls mitzuschreiben (nachdem du vorher den Loglevel auf 5 gesetzt hast), indem du den ganzen Prozess selber startest und die Ausgabe in eine Datei leitest (im Wiki habe ich auch zwei Sätze dazu beschrieben). Dort steht dann alles wichtige des Moduls drin :-)

Grüße
Reiner

P.S.: Und ja, manche Meldungen sind normal. Das Modul redet sehr gerne :-), und wenn man die Aussagen nicht haben möchte, muss man wirklich den Loglevel auf 0 stellen. Dann kommen nur wirkliche/sichere Fehler durch...