Sonos steuern

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

Vorheriges Thema - Nächstes Thema

djhans

Zitat von: Reinerlein am 12 März 2014, 21:58:36
Hi djhans,

hmm, vielleicht kannst du mal versuchen, den regulären Ausdruck zu erweitern:

define zoneChange notify Sonos:ZoneGroupState.* set Sonos_Wohnzimmer Play
Damit matcht der Ausdruck komplett, vielleicht klappt das ja...

Grüße
Reiner

Hallo Reiner,
so funzt es!
Danke,
Christian

JoeALLb

Christian, kannst Du uns mal zeigen, wie Du deine Gruppierungsanzeige gelöst hast?
Ich hab da mal Screenshots gesehen, die recht interessant ausgesehen haben....
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

djhans

#932
Hi,
da wird noch dran gebastelt! Habe es aber aktuell auf Eis gelegt. Irgendwann soll die Anzeige so aussehen, dass  Player im Gruppenverband nur die Infos des Gruppen-Masters anzeigen; die Gruppenmitglieder tauchen dann nur mit dem Symbol und dem Namen in der Zeile darunter auf. Folgende Informationen will ich da haben:

<Playersymbol><Raum>  <Play/Stop/Pause als Icon> <Album oder Sender> <RDS-Text oder Titel>

Das könnte dann z.B. so aussehen:
Singel:
Wohnzimmer: <stop>
Bad: <Play>    <WDR2>     <RDS-TExt>
Büro: <Play>  <NDR>   <RDS-TExt>
Terrasse: <Play>  <Charts 2014>  <Lieder...>

Gruppe 1
Schlafzimmer: <Play> <WDR2> <RDS-TExt>
Kinderzimmer:
Dachboden:

Gruppe 2
Keller: <Play> <SWR3> <RDS-TExt>
Küche:
Kinderzimmer2


Ich kann zwar schon den String "get Sonos Groups" auswerten (siehe hier im Thread weiter oben), aber das Zusammenbauen mit readingsGroup funktioniert noch nicht, bzw. ich bin mit fhem und perl noch nicht so weit, dass ich den String, der für die readingsGroup erforderlich ist, dynnamisch zusammenbauen kann. (siehe hierzu auch http://forum.fhem.de/index.php?topic=20852.new;topicseen#new)

Aktuell sieht das so bei mir aus:
define Sender readingsGroup Sonos_Buero:<%icoSONOSPLAYER_icon-S3.png>,<Büro>,currentSender, \
Sonos_Wohnzimmer:<%icoSONOSPLAYER_icon-ZP120>,<Wohnzimmer>,<{rgMarquee(ReadingsVal($DEVICE,"currentSenderInfo",""))}>,\
Sonos_Terrasse:<%icoSONOSPLAYER_icon-S3.png>,<Terasse>,currentSender,
attr Sender nolinks 0
attr Sender notime 1
attr Sender room Test
attr Sender valueIcon { state => '%devStateIcon' }
attr Sender valueStyle {'style="color:green;;font-weight:bold"'}
define SonosGruppe dummy
attr SonosGruppe devStateIcon on:black_FS20.on off:black_FS20.off
attr SonosGruppe room Test


die Laufschriftfunktion ist in der Funktion "rgMarquee" enthalten und in der 99_myUtils gespeichert.
sub rgMarquee($)
{           
  my ($txt) = @_;
  return "<marquee scrollamount=2 width=\"150\">$txt</marquee>";
}


Probleme habe ich auch mit der Laufschrift, Umlaute werden noch nicht korrekt angezeigt. Die werden aber schon in den Readings nicht korrekt dargestellt. Keine Ahnung, ob das eine lokale Einstellung bei mir ist, oder generell nicht funktioniert.

djhans

der-Lolo

Hallo Reinerlein,
ich habe gerade Speak in betrieb genommen - genau diesen Satz sollte die Tante auch sagen...
aus den Lautsprechern kam aber nur ein
be gerade Speak in betrieb genommen...
die ersten Buchstaben wurden also verschluckt. Läuft da intern ein fading ab?

Würde das cachen der ansagen helfen? Vom Prinzip her werden es zwar schon ein paar Sätze werden - aber vieles wird gleich sein... Ausserdem habe ich folgendes aus dem Wiki nicht komplett verstanden, kannst du das nochmal erläutern?

Zitat

Speak1: Hiermit kann ein Systemaufruf definiert werden, der zu Erzeugung einer Sprachausgabe verwendet werden kann. Sobald dieses Attribut definiert wurde, ist ein entsprechender Setter am Sonosplayer verfügbar.
Das Format ist:
<Ausgabedateiendung>:<Befehlszeile>
Es dürfen folgende Platzhalter verwendet werden:
%language%: Wird durch die eingegebene Sprache ersetzt
%filename%: Wird durch den kompletten Dateinamen (inkl. Dateiendung) ersetzt.
%text%: Wird durch den zu übersetzenden Text ersetzt.
Speak2: Siehe Speak1
Speak3: Siehe Speak1
Speak4: Siehe Speak1


Danke schonmal...

Reinerlein

Hallo der-Lolo,

hast du bzgl. der verschluckten Ansage vielleicht die Parameter davor nicht korrekt angegeben?
Der Speak-Befehl braucht erst die Lautstärke, dann die Sprache und dann den Text...
Eigentlich passiert da kein Fading. Genausowenig sollte eine Verzögerung im Modul eine Auswirkung haben, da ja einfach dem Player gesagt wird, dass er eine bestimmte Datei abspielen soll. Auf was für einem Player soll es denn rauskommen? Hat dieser vielleicht eine Ausgabe-Anschalt-Verzögerung?

Das cachen hilft insofern, dass die gespeicherten Ansagen schneller starten sollten. Aber es sollte keine Änderung im Startverhalten selbst bewirken... Natürlich ist das auch etwas sparsamer mit deinem Plattenplatz :-)

Kurze Beschreibung zu deiner Verständnisfrage:
Die Definition für Speak1 (und natürlich die anderen) ermöglicht das Verwenden einer ausführbaren Datei für das Erzeugen der Sprachdatei. Damit kannst du z.B. ein lokal installiertes 'espeak' für das Synthetisieren der Sprachdatei verwenden, und benötigst keine aktive Internetverbindung zu Google...

Wenn du dir die Klappbox für die möglichen Setter am Player mal anschaust, wirst du sehen, dass erstmal kein Speak1 usw. angeboten wird. Erst, wenn du das entsprechende Attribut am zentralen Sonos-Device gesetzt hast, gibt es diesen Setter. Das soll eine Vereinfachung sein, damit die Setter nicht unnütz aufgerufen werden, obwohl überhaupt nichts passendes konfiguriert wurde :-)

Für die Konfiguration selbst gibt es da im Wiki ja ein Beispiel. Wenn da noch was fehlen sollte (ich verwende das ja selber nicht:-), dann einfach kurz bescheid sagen...

Grüße
Reiner

der-Lolo

Guten Morgen Reinerlein,
na da hätte ich selbst drauf kommen können - die playlist lief mit Crossfade...
kann man dem Speak mitgeben das Crossfade deaktiviert wird?
Die alternative ohne Google finde ich auch toll - das probier ich mal aus...
Hat schon jemand eine "gute" Stimme gefunden?

Reinerlein

Hi,

ich denke, dass es zu weit führen würde bei einer Durchsage auch Crossfade zu deaktivieren. Man muss immerhin bedenken, dass diese ganzen Anweisungen an den Player vor dem Speak die Latenz bis zum Start verzögern, und ich mir vorstellen kann, dass es auch Anwender gibt, die das gerne aktiv behalten würden...

Wenn man das braucht, muss man das eben selber vorneweg senden, ist ja keine Sache :-)

Grüße
Reiner

der-Lolo

Klar, das kann man auch von Hand machen - grundsätzlich glaube ich aber das jeder die komplette durchsage hören möchte...

djhans

Hallo,
ich habe mal eine Frage:
Ich habe inzwischen einige Sonos Steuerungen mit fhem realisiert. Sleeptimer, Gruppenbildung zu bestimmten Zeiten, Wecker, Lautstärkeanpassung, etc.

Jetzt kann es aber sein, dass ich den SchlafzimmerSonos einmal anders nutzen möchte und z.B.  für eine Party in einen anderen Raum betreibe. dann wäre es ziemlich doof, wenn das Teil um 22:30 den Sleeptimer aktiviert und die Lautstärke anpasst.

Ich würde in fhem gerne einen Schalter "PartyModus" definieren, der die Player für fhem quasi  "unsichtbar" macht. Gibt es eine einfache Möglichkeit dies zu machen, ohne alle Steuerfunktionen mit "disable" einzeln abzuschalten?

djhans


der-Lolo

aber warum denn nicht disablen?
Ich hab versucht möglichst oft die Wildcard Möglichkeit nutzen zu können, so kann ich jetzt mit einem einzigem disable Befehl gezielt Notifys disablen oder eben notify Gruppen disablen.

Es gibt z.b.
sp_z1
sp_s4
sp_sonos
jeweils Speak ausgaben aus Sonos oder Android
attr sp.* disable 1
schaltet also alle Speak ausgaben ab...

Ich mag disablen...

djhans

Hallo,
danke für die Antwort, dann muss ich mir mal neue Namen überlegen...

Du schreibst:
attr sp.* disable 1

Noch einmal eine Verständnisfrage:
warum muss hier der "Punkt" stehen. Normalerweise würde ich erwarten, dass der Befehl so heisst:
attr sp* disable 1

djhans

der-Lolo

der punkt ist eine Perl besonderheit - seite 19 einsteiger.pdf

eppi

Hallo zusammen
Vielleicht hilt das dem einen oder anderen...

Ich habe heute meinen neuen Einplatinen-Computer mit Debian Image aufgesetzt, Step bei Step vom der alten auf die neue Hardware migriert.
Alles verlief ziemlich Problemlos ausser Sonos "bockte" einwenig.

Beim einrichten des Sonos bekam ich immer folgende Fehlermeldung:
BEGIN failed--compilation aborted at FHEM/lib/UPnP/Common.pm line 728.
Can't locate XML/Parser/Lite.pm in @INC (you may need to install the XML::Parser::Lite module) (@INC contains: fhem.p/lib fhem.p/FHEM/lib ./FHEM/lib ./lib ./FHEM ./ /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at FHEM/lib/UPnP/Common.pm line 728.


Google sagte mir, dass ich ein Debian Paket nicht installiert habe, was ich sofort nachholte:
apt-get install libxml-parser-lite-perl
Danach funktionierte meine gesamte Sonos Installation wieder problemlos. ;D
Das Wiki habe ich entsprechend angepasst.

Gruss Dani

Spartacus

Hallo,
ich bin neu und habe mir auch das Sonos Modul installiert. Läuft soweit echt super, habe aber manchmal auch noch Abstürze, gerade beim Starten von fhem.
Ich wollte deshalb die Lib nachinstallieren:
apt-get install libxml-parser-lite-perl
dann kommt aber der Fehler, dass das Paket nicht gefunden wurde.... Woran liegt das nun?

Danke und Gruß,
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

eppi

Hallo Spartacus
Zitataber manchmal auch noch Abstürze, gerade beim Starten von fhem.
Ich glaube nicht, dass dies am XML Parser liegt.... Was steht denn im Log wenn der Absturz eintritt?

Gehe ich richtig in der Annahme, dass du einen RPi verwendest für FHEM mit Debian?
Gruss Dani