Squeezebox Modul - erste Version

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

Vorheriges Thema - Nächstes Thema

FHEm2005

Hallo Chris,
eine kurze Frage:
Zitatset <server> syncGroup addp playerA,playerB,playerC,playerD Gruppe_1

Welcher Playername ist gemeint LMS oder FHEM, oder ist das abhängig vom Playerattribut  syncedNamesSource
Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEm2005

Edit:
Ich habe mal mit den neuen sync-Befehlen "gespielt".

Auf einmal erhielt ich im neuen Reading "SynGroups" den Inhalt  Group1,SBT.Wohnen,SB.iPhone Group1,Group2 . Ich verstehe nicht wie der Inhalt des Reading aussehen soll.

Ich kann ja nun mehrere Sync-Gruppen beschreiben und quasi als "Konstante" Group<Groupname> bereithalten. Mit dem Befehl load wird die Gruppe zusammengestellt und aktiviert. Habe ich das Prinzip richtig verstanden?

Ich habe leider von Perl zuwenig Ahnung um konkreten Programmtext liefern zu können. Aber Klugscheißen kann ich gut.  8) 8) 8) 8) 8)

<Klugscheissermodus>
Gut wäre es wenn jede Sync-Gruppe ein eigenes Reading (automatisch) bekommt. Als ReadingsName würde ich mir wünschen "Sync"+gewählter Name der Sync-Gruppe.

Beispiel:
PlayerA,PlayerB und PlayerC bilden die Gruppe "Ansage", dann gibt es ein Reading SyncAnsage mit dem Inhalt PlayerA,PlayerB,PlayerC
PlayerA,PlayerB, PlayerC und PlayerE bilden die Gruppe ""Klingeln", dann gibt es ein Reading SyncKlingeln mit dem Inhalt PlayerA,PlayerB,PlayerC,PlayerE

Aktiviert bzw. deaktiviert werden die Gruppen mit activate bzw deactivate oder auch load und unload

Damit könnte ich beliebige Gruppen vordefinieren, Readings einfach abfragen und auf Playergruppen zugreifen.
</Klugscheissermodus>

Viele Grüße
Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

TWART016

Zitat von: Rince am 02 November 2016, 11:33:55
@dadoc
Habe am RasPi einen HDMI-VGA Converter mit 3,5mm AudioOut und MicroUSB (Stromversorgung) dran. Am RasPi Audio auf HDMI gestellt. Gibt nen wesentlich besseren Sound für 12€...

Welchen Adapter hast du genommen? Also HDMI Port am Pi und dann Lautsprecher per Klinke angeschlossen?


pc1246

HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

ChrisD

Hallo,

ZitatWelcher Playername ist gemeint LMS oder FHEM
Du kannst beide Namen verwenden, auch gemischt.

ZitatIch verstehe nicht wie der Inhalt des Reading aussehen soll.
Das Reading enthält die Namen der definierten Gruppen, mit Komma getrennt. Dein Reading sieht aber sehr merkwürdig aus, kann es sein dass du bei der Definition ein Leerzeichen zwischen den Playern hattest ?

ZitatGut wäre es wenn jede Sync-Gruppe ein eigenes Reading (automatisch) bekommt.
Welche Funktion hätte das Reading ? Ist es nur damit du nachsehen kannst welche Player in welcher Gruppe sind ?
Als Prefix würde ich 'sg' oder 'syncgrp' vorziehen.

Wie stellst du dir ein deactivate/unload vor ? In welchem Zustand sollen sich die Player danach befinden ?

Grüße,

ChrisD

Rince

ZitatWelchen Adapter hast du genommen? Also HDMI Port am Pi und dann Lautsprecher per Klinke angeschlossen?
Das da:
https://www.amazon.de/gp/product/B00DP1U65K
Und, ja.

ZitatHallo Twart
Bei dem Thema waren wir aber schon einmal! https://forum.fhem.de/index.php/topic,17667.msg429496.html#msg429496
Gruss Christoph
Ja, schon richtig. Aber das war im März. Wenn man den Thread mit seinen 83 Seiten nicht kennt, vermutet man da sicher nicht die Antwort auf die Frage, wie man den Audioausgang vom Pi verbessern kann  ;)
Hab daher bitte Nachsicht.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

FHEm2005

#1236
Hi Chris,

Zitat... kann es sein dass du bei der Definition ein Leerzeichen zwischen den Playern hattest ?
Das kann natürlich durchaus sein. Ich spiele mal ein wenig weiter...   :D ;D

ZitatWelche Funktion hätte das Reading ? Ist es nur damit du nachsehen kannst welche Player in welcher Gruppe sind ?
Genau das ist der Punkt. Wenn es mehrere Gruppen für unterschiedliche Zwecke gibt, wird es schnell unübersichtlich.

ZitatAls Prefix würde ich 'sg' oder 'syncgrp' vorziehen.
Du bist hier der Master. Welches Prefix Du verwendest ist allein Deine Entscheidung. Ich persönlich würde wegen der Länge 'sg' bevorzugen.

ZitatWie stellst du dir ein deactivate/unload vor ? In welchem Zustand sollen sich die Player danach befinden ?

Du hast Recht. Eigentlich ist gar kein deactivate/unload erforderlich. Das zeigt das nachstehende fiktive Beispiel

Fiktives Beispiel:

Istzustand:
Es sind die Player SBx.1 bis SBx.5 .
Es sind drei Gruppen definiert, die von unterschiedlichen Quellen Musik hören (Grp1,Grp2 und Gr3)
Die Readings der Gruppen zeigen folgendes an sgGrp1: SBx.1,SBx.2,SBx.5   und  sgGrp2: SBx.3,SBx.4
Grp1 hört aus der eigenen Datenbank, Grp2 hört den Sender 'Schlagmichtot'

Ein Event veranlasst eine Durchsage
- der aktuelle Zustand wird mit set LMS save Zustand_1 gespeichert. Dabei müsste der Zustand aller - für den LMS sichtbaren- Player gespeichert werden.
- alle Player anhalten
- die Grp3 wird gebildet mit set <server> syncGroup addp SBx.1,Sbx.2,Sbx.3,SBx.4,Sbx.5 Grp3, das Reading zeigt sgGrp3:SBx.1,Sbx.2,Sbx.3,SBx.4,Sbx.5 
  oder
  die bereits definierte Gruppe Grp3 wird mit  set <server> syncGroup load Grp3 geladen
- alle Player dieser Gruppe einschalten mit set LMS syncGroup load poweron Grp3
- Ansage: "Alle Mann von Bord"
- Player werden angehalten

Alten Zustand herstellen
- Alter Zustand wird mit set LMS recall Zustand_1 wieder hergestellt.

Dabei fällt mir folgendes ein: Wäre es machbar den Befehl
set <server> syncGroup addp playerA,playerB,playerC,playerD Gruppe_1 um bereits vorhadene Gruppen zu erweitern? Dazu könnten dann die Readings benutzt werden.

So etwa:
set LMS syncGroup addp sgGrp1,sgGrp2 Grp3

Viele Grüße
Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEMAN

Zitat von: ChrisD am 01 November 2016, 17:58:18
Hallo,
Darüber habe ich auch schon nachgedacht, aber noch keine einfache Lösung gefunden. Ich habe aber die Module nochmals erweitert:

Hi ChrisD,

das Modul avanciert echt zum Kracher. Mangels Zeit bin ich aktuell immer noch am testen.

Eine Sache ist mir aufgefallen:
Ich kann den Zustand mit save / recall speichern und wiederherstellen. Allerdings wird eine ausgeschaltete Squeezebox nach dem save+play/talk+recall nicht wieder ausgeschaltet. Ist mir bei den Raspis ohne Display eher egal, bei den Squeezebox Radios allerdings nicht ganz so schön, da keine Uhrzeit mehr angezeigt wird. Ist das evtl. nur ein Konfigurationsfehler meinerseits?
Und warum gibt es eine poweron Funktion gesondert?

Gruß
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEm2005

Hallo Chris,
durch umfangreiches Spielen habe ist mehrere sSyncGroups erzeugt, bei denen auch Müll drinsteht.

Hier das Listing:
Syncgroups:
       Group1:
         0:
           c          3
           fhemname   SB3.Buero
           lmsname    SB3.Buero
           mac        00:04:20:d8:ae:ce
         1:
           fhemname   SB3.Buero
           lmsname    SB3.Buero
           mac        00:04:20:d8:ae:ce
         2:
           fhemname   SBN.Bad
           lmsname    SBN.Bad
           mac        bb:bb:a6:fe:84:6b
       Group2:
         0:
           c          1
           fhemname
           lmsname
           mac
       Sbt.wohnen,sb.iphone group1:
         0:
           c          3
           fhemname   SB3.Buero
           lmsname    SB3.Buero
           mac        00:04:20:d8:ae:ce
         1:
           fhemname   SB3.Buero
           lmsname    SB3.Buero
           mac        00:04:20:d8:ae:ce
         2:
           fhemname   SBN.Bad
           lmsname    SBN.Bad
           mac        bb:bb:a6:fe:84:6b


Das Problem ist, dass ich mit dem Befehl:

set LMSRasPi3 syncGroup delete Group2 die Gruppe wohl in der Reihenfolge verschieben kann, aber nicht löschen.

Gruß Eberhard

Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

FHEMAN

Hi Chris,

ich setze verschiedene Master bei den SyncGroups. Für das Notify auf ttsdone brauche ich dann immer den jeweiligen Master. Für eine allgemeine Funktion, an der ich gerade bastele, ist das ein wenig umständlich.

Daher die Frage:

Kann ich den Master bzw. den 1. Player einer Syncgroup herausfinden?
Oder besser noch: Könnte man ttsdone auf die Syncgruppe beziehen?

Gruß
Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEm2005

#1240
Hallo Ronny,

warten wir mal ab, was Chris noch in der Schublade hat. Sollte er meinem Vorschlag folgen, dass es für jede definierte SyncGruppe ein eigenes Reading gibt, kannst Du den Master aus dem Reading herauslesen - es ist dann der erste Player.
Oder Chris hat eine bessere Idee - wäre nicht ungewöhnlich.

Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

ChrisD

#1241
Hallo,

Ich habe die Module überarbeitet:

97_SB_SERVER:
- [ ,;:] nicht in Gruppennamen zulassen
- syncGroup deleteall, talk und resettts hinzugefügt
- Readings pro Sync-Gruppe hinzugefügt
- Reading syncGroups beim Start korrigiert

98_SB_PLAYER:
- Event ttsdone wurde zu früh geschickt
- Auswahlboxen für ttsOptions und ttslink

Mitset SERVER syncGroup deleteallwerden alle Gruppen gelöscht. @Eberhard: Dies ist wahrscheinlich die beste Lösung um wieder einen sauberen Stand zu bekommen.
In Zukunft werden Leerzeichen sowie :, und ; in den Gruppennamen durch _ ersetzt.

Mitset SERVER syncGroup talk [poweron] <Gruppe> <Text> wird:
- der Zustand des Servers gespeichert
- die Gruppe <Gruppe> aktiviert
- optional werden alle Player eingeschaltet
- der Text <Text> ausgegeben
- der Zustand des Servers restauriert

Das Format von <Text> ist das Gleiche wie bei den Playern.

Einschränkungen:
- falls kein Player eingeschaltet ist und poweron nicht mit angegeben ist wird die Ausgabe nicht gestartet
- falls bei poweron nach 3s kein Player eingeschaltet ist wird abgebrochen
- es kann nur ein 'talk' aktiv sein, wenn versucht wird einen weiteren zu starten wird dieser ignoriert

Mit syncGroup resettts kann ein 'hängender' Talk (hoffentlich) beendet werden.

@Ronny:
ZitatFür das Notify auf ttsdone brauche ich dann immer den jeweiligen Master.
Du kannst das notify auf einen beliebigen Player der Gruppe setzen bei dem eventondone gesetzt ist.

ZitatKann ich den Master bzw. den 1. Player einer Syncgroup herausfinden?
Dies ist im Moment nicht so einfach. Selbst wenn du den Master ausliest ist nicht sichergestellt dass er beim Aktivieren der Gruppe auch Master wird. Falls der Master nicht verfügbar ist, ändert der LMS eigenmächtig den Master.

Zitatkannst Du den Master aus dem Reading herauslesen - es ist dann der erste Player.
Dies ist nicht immer der Fall. Wenn du den Master mit
set SERVER syncGroup masterp PlayerCänderst, ändert sich die Reihenfolge im Reading nicht.

ZitatOder besser noch: Könnte man ttsdone auf die Syncgruppe beziehen?
Dazu müsste der Server die Kommunikation zwischen Player und LMS analysieren. Du könntest aber das notify so anpassen:
define n_ttsdone notify .*:ttsdone set LMS recall NormalBetrieb del;;delete n_ttsdone

ZitatAllerdings wird eine ausgeschaltete Squeezebox nach dem save+play/talk+recall nicht wieder ausgeschaltet
Kannst du um den Fehler einzugrenzen:
- die Module aktualiseren
- unsync aller Player
- alle Player ausschalten
- den Zustand abspeichern
- alle Player einschalten
- den Zustand laden

Werden die Player dabei wieder ausgeschaltet ?

ZitatUnd warum gibt es eine poweron Funktion gesondert?
Bei einem syncGroup load werden die Player zwar synchronisiert, es ändert sich aber nichts an ihrem Zustand wenn die Option 'Ein-/Ausschalten synchronisieren' im LMS nicht aktiv ist. Mit poweron versucht das Modul alle Player einzuschalten.

Grüße,

ChrisD

FHEm2005

#1242
Hi Chris,

Klasse! Der Befehl
set SERVER syncgroup talk [poweron] <Gruppe> <Text> erspart viel Arbeit. Danke!

BTW:Hat sich die Schreibweise von syncGroup nach snycgroup geändert?  ;D

Zitatset SERVER syncgroup deleteall
Zitatset SERVER syncgroup talk [poweron] <Gruppe> <Text>

Gruß Eberhard

Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM

ChrisD

Hallo,

ZitatHat sich die Schreibweise von syncGroup nach snycgroup geändert?

Nein, die Schreibweise hat sich nicht geändert, ich habe es in meinem Post korrigiert.

Grüße,

ChrisD

FHEm2005

Liebe Freunde von SB_SERVER und SB_PLAYER,

ich plane in naher Zukunft die Dokumentation (siehe Fußnote) mal wieder zu überarbeiten. Zu viele  Änderungen sind seitdem an beiden Modulen vorgenommen worden. Bevor ich aber damit beginne, will ich erst das Thema syncGroup beendet wissen.

Zusätzlich habe ich eine Frage an euch:

In der Doku befindet sich am Ende eine Übersicht über diesen Thread, in der Beitragsnummer und Inhalt Beitrages zu finden ist.

1. Wer hat in der Vergangenheit mal in diese Übersicht geschaut?
2. Ist es den Aufwand wert, diese Übersicht zu aktualisieren?

Über ein Feedback würde ich mich freuen.

Einen schönen Tag. Gruß Eberhard
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM