Squeezebox Modul - erste Version

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

Vorheriges Thema - Nächstes Thema

Markus M.

Mit der letzten Version hier aus dem Thread werden meine Favoriten leider nicht geladen, sie bleiben auf not yet defined.
Alarmzeiten werden angezeigt, allerdings mit den IDs, Set scheint noch auf 2 fixe Alarme zu zeigen. Bastelt da gerade wer?

Und kann es sein dass hier ein klein wenig Chaos herrscht?
Was im GIT liegt ist von November, von den letzten Änderungen keine Spur.
Wo finde ich denn die aktuellste Version?

Viele Grüsse,
Markus
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

ChrisD

Hallo,

Die offizielle Version steht wie im 1. Beitrag geschrieben auf Github https://github.com/mhop/fhem-mirror/tree/master/fhem/contrib. bugster_de hat verschiedene Beta-Versionen hier im Forum geposted in denen neue Features (z.B. Alarme) zum Testen eingebaut sind, die letzte befindet sich in Beitrag 432.

Ich habe zu dieser Version einige Patches vorgeschlagen, die verschiedene kleinere Probleme lösen. Da es nicht immer einfach ist die Patches an der korrekten Stelle einzubauen habe ich meinen aktuellen Stand in Beitrag 487 gepostet.

Bevor die Änderungen in Github aufgenommen werden sollten sie getestet sein. Da du die letzte Version verwendest und bei dir die Favoriten und Alarme nicht korrekt funktionieren ist es somit auch noch zu früh die Änderungen aufzunehmen.

Du kannst aber dazu beitragen dass eine neue Version auf Github kommt indem du:
- die genau Version der Module angibst (version in FHEM-Kommandozeile eingeben und die 2 Zeilen von SB_* posten)
- angibst wie du sie integriert hast (über reload oder FHEM-Neustart)
- verbose beim Server und einem Player auf 4 oder 5 stellst und einen statusRequest an den Server aufzeichnest um dem Problem mit den Favoriten auf die Spur zu kommen
- einen Vorschlag machst wie die Alarme dargestellt und behandelt werden sollen (siehe dazu auch die Beiträge im November zu den Alarmen)

Grüße,

ChrisD

Markus M.

#497
Zitat von: ChrisD am 07 Januar 2015, 22:37:10
Hallo,

Die offizielle Version steht wie im 1. Beitrag geschrieben auf Github https://github.com/mhop/fhem-mirror/tree/master/fhem/contrib. bugster_de hat verschiedene Beta-Versionen hier im Forum geposted in denen neue Features (z.B. Alarme) zum Testen eingebaut sind, die letzte befindet sich in Beitrag 432.

Ich habe zu dieser Version einige Patches vorgeschlagen, die verschiedene kleinere Probleme lösen. Da es nicht immer einfach ist die Patches an der korrekten Stelle einzubauen habe ich meinen aktuellen Stand in Beitrag 487 gepostet.

Ich war wohl nur irritiert von dem "Ich habe eine neue Testversion auf Github gestellt.".
Wo landen denn die Testversionen?

ZitatBevor die Änderungen in Github aufgenommen werden sollten sie getestet sein. Da du die letzte Version verwendest und bei dir die Favoriten und Alarme nicht korrekt funktionieren ist es somit auch noch zu früh die Änderungen aufzunehmen.

Hmm... Ich hab es eben nochmal getestet und die Favoriten sind wieder da.
Allerdings funktionieren sie trotzdem noch nicht zu 100% ;)

2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - playlist name: [DI] Club Dubstep
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - UID: DIClubDubstep
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - not found, forcing
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - #Favs: 6
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: LiquidDubstep - fdabb91f.4
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: House - fdabb91f.6
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: Minimal - fdabb91f.3
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: Lounge - fdabb91f.5
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: DubstepUS - fdabb91f.1
2015.01.09 20:14:46 2: SB_PLAYER_Parse(squeezebox_bedroom): CD - Favs: ClubDubstep - fdabb91f.2


Wenn ich favorites als WebCmd verwende passt die Auswahl nicht, weil im Reading die UID und nicht der FavName steht.
Kannst du das ändern?
Was bei "not found, forcing" passiert hat sich mir aus dem Code leider nicht erschlossen.


ZitatDu kannst aber dazu beitragen dass eine neue Version auf Github kommt indem du:
- die genau Version der Module angibst (version in FHEM-Kommandozeile eingeben und die 2 Zeilen von SB_* posten)
- angibst wie du sie integriert hast (über reload oder FHEM-Neustart)
- verbose beim Server und einem Player auf 4 oder 5 stellst und einen statusRequest an den Server aufzeichnest um dem Problem mit den Favoriten auf die Spur zu kommen

Über reload:# $Id: 98_SB_PLAYER.pm beta 20141120 0013 CD $
# $Id: 97_SB_SERVER.pm beta 20141120 0008 CD $


Zitat- einen Vorschlag machst wie die Alarme dargestellt und behandelt werden sollen (siehe dazu auch die Beiträge im November zu den Alarmen)

Hab mich mal eben noch einlesen müssen.
Was hältst du von einer Auflistung wie im neuen Fritzbox-Modul? (siehe Bild im Anhang)

Konkret würde sich in etwa sowas anbieten (Beispiel für den zweiten Alarm, Montag und Donnerstag um 8 Uhr):
...
alarm2_id da84bd36 #kommen die in der "richtigen" Reihenfolge wie in der SB Oberfläche?
alarm2_state on
alarm2_time 08:00
alarm2_sound DIClubDubstep #erst mal nicht so wichtig
alarm2_shuffle album #auch nicht so wichtig
alarm2_wdays Mo Th
alarm2_repeat on #ebenfalls unwichtig
alarm2_volume 60 #wird das überhaupt pro Alarm gespeichert? Wäre genial wenn das ginge!


Der grösste Problemfall ist bei dieser Version allerdings, dass sich die Nummern ändern würden, wenn man einen Alarm löscht.
Ansonsten könnte man damit aber alles bequem abdecken.
Gibt es irgendwo eine Beschreibung der SB API zum setzen der Alarme?
Wenn ich helfen kann: gerne!

Viele Grüsse, Markus

FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

ChrisD

Hallo,

ZitatIch war wohl nur irritiert von dem "Ich habe eine neue Testversion auf Github gestellt.".

Da ich ziemlich viel mit den Modulen herumexperimentiert habe, habe ich Github verwendet um die Änderungen nachvollziehen zu können. In Beitrag 477 hatte ich den Link angegeben (https://github.com/ChrisD70/FHEM-Modules). Da ich am Anfang nicht wusste wie bugster_de das Modul weiterentwickeln wollte habe ich davon abgesehen die Module hier zu posten. Ich habe auch nicht vor alle Versionen hier ins Forum zu setzen da es die Suche nach der 'aktuellen' Version erschwert und es sich teilweise um ziemlich experimentelle Versionen handelt (wie aktuell mit save/recall und den Alarmen). Ziel ist es einen stabilen Stand zu erreichen und diesen wieder bei bugster_de einzuchecken.

ZitatWenn ich favorites als WebCmd verwende passt die Auswahl nicht, weil im Reading die UID und nicht der FavName steht.
Kannst du das ändern?

Bei Dropdowns dürfen u.a. keine Leerzeichen in den Texten enthalten sein, dadurch ist es nicht möglich die richtigen Namen zu verwenden. Es gibt zwar die Möglichkeit   zu verwenden, dafür muss der Code aber an verschiedenen Stellen geändert werden damit wieder alles funktioniert und die Anzeige der Favoriten außerhalb des Dropdowns ist dann falsch.

Wenn du die Module über reload einbindest, musst du unbedingtset meinSBServer statusRequestausführen, da ansonsten die Favoriten und Playlisten nicht korrekt initialisiert werden.

ZitatWas bei "not found, forcing" passiert hat sich mir aus dem Code leider nicht erschlossen.

Hierbei handelt es sich um eine Debug-Ausgabe um ein Problem bei einem anderen User zu finden, im aktuellen Code ist es nicht mehr enthalten.

Ich habe versucht deine Idee mit den Alarmen umzusetzen, eine erste Version (0015) findest du auf Github (Link siehe oben). Durch die Änderungen ist diese Version ist nicht ganz kompatibel zu den Vorgängerversionen was die Alarme betrifft.

Änderungen gegenüber der Version in Beitrag 487:

- 0014:
- Befehl playlist und playlist artist korrigiert
- playlist year und genre hinzugefügt
- save und recall wieder aktiviert (inkl. Position innerhalb vom Track), muss getestet werden
- Laufzeit aktueller Track anzeigen
- Anzahl Tracks in Playlist und aktueller Track anzeigen
- sayText Befehl hinzugefügt (== talk)
- Playlisten die mit fhem_* beginnen ignorieren
- '-' bei Favoriten und Playlists hinzugefügt
- Timer umbenannt
- Debug-Ausgaben für Favoriten entfernt

- 0015:
- Alarme nach Vorschlag von Markus M. implementiert,  dynamisch anlegen
und löschen
- Alarme, on/off zusätzlich zu enabled/disabled erlauben
- set P alarmX repeat, wdays, time und sound hinzugefügt
- bei 'sound' Liste der bekannten Elemente des Servers durchsuchen
- neue Alarme über set P allalarms add ... anlegen
- alle Alarme über set P allalarms delete löschen
- inaktive Alarme abfragen und anzeigen

ZitatGibt es irgendwo eine Beschreibung der SB API zum setzen der Alarme?
Die Beschreibung ist im SB-Server integriert, im Web-Interface unten links auf 'Hilfe' klicken, dann auf 'Technische Informationen' und zum Schluss auf 'The Logitech Media Server Command Line Interface'. Es gibt dort einen kurzen Abschnitt über die Alarme.

Grüße,

ChrisD

Markus M.

#499
Die nicht passenden Favoriten hatten gepasst, nachdem ich die Listen im LMS umbenannt hatte - sehr seltsam...


Zitat von: ChrisD am 10 Januar 2015, 21:12:46
- 0015:
- Alarme nach Vorschlag von Markus M. implementiert

Grosses Dankeschön!
Im Anhang findest du ausgehend davon noch eine Möglichkeit, Snooze, Timeout etc. anzuzeigen und zu setzen.
Die Funktion "Alle Alarme" habe ich auf playerprefs umgebaut, die Zeit kann man auch ohne Sekunden setzen.
Kann FHEM eigentlich mehr als 2 Parameter für ein Command?
Habe keine Möglichkeit gefunden, weshalb ich weitere Readings eingebaut habe.

Gruss, Markus

EDIT: "Bessere" Angabe der Alarmtage die ich für das Fritzbox Modul gebaut hatte (idiotensicher), Setzen von alarm_fadein, Sofortiges lokales Setzen der Readings und Montag als erster Tag der Woche ;)
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Markus M.

#500
Noch ein kleiner Fix:
Wer das Plugin für AirPlay (Repo) verwendet oder ein anderes Plugin das die Lautstärke setzt,
wird eventuell wirre Volume Readings wie 32.965 bemerken.

Hier hat LMS intern anscheinend einen Float Wert, warum auch immer.
Sollten wir genau wie in der LMS Oberfläche auf int biegen, schon weil es sonst besch..... aussieht:
Code (Volume value sanitizing) Auswählen
sub SB_PLAYER_UpdateVolumeReadings( $$$ ) {
    my( $hash, $vol, $bulk ) = @_;
   
    my $name = $hash->{NAME};

    $vol = int($vol);
...

M


EDIT: Das ist oben mit in der aktualisierten Version, zusammen mit ein paar anderen Änderungen
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

ChrisD

Hallo,

Vielen Dank für den Code, ich habe ihn mit ein paar kleinen Änderungen bei mir integriert.

ZitatKann FHEM eigentlich mehr als 2 Parameter für ein Command?
So weit ich sehe gibt es keinerlei Beschränkung, lediglich das UI ist beschränkt wenn es um Dropdowns, Slider, etc geht. So wären Befehle wie Timeout oder Snooze besser unter allalarms, allerdings kann man dann nicht mehr den Standard-Slider verwenden. Man kann zwar eigenen HTML-Code integrieren, dies sehe ich aber nicht als prioritär an da ich FHEM selten zum Bedienen des LMS verwende.

Habe keine Möglichkeit gefunden, weshalb ich weitere Readings eingebaut habe.
Ich denke dass dies im Moment die beste Lösung ist. Es wäre aber besser die Readings in lowerCamelCase zu halten, so wie in den Developper-Richtlinien beschrieben.

ZitatSofortiges lokales Setzen der Readings
Dies finde ich keine gute Idee, meiner Meinung nach sollten die Readings den realen Zustand des Servers/Players darstellen. Bei Geräten die keinen Rückkanal haben (z.B. FS20) ist dies ok, hier denke ich ist es besser auf die Rückmeldung zu warten. Ich habe auch die Meldungen des Servers eingebaut wenn z.B. im Web-Interface des Servers die Parameter geändert werden.

Ich habe den Code für die Alarmtage angepasst, so unterstützt der LMS z.B. kein 'once', dies kann eventuell über 'repeat' gemacht werden.

Meine neue Version ist auf Github (https://github.com/ChrisD70/FHEM-Modules), hier die Änderungen:

- Code von Markus M. übernommen
- Befehle und Readings alarmsSnooze, alarmsTimeout, alarmsDefaultVolume, alarmsFadeIn und alarmsEnabled hinzugefügt (Dokumentation fehlt noch)
- allalarms enable/disable verwendet playerprefs
- Alarmzeit kann auch ohne Sekunden angegeben werden
- Lautstärke ohne Nachkommastellen darstellen
- Namen der neuen Readings an lowerCamelCase angepasst
- Internals entfernt wenn es Readings gibt
- Alarm-Playlisten nur noch laden wenn nötig
- bei set allalarms add und set alarmX wdays können statt Zahlen Kürzel für Wochentage angegeben werden
- 'all', 'daily' und 'none' als Wochentage hinzugefügt
- Anzeige korrigiert wenn kein Wochentag ausgewählt ist
- Modul in UTF8 konvertiert

Grüße,

ChrisD

siggi85

Ich habe mir gestern mal deine Versionen geladen und habe mit den ersten paar Tests keine meiner bekannten Probleme beobachtet. Top!  :)

Danke auch noch mal an ChrisD und die anderen Entwickler, welche gerade das Modul reanimieren und vor dem Archivierungstod bewahrt haben. Jeder hat mal Abschnitte im Leben in denen er wenig Zeit hat und so geht es anscheinend momentan buster. Umso schöner, dass sich ChrisD der Sache angeommen hat! *daumenhoch*

Littlefreddy

Hallo zusammen,

also auch von meiner Seite aus vielen dank das es in diesem Modul weiter geht.
Ich bin erst mehr oder weniger frisch dabei in Sachen FHEM und Pearl. und bin total begeistert von FHEM und auch von diesem Modul

daher meine Frage, bevor ich mich jetzt in so Pearl Sachen einlese und die MY Utils fülle.
Ich suche nach einer Möglichkeit der Squeezebox einen Ordner mit auf den Weg zu geben womit die Player Playlist gefüllt wird.
die Besonderheit dabei, es soll in einem Ordner Hörbuch der neuste Ordner in die Playlist hinzugefügt werden.

Ich finde aber weder den eintrag hier in dem Modul die interne Playlist zu clearen / füllen noch die Möglichkeit ein komplettes Verzeichnis einzulesen.
Guck ich da vielleicht nur falsch ? kann mir da ggf. einer der Programmierkünstler helfen?

ChrisD

Hallo,

Mit dem Befehlset meinPlayer cliraw playlist clearkannst du die aktuelle Playlist leeren.

Du kannst ein Verzeichnis mit dem Befehlset meinPlayer playlist play Name des Verzeichnissesabspielen. Dies funktioniert im Moment aber nur wenn im Verzeichnisnamen keine Sonderzeichen enthalten sind. Ich muss mir genauer ansehen was beim Encoding schief geht.

Der Server weiß übrigens nicht welches der 'neuste Ordner' ist. Diesen musst du selbst herausfinden (oder kennen) und dem Server mit obigem Befehl übergeben.

Grüße,

ChrisD

Littlefreddy

Super vielen dank,damit kann ich schon mal was anfangen.

Dann werde ich wohl mal gucken das ich mir was versuche selber zu bauen.

wmr72

Ich habe mir eine readingsGroup für die Alarme gebaut und dabei festgestellt, dass die Readings z.B. nach einem "set <player> alarm1 <on|off>" nicht upgedatet werden. Ich hab das für's Ein-/Ausschalten jetzt mit folgendem Diff behoben, allerdings funktioniert das natürlich nur für genau diesen "set". Außerdem ist mir noch nicht wirklich klar, wie der Readings-Mechanismus in fhem überhaupt genau funktioniert, kann also gut sein, dass es zwar funktioniert aber trotzdem großer Mist ist.
Die Frage ist also: ist das überhaupt der richtige Weg? Vermutlich ist es sinnvoller nach dem "set" den Server nach den jetzt gültigen Werten zu fragen, nur wie.


--- FHEM/98_SB_PLAYER.pm.orig   2015-01-16 23:15:00.210876475 +0100
+++ FHEM/98_SB_PLAYER.pm        2015-01-16 22:56:09.227197492 +0100
@@ -1695,6 +1695,7 @@
             $cmdstr = "$hash->{PLAYERMAC} alarm update id:$id ";
             $cmdstr .= "enabled:1\n";
             IOWrite( $hash, $cmdstr );
+           readingsSingleUpdate( $hash, "alarm" . $n . "_state", "on", 1 );        # WMR
         }

     } elsif(( $arg[ 0 ] eq "disable" )||( $arg[ 0 ] eq "off" )) {   # CD 0015 'off' hinzugefügt
@@ -1702,6 +1703,7 @@
             $cmdstr = "$hash->{PLAYERMAC} alarm update id:$id ";
             $cmdstr .= "enabled:0\n";
             IOWrite( $hash, $cmdstr );
+            readingsSingleUpdate( $hash, "alarm" . $n . "_state", "off", 1 );        # WMR
         }

     } elsif( $arg[ 0 ] eq "volume" ) {

ChrisD

Hallo,

Nach einem set liefert der Server den aktuellen Zustand zurück und dieser wird auch korrekt ausgewertet. Es kann aber durch verschiedene Effekte dazu kommen dass die Aktualisierung der Anzeige nicht erfolgt.

Kannst du die Definiton der readingsGroup posten damit ich es nachvollziehen kann ?

Welche Versionen von FHEM, readingsGroup und der SB-Module verwendest du ?

Grüße,

ChrisD

wmr72

Hallo,

Zitat von: ChrisD am 17 Januar 2015, 00:15:56
Kannst du die Definiton der readingsGroup posten damit ich es nachvollziehen kann ?
Klar:

define rg_sbalarms readingsGroup TYPE=SB_PLAYER:alarm1_state,alarm1_time,alarm1_wdays,<br>,alarm2_state,alarm2_time,alarm2_wdays

Ich glaube aber nicht, dass es etwas direkt mit der readingsGroup zu tun hat. Du hast Recht, dass die Readings direkt vom Server upgedated werden, ich kann das mit einem list sb_player auf einer telnet-Connection verifzieren. Im FHEMWEB kommt das aber auf der Detail-Seite des SB_Player-Devices nicht an, trotz aktiviertem longpoll. Erst ein Reload der Seite hilft.

Zitat
Welche Versionen von FHEM, readingsGroup und der SB-Module verwendest du ?

# $Id: fhem.pl 7124 2014-12-05 07:10:20Z rudolfkoenig $
# $Id: 01_FHEMWEB.pm 7176 2014-12-09 19:11:36Z rudolfkoenig $
# $Id: 98_SB_PLAYER.pm beta 20141120 0016 CD/MM $
# $Id: 97_SB_SERVER.pm beta 20141120 0008 CD $
# $Id: 33_readingsGroup.pm 7161 2014-12-07 14:53:12Z justme1968 $

Die SB-Module sind die aus Deinem Commit ab1fb3291a.


ChrisD

Hallo,

Es ist mir schon länger bekannt dass die Readings auf der Detailseite nach einem 'set' nicht immer aktualisiert werden. Dies betrifft aber nicht nur die SB-Module.

Dabei passiert folgendes:

- der Befehl wird in der Detailansicht abgeschickt
- der Befehl wird von FHEM an den SB-Server geschickt
- die Seite wird automatisch vom Browser neu geladen (noch mit dem alten Wert)
- die Rückmeldung vom SB-Server kommt und FHEM aktualisiert die Readings
- Longpoll wird im Browser aktiviert und 'verpasst' die im vorherigen Schritt gemachte Aktualisierung

Wie du geschrieben hast behebt ein manueller Reload der Seite das Problem.

Ich sehe 3 Möglichkeiten das Problem zu lösen:
- FHEMWEB und Longpoll anpassen (wird nicht passieren)
- die Readings zeitverzögert aktualisieren, die nötige Zeitverzögerung ist aber abhängig von der Geschwindigkeit deines Browsers (kann ich implementieren)
- die Readings setzen ohne auf die Antwort des Servers zu warten (über ein Attribut 'updateReadingsOnSet')

Mit deiner Definition der readingsGroup wird bei mir der Zustand korrekt angezeigt wenn ich die Befehle absetze. Benutzt du die readingsGroup nur zur Anzeige oder hast du auch Befehle über 'commands' definiert ?

Grüße,

ChrisD