Squeezebox Modul - erste Version

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

Vorheriges Thema - Nächstes Thema

bugster_de

@ChrisD: das habe ich gerade gemacht und er steht auf 7

Navigator

@Chris

Ja, EventMaps habe ich definiert und zwar folgende.

off:OFF play:ON

Wenn ich diese Zeilen entferne, startet FHEM sauber durch, aber warum werden diese nicht akzeptiert?

Gruss Dittel

ChrisD

Hallo,

@bugster_de: Kannst du auch noch schauen ob {helper}{AMPLIFIERACTIVETIMER} existiert und wenn ja welchen Wert es hat ?

@Dittel: Beim Start von FHEM werden die states aus fhem.save gesetzt. Dabei werden Datum, Readingsname und der Wert eingelesen. Wenn ein eventMap definiert ist wird leider nicht überprüft ob überhaupt ein Wert vorliegt was dann zu den Fehlermeldungen führt. Das Problem betrifft alle Module die leere Readings verwenden, beim SB_PLAYER -Modul können dies z.B. currentArtist oder currentAlbum sein. Ich habe keine Informationen darüber finden können ob leere Readings zulässig sind oder nicht.

Es gibt 2 Möglichkeiten den Fehler zu beheben:
- fhem.pl wird angepasst und es wird vor dem Aufruf von ReplaceEventMap geprüft ob überhaupt ein Wert vorliegt, dies würde das Problem für alle Module lösen
- in SB_PLAYER muss sichergestellt werden dass es keine leeren Readings gibt, da dies für unterschiedliche Readings passieren kann müsste ich jeweils einen passenden Ersatzwert setzen. Dies wird aber Nebenwirkungen bei der Darstellung der Readings haben.

Grüße,

ChrisD


Borkk

Hallo Zusammen,

ich habe die TTS Funktion genutzt, um mir nach dem Wecken ein paar Daten (Wetter, Temp, Datum Wochentag, usw) ansagen zu lassen. Das hat immer prima funktioniert. Seit ca. 2 Wochen tut es das nicht mehr. Scheinbar funktioniert "talk" und/oder "saytext" gar nicht mehr. (wo lag da eigentlich der Unterschied).

Ich habe hier gelesen das die TTS Funktion irgendwie rausgenommen wurde. Bleibt das so? Wie könnte ich sie mir wieder "zusammenbauen".

Schon mal Danke für eure Hilfe.
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

Borkk

Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

Firetic

Hatte das gleiche Problem - in dem Beitrag ist aber auch ein Verweis auf die Lösung ;-)

Einfach "&client=t&prev=input" beim TTS-Pfad anhängen dann funktioniert es wieder...

Leider scheint das auch noch andere Einflüsse zu haben. Die TTS Lautstärke wird jetzt leider nicht mehr übernommen :-(
Vielleicht erfordert das noch Anpassungen im Modul selbst?!

Navigator

@ChrisD

...nun da ich jetzt weiss woher der Fehler kommt, bzw. eine undefinierte Variable ja nicht unbedingt ein Fehler ist, kann ich damit leben. Ich habe noch bevor ich wusste, welches Modul diese Meldung provoziert, einen anderen Betrag eröffnet und würde mal deine Antwort dort posten. Vielleicht stolpert ja rudolfkoenig drüber und sieht hier Handlungsbedarf, weil es laut deiner Aussage ja alle Module betreffen sollte.

Rince

Zitat von: Firetic am 01 August 2015, 10:42:12
Hatte das gleiche Problem - in dem Beitrag ist aber auch ein Verweis auf die Lösung ;-)

Einfach "&client=t&prev=input" beim TTS-Pfad anhängen dann funktioniert es wieder...

Leider scheint das auch noch andere Einflüsse zu haben. Die TTS Lautstärke wird jetzt leider nicht mehr übernommen :-(
Vielleicht erfordert das noch Anpassungen im Modul selbst?!

Danke :)
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)

Paul

Sorry habe wohl eine sehr bkloppte Frage wegen Coverart. Komme aber Irgendwie nicht mit der Beschreibung zurecht.

Zitat von: bugster_de am 17 Dezember 2013, 22:12:10
optional kann man coverart:XXX angeben. Unter XXX gibt man den Namen eines FHEM weblink image elementes an. Der Player aktualisiert dann jeweils den Link auf das aktuelle Coverart Bild, so dass man dieses z.B. im Floorplan anzeigen kann.
Mit den Attributen coverartheight und coverartwidth kann man die Breite bzw. Höhe bestimmen.
Sprich einfach ein weblink Elemt mit define mylink weblink image Link.zu.einem.bild.jpg anlegen. Der SB_PLAYER aktualisiert dann den jeweiligen Image Link so dass das aktuelle Coverart z.B. im Floorplan angezeigt wird.
Bitte die Attribute für Höhe und Breite des weblink elementes NICHT verwenden. Größe wird durch den SB_PLAYER gemacht. Sonst geht das nicht

Habe ein weblink Element definiert:

define Cover image http://192.168.178.124:8083/fhem/floorplan/cover.jpg

und den SB_Player so definiert:


Anzeige von einem Cover Fehlanzeige
define HIFI SB_Player B8:27:EB:33:7A:5F coverart=Cover
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

ChrisD

Hallo,

Kannst du versuchen in der Definition des Players das '=' durch ein ':' zu ersetzen :
define HIFI SB_Player B8:27:EB:33:7A:5F coverart:Cover

Grüße,

ChrisD

DJAlex

Ich hab mich jetzt einen Tag damit auseinandergesetzt wie ich einen anderen ttslink verwenden kann.
meine nicht sehrschöne Lösung war dann folgende:

Das ist der original Code ab Zeile 1963:

for my $outstr (@textlines) {
            if ($outstr =~ m/\|(.*)\|/) {               # CD 0033
                push(@{$hash->{helper}{ttsqueue}},$1);  # CD 0033
            } else {
                $outstr =~ s/\s/+/g;
                $outstr = uri_escape( $outstr );
                $outstr = AttrVal( $name, "ttslink", "none" ) 
                    . "&tl=" . AttrVal( $name, "ttslanguage", "de" )
                    . "&q=". $outstr;
                push(@{$hash->{helper}{ttsqueue}},$outstr);
            }
        }


geändert in

}
        for my $outstr (@textlines) {
            if ($outstr =~ m/\|(.*)\|/) {               # CD 0033
                push(@{$hash->{helper}{ttsqueue}},$1);  # CD 0033
            } else {
                $outstr =~ s/\s/+/g;
                $outstr = uri_escape( $outstr );
                $outstr = AttrVal( $name, "ttslink", "none" )
                    . "" . AttrVal( $name, "", "" )
                    . "". $outstr;
                push(@{$hash->{helper}{ttsqueue}},$outstr);
            }
        }


Ich weis das ist nicht schön aber es funktioniert.

Könnte man das nicht so umbauen dass man einen freien ttslink verwenden kann?
Ich hab zum Beispiel den von http://www.voicerss.org/ verwendet da kann man sich mit der free Version
ähnlich wie bei Google mp3 erstellen lassen.allerdings muss man sich den link da mit API key zusammenbauen etc. Da jede Seite abzudecken ist glaub ich utopisch aber wenn man noch ein "attr ownttslink" einfügt wo man seinen eigenen ttslink eingeben kann und dann nur noch der text angehängt wir währe schon viel gewonnen.

Ich bin nur leider nicht in der Lage das umzusetzen mich hat das hier ja schon nen ganzen Tag gekostet.

ChrisD

Hallo,

@DJAlex:
ZitatKönnte man das nicht so umbauen dass man einen freien ttslink verwenden kann?

Eine Möglichkeit wäre das Attribut ttslink etwas zu erweitern so dass Platzhalter für die Parameter darin enthalten sind.

Für Google würde aus
http://translate.google.com/translate_tts?ie=UTF-8
dies:
http://translate.google.com/translate_tts?ie=UTF-8&tl=<LANG>&q=<TEXT>

Für VoiceRSS würde es so aussehen:
http://api.voicerss.org/?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&src=<TEXT>&hl=<LANG>

Dabei gibt <LANG> die Stelle an an der das Attribut ttslanguage eingesetzt werden soll (optional) und <TEXT> die Stelle an der der auszugebende Text kommen soll.

@Borkk:
Die TTS-Funktion ist weiterhin enthalten und ich habe nicht vor sie zu entfernen. Was aber eventuell entfallen wird ist die optionale Anbindung an das Text2Speech-Modul da diese etwas komplizierter ist. Ich weiß auch nicht ob überhaupt jemand die benutzt.

@Firetic:
Ich kann den Effekt dass die Lautstärke nicht mehr richtig gesetzt wird nicht reproduzieren. Auch mit dem Zusatz "&client=t&prev=input" wird die Lautstärke korrekt gesetzt. Kannst du schauen wie bei dem betroffenen Player die Attribute ttsVolume und volumeLimit stehen ?

Grüße,

ChrisD



Firetic

@ChrisD

Ich habe jetzt nochmal ein paar Tage recherchiert. Ich weiß leider nicht mehr wo der Wurm jetzt genau drin war aber nachdem ich jetzt nochmal ein update deines Moduls gemacht habe (hatte da irgendwann die Änderung von DJAlex eingebaut) funktioniert das jetzt anscheinend wieder...

Werde das mal im Auge behalten ;-)

Gibt es eigentlich irgendeine Möglichkeit "Umlaute" gescheit wiedergeben zu können?

ChrisD

#823
Hallo,

Ich habe das Modul erweitert so dass auch VoiceRSS benutzt werden kann.

Änderungen:
- get alarmPlaylists hinzugefügt
- VoiceRSS hinzugefügt
- URL für Google TTS geändert
- Platzhalter für Sprache und Text in ttslink hinzugefügt
- Heppel: Dokumentation überarbeitet und ergänzt
- bei modify nicht erneut initialisieren

Wie bereits im letzten Beitrag geschrieben habe ich das Attribut ttslink erweitert. Es ist jetzt möglich die Sprache, den Text und den APIKey als Parameter mit anzugeben.

Für Google könnte das Attribut so aussehen:
http://translate.google.com/translate_tts?ie=UTF-8&tl=<LANG>&q=<TEXT>&client=t&prev=input
, für VoiceRSS so:
http://api.voicerss.org/?key=<APIKEY>&src=<TEXT>&hl=<LANG>

Der Key muss im neuen Attribut ttsAPIKey abgelegt werden. Falls im ttslink <APIKEY> angegeben ist und das Attribut ttsAPIKey nicht existiert wird die Sprachausgabe abgebrochen. Wenn VoiceRSS verwendet wird muss ttslanguage angepasst werden (z.B. de-de statt de).

Falls <TEXT> nicht in ttslink enthalten ist, verwendet das Modul die Google-Syntax, es sollte also nicht notwendig sein bereits bestehende Google-Links anzupassen.

Falls die URL voicerss enthält werden die Sonderzeichen nicht ersetzt, damit sollten auch Umlaute korrekt ausgegeben werden.

Es ist auch möglich statt einer URL die Begriffe Google und VoiceRSS in ttslink zu verwenden, z.B.
attr meinPlayer ttslink Google
Dadurch werden intern die obigen URLs verwendet.

Wichtig: Diese Version enthält größere Änderungen am TTS, bitte mit Vorsicht verwenden.

Update wie üblich mit
update force https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/sb/controls_squeezebox.txt

Grüße,

ChrisD

mrbreil

Muss jetzt mal noch Fragen, habe zwar alle Seiten seit meinem letzten Post gelesen, aber nix gefunden. Wie macht ihr das mit der synchronen Sprachausgabe? Ich habe vier Clienten. Wenn jetzt auf einem etwas spielt, die anderen sind gestoppt, soll der eine Player stoppen -> alle Player synchronisiert etwas per Sprachausgabe etwas wiedergeben -> jeder seinen vorherigen Zustand wieder annehmen.  ich müsste die Player vorher doch in eine Gruppe zusammen fassen oder?


Gesendet von iPad mit Tapatalk