Squeezebox Modul - erste Version

Begonnen von bugster_de, 17 Dezember 2013, 22:12:10

Vorheriges Thema - Nächstes Thema

ChrisD

#450
Hallo,

Es ist nicht nötig den Player zu löschen, es reicht das Attribut im Server auf false zu setzen (nicht löschen) und FHEM neu zu starten.

Grüße,

ChrisD

gibacht

Hallo,
ich habe diese Thema vor 3 Wochen zum ersten Mal durchgelesen. Bei der Installation hatte ich auf dem RPI, wie andere auch, Probleme. Dazu von mir ein kleiner Tipp: Einmal mal die LANkonfig testen und schauen, ob der lokale Ping funktioniert...

Schade, dass es seit einigen eher schleppend weiter geht und keine neue Version verfügbar ist.
Die einzelnen Änderungen nachzuhalten ist schon schwierig. @ChrisD: Hast Du meine PN bekommen? Wäre toll, wenn Du mal Deine pm's zur Verfügung stellen könntest...

Grüße
Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

gibacht

So ich habe noch einmal getestet. Die Verbindung des Servers scheint stabil zu sein. Der LMS läuft auf einem Ubuntu-Server und FHEM auf einem RPI.

Leider funktioniert die Coverurl-Abfrage bei Streams und auch lokalen Wiedergaben nicht. Habt ihr dazu eine Idee?

Grüße
Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

Die Cover-Abfrage kann aus verschiedenen Gründen nicht funktionieren:
- beim Titelwechsel wird die Coverart nicht vom Server angefordert, dies passiert nur bei den regelmäßigen Status-Requests
- bei den Status-Requests wird zwar Coverart abgefragt, allerdings wird anschließend nur der modulinterne Wert geändert, ein konfigurierter Weblink wird nicht aktualisiert
- wenn der Titel Leerzeichen enthält geht Coverart verloren wegen eines Problemes beim Parsen von Rückmeldungen die Leerzeichen enthalten

Der ersten beide Punkte lassen sich relativ leicht beheben, der 3. ist allerdings wesentlich schwieriger zu korrigieren.

@bugster_de: Ich glaube dass in 98_SB_PLAYER in der Zeile 1413
    fhem( "deletereadings $name ALARM__.*" );
ein Typfehler ist, es müsste deletereading statt deletereadings heißen.

Grüße,

ChrisD

gibacht

ja, das mit dem deletereadings habe ich auch im log gesehen und gegen deletereading ersetzt.
Danach war zumindest der Fehler weg.

Die Coverarturl habe ich mit einem Userreading auf das Internal gesetzt und dann ein notify statusrequest eingestellt.
Keine Ahnung, ob man das so macht...

Unabhängig davon bekomme ich keine Coverarturl und das bei unterschiedlichen Sendern. Das mit den Leerzeichen halte ich für unwahrscheinlich, da es mit einer der Vorgängerversionen funktionierte. Habe heute leider nur wenig Zeit...

Gruß Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

Der Parser für die Rückmeldungen wurde in der letzten Version geändert, dadurch funktioniert es nicht mehr korrekt wenn Leerzeichen im Titel enthalten sind. Der folgende Code in 98_SB_PLAYER.pm ist schuld:
# is the keyword a multi-keyword with spaces?
if( index( $_, ":" ) == -1 ) {
    $leftover = $leftover . " " . $_;
    next;
}

if( $leftover ne "" ) {
    $cur = $leftover . " " . $_;
    $leftover = "";
} else {
    $cur = $_;
}


Grüße,

ChrisD

gibacht

#456
Hallo,

ich habe weiter getestet...

Coverarturl scheint zu funtionieren. Folgender Eintrag erscheint durch mein Statusrequest-notify regelmäßig im Log:
2014.12.06 08:53:19 1: readingsUpdate(Squeezeslave,Cover,http://www.mysqueezebox.com/public/imageproxy?u=http%XX...XX.cloudfront.net%2Fs24896q.png&h=50&w=50) missed to call readingsBeginUpdate first.
(Die ID habe ich verändert und der Fehler ist bei meinen SB-Radios auch vorhanden).

Außerdem bleibt der STATE und state auf off stehen und wird auch nicht abgefragt...
Wäre es evtl. möglich Coverarturl als Reading und nicht als Internal darzustellen?
Aktuell gehe ich den Umweg:
userReadings

Cover {InternalVal("SB_Bad","COVERARTURL","undef"); }


Grüße Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

Die Meldung
Zitat2014.12.06 08:53:19 1: readingsUpdate(Squeezeslave,Cover,http://ww...
kommt weil readingsBeginUpdate und readingsEndUpdate verschachtelt aufgerufen werden. Die Aufrufe in der Funktion SB_PLAYER_ParsePlayerStatus sind nicht nötig da diese nur von SB_PLAYER_Parse aufgerufen werden kann. SB_PLAYER_Parse kümmert sich aber bereits um readingsXXXUpdate.

Grüße,

ChrisD

gibacht

Hallo,
aktuell scheint alles zu funktionieren. Ich hatte tatsächlich vergessen das UserReading zu löschen... Werde weiter testen. @ ChrisD: Vielen Dank für Deine Mühe!!!

In einer der vorherigen Versionen war es so, dass der Favorit der gerade wiedergegeben wird auch im Dropdown angezeigt wird. Das ist imo leider nicht so.

Meinst Du/Ihr es wäre möglich das Sync um eine zus. Option zum Setzen der Lautstärkesync einzurichten?

Dann wäre alles perfekt...


Danke!

Grüße Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

Das Problem mit dem Favoriten habe ich nur wenn ich
- ein reload von 98_SB_PLAYER mache
- den Favoriten nicht über FHEM sondern extern (z.B. LMS-Web-Interface) ändere

Im 1. Fall vergisst 98_SB_PLAYER das interne Array mit den Favoriten. Dies kann durch einset SB_SERVER statusRequestbehoben werden. Durch die Abfrage werden die Favoriten vom Server an die Player-Module verteilt und die internen Arrays wieder gefüllt.

Für den 2. Fall ist eine Änderung in 98_SB_PLAYER nötig damit das Reading favorites korrekt gesetzt wird.

Was die Lautstärkeregelung betrifft habe ich nicht ganz verstanden was du vorhast. Die Synchronisation der Lautstärke kann in den Einstallungen der Player über die Web-Oberfläche des LMS konfiguriert werden. Möchtest du diese Möglichkeit in FHEM haben ? In dem Fall stellt sich die Frage ob dies als Option zum set sync hinzugefügt werden soll oder als neues set-Kommando implementiert werden soll (set syncVolume 0/1).

Grüße,

ChrisD


gibacht

Hallo,

das ist wahrscheinlich ein Mißverständnis...
Ich lasse die Favoriten mit einem einem Readingsgroup anzeigen. Die sind auch sichtbar, jedoch ist nicht der aktuell wiedergegebene ausgewählt, wenn dieser per Radio ausgwählt wurde.

Bezgl. der Lautstärke: Ich stelle mit einem Tablett sämtliche Radios dar und möchte steuern können, ob ich gemeinsam / getrennt ausschalte und, ob alle das Gleiche wiedergeben... --> Das funktioniert.

Schön wäre es, wenn ich mit einem zusätzlichen Reading ein Volumesync machen könnte. Genau wie Du schreibst: set syncVolume 0/1 ... wäre eine super Sache.

Viele Grüße
Dirk





HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

Wenn ich es richtig verstanden habe wählst du an einem Radio (externes Gerät) einen Favoriten aus und die Anzeige ändert sich nicht in FHEM. Dies ist der 2. von mir beschriebene Fall und benötigt eine Änderung in 98_SB_PLAYER.

Was die Lautstärke betrifft kannst du bereits jetzt die Synchronisation steuern, es fehlt nur die Auswertung und Darstellung des Zustandes. Mitset SB_Bad cliraw playerpref syncVolume 1kannst du die Synchronisation einschalten (0 schaltet wieder aus). Alternativ kannst du auch eventMap verwenden:
attr SB_Bad eventMap /cliraw playerpref syncVolume:syncVolume/
Damit funktioniert set SB_Bad syncVolume 0/1.

Grüße,

ChrisD


gibacht

Hallo,

das mit set SB_Bad cliraw playerpref syncVolume 1 ist genau das was ich gebraucht habe!
Der Zustand ändert sich bei mir dann eh nur über die Fhem-funktionen.

Danke!
Grüße Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

gibacht

Da ist mir gerade etwas aufgefallen.
Wenn ich
set SB_Buero cliraw playerpref syncVolume 0
stelle und alle anderen auf
set SB_Buero cliraw playerpref syncVolume 1
stelle dann kann ich die Lautstärke der anderen Radios verändern ohne das sich die Lautstärke des SB_Bad ändert.
Was ich nicht so gut finde ist, das wenn ich die Lautstärke SB_Bad verändere auch sich auch die der anderen verändert.

Kann man das ändern?

Grüße Dirk
HMLAN, TVserver Headless YAVDR mit LMS und FHEM, Rasperry PI Openelec als Clients.

ChrisD

Hallo,

So weit ich sehen kann bietet der Server keine Möglichkeit dies zu machen. Wenn du 3 Player A, B und C hast die miteinander synchronisiert sind und z.B syncVolume bei A und B auf 1 steht und bei C auf 0 führt das dazu dass Änderungen der Lautstärke von A, B oder C immer A und B ändern. Die Lautstärke von C kann dagegen nicht von den anderen beeinflusst werden.

Wenn du möchtest dass in diesem Fall eine Lautstärkeänderung von C sich nicht auf A und B auswirkt muss dies auf einem anderen Weg gelöst werden.  Eine Möglichkeit wäre ein Attribut pro Player (das ich aber nicht unbedingt syncVolume nennen würde da dies eine Funktion des Servers ist) das bei einer Lautstärkeänderung eines der Player bei allen anderen Playern der Sync-Gruppe bei denen das Attribut den gleichen Wert hat die Lautstärke anpasst. Nachteil hierbei ist dass es nur in FHEM funktionieren würde.

Grüße,

ChrisD