[Neues Modul] BOSE SoundTouch

Begonnen von dominik, 05 Januar 2016, 22:28:40

Vorheriges Thema - Nächstes Thema

FlatTV

Ist bei mir auch so, konnte das nicht weiter prüfen.
2026.05.27 19:38:21 3: BOSEST: failed: 500 Internal Server Error
Raspi4 - im wesentlichen mit Phoscon, HomeMatic ( aktuell über debmatic), CUL, BOSE-ST und Alexa (Connector)

fred_feuerstein

Danke für den Check der Speak Funktion.

Dann liegt also kein lokales Problem bei mir vor.

Also liegt ein Problem bei der Google TTS Abfrage vor. Ich versuche mal herauszufinden wie das genau abgefragt wird im modulcode. Vielleicht kann man es extern prüfen und ggfs. mehr Infos herausbekommen.

Aber normalerweise sind die 500er Fehler ja Serverbasiert...
Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

fred_feuerstein

#872
wegen der nicht funktionierenden Speak-Funktion.

Denke hier im Modul erfolgt das mit der Sprachausgabe:
sub BOSEST_speak($$$$$) {
    my ($hash, $text, $volume, $lang, $stopAfterSpeak) = @_;

    $lang = AttrVal($hash->{NAME}, "ttsLanguage", "en") if($lang eq "");
    $volume = AttrVal($hash->{NAME}, "ttsVolume", ReadingsVal($hash->{NAME}, "volume", 20)) if($volume eq "");

    if(length($text) < 100) {
       my $uri_text = uri_escape($text);
       my $translateUrl = "http://translate.google.com/translate_tts?ie=UTF-8&tl=$lang&client=tw-ob&q=$uri_text";
       $translateUrl =~ s/\&/\&amp\;/g;

       if(substr($volume, 0, 1) eq "+" or
          substr($volume, 0, 1) eq "-") {
           $volume = ReadingsVal($hash->{NAME}, "volume", 0) + $volume;
       }

       my $postXml = '<play_info><app_key>Ml7YGAI9JWjFhU7D348e86JPXtisddBa</app_key><url>'.$translateUrl.'</url><service>'.$text.'</service><volume>'.$volume.'</volume></play_info>';
       if(BOSEST_HTTPPOST($hash, '/speaker', $postXml)) {
       }

       if(defined($stopAfterSpeak) && $stopAfterSpeak eq "1") {
           $hash->{helper}{stateCheck}{enabled} = 1;
           #after play the speaker changes contentItemItemName
           $hash->{helper}{stateCheck}{actionContentItemItemName} = "";
           $hash->{helper}{stateCheck}{function} = \&BOSEST_off;
       }

       return undef;
    }
   
   
    my $ttsDir = AttrVal($hash->{NAME}, "ttsDirectory", "");
   
    my $sox = qx(which sox);
    chomp $sox;
    if(!-x $sox) {
        BOSEST_playGoogleTTS($hash, $ttsDir, $BOSEST_READ_CMDREF_TEXT, $volume, $BOSEST_READ_CMDREF_LANG, $stopAfterSpeak);
        return undef;
    }
   
    #download file and play
    BOSEST_playGoogleTTS($hash, $ttsDir, $text, $volume, $lang, $stopAfterSpeak);
   
    return undef;
}

Da ist ja auch ein app_key enthalten. Evtl. hat es damit was zu tun? Abgelaufen?

Hat da jemand mehr Ahnung von als ich?

Ich habe die im Code stehende Abfrage-Url von Google mal manuell getestet. Also der TTS von Google funktioniert.
es scheitert dann wohl beim abspielen der Rückmeldung mit diesem Play und AppKey.
Keine Ahnung wie das abgespielt wird oder was das für ein key ist. Somit kann ich auch nicht schauen ob der key evtl. nicht mehr gültig ist etc.
Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

fred_feuerstein

#873
Also ich habe (zusammen mit ChatGPT) an drei Stellen im 98_BOSEST.pm Modul (letzter Stand Version 3.00 aus dem FHEM Update vom 30.06) Änderungen vorgenommen.

Damit läuft der Speak Befehl im Modul wieder.

Die Annahme, dass es nicht an Google lag, war wohl korrekt! Bei einem "set BOSEDEVICE speak ..." wurde das scheinbar über einen Bose-Dienst dann direkt auf dem Lautsprecher abgespielt, deshalb dieser appkey (etc.).

Voraussetzung ist nun ein aktiver und funktionsfähiger minidlna (bei mir auf dem gleichen Raspberry wie fhem).
Und der minidlna (bei mir als Name: fhem_tts) muss vom Lautsprecher aus als source erreichbar sein.

Wenn nun ein speak Befehl abgesetzt wird, dann erfolgt die Konvertierung über Google (wie bisher), die mp3 wird im tts Directory gespeichert, kurze Pause von 5 Sekunden um dem minidlna die Zeit zum indizieren zu geben, dann wird die mp3 auf dem Lautsprecher abgespielt. Nach Abspielen der tts mp3 wird wie bisher wieder zum vorigen Zustand gewechselt, also der bisherige Stream, oder falls ausgeschaltet war, wird die Box auch wieder ausgeschaltet.

Hier die drei Änderungen:

im "sub BOSEST_speak":
statt
if(length($text) < 100) {nun
# Bose Cloud TTS wurde im Mai 2026 abgeschaltet.
# Der ursprüngliche Cloud-Weg (1. Pfad) bleibt aus Dokumentationsgründen erhalten,
# wird aber deaktiviert durch folgende Änderung if(0 && ...
if(0 && length($text) < 100) {


im "sub BOSEST_HTTPPOST":
statt
my $ua = LWP::UserAgent->new();nun
# mit der kaputten BOSEST_speak Funktion hat sich fhem teilweise aufgehängt,
# nun timeout von 5 Sekunden aus Sicherheitsgründen.
my $ua = LWP::UserAgent->new(timeout => 5);


im "sub BOSEST_playMessageStringArg":

komplett tauschen von bisher:
sub BOSEST_playMessageStringArg {
    my ($name) = @_;
    my $hash = $main::defs{$name};
   
    BOSEST_playMessage($hash, "v1_".$hash->{helper}{tts}{fulltextmd5}, $hash->{helper}{tts}{volume}, $hash->{helper}{tts}{stopAfterSpeak});
   
    return undef;
}
auf jetzt:
sub BOSEST_playMessageStringArg {
    my ($name) = @_;

    InternalTimer(
        gettimeofday()+5,
        "BOSEST_playMessageStringArgDelayed",
        $name,
        0
    );

    return undef;
}

sub BOSEST_playMessageStringArgDelayed($) {
    my ($name) = @_;
    my $hash = $main::defs{$name};

    BOSEST_playMessage(
        $hash,
        "v1_".$hash->{helper}{tts}{fulltextmd5},
        $hash->{helper}{tts}{volume},
        $hash->{helper}{tts}{stopAfterSpeak}
    );

    return undef;
}

im ttsDirectory landen nun die ganzen mp3s, das kann u.U. recht viel werden, je nachdem, wie viele Speak Befehle man absetzt. (bei mir recht viele Meldungen tagsüber ;) ). Deshalb lasse ich die beiden Varianten der mp3s per cron nachts löschen:
15 3 * * * rm -f /opt/fhem/tts/[0-9a-f]*.mp3 && rm -f /opt/fhem/tts/v1_*.mp3
Ist alles so seit gestern wieder am Laufen.

Kenne mich mit Git usw. nicht so gut aus. Deswegen die Änderungen hier gemeldet.

Zitat von: Prof. Dr. Peter Henning am 26 Mai 2026, 17:24:10Ich hänge immer noch damit hinterher, das neue Modul regulär einzuchecken. Bitte um Nachsicht, aber mein neues Buchmanuskript hat in 3 Wochen Abgabetermin, das geht derzeit vor.
LG
pah

Vielleicht kannst Du die Änderungen siehe oben berücksichtigen fürs offizielle Release.


Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

betateilchen

Zitat von: fred_feuerstein am 02 Juli 2026, 13:28:20if(0 && length($text) < 100) {durch diese Änderung wird u.a. die mp3 gespeichert

Kannst Du mir bitte erklären, was dieser logische Vergleich bewirken soll?

Zitat von: fred_feuerstein am 02 Juli 2026, 13:28:20Vielleicht kannst Du die Änderungen siehe oben berücksichtigen fürs offizielle Release.

Hast Du mitbekommen, dass am 30.06. das Modul offiziell neu released und im regulären FHEM update verteilt wurde?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fred_feuerstein

#875
Erklären kann ich es nicht. Allerdings wird ohne den Vergleich bei mir keine mp3 vom Google response gespeichert.
>> Erklärung 3 Beiträge weiter unten ;)

Und nein, ich habe nicht mitbekommen, dass das Modul nun im regulären Update dabei ist.

Wo hätte ich das sehen können?

Bzw. wer pflegt das Modul nun und wie und wo kann man etwas dazu melden? Denke, es ist hier im Thread ok, oder?
Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

betateilchen

Naja, ein logischer Vergleich auf "falsch UND irgendwas anderes" wird halt immer ein "falsch" ergeben. Und 0 bedeutet per se "falsch".

Wo hättest Du das sehen können? Mehrere Möglichkeiten...

-> in einem regulären update: das Modul wird in der update-Liste angezeigt
-> alternativ hier: https://forum.fhem.de/index.php?board=57.0 da werden alle svn commits gesammelt dokumentiert: https://forum.fhem.de/index.php?topic=145025.0

Wer pflegt das? Da pah das eingecheckt hat, vermutlich pah.

Wo kann man Meldungen dazumachen? Solange die MAINTAINER.txt nix anderes sagt, würde ich wie bisher in Multimedia posten.

@pah: magst Du bitte die MAINTAINER.txt noch pflegen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

Zitat von: fred_feuerstein am 02 Juli 2026, 18:03:28Bzw. wer pflegt das Modul nun und wie und wo kann man etwas dazu melden? Denke, es ist hier im Thread ok, oder?

Ich. Und ja, hier im Thread ist ok. Ich schau mal, ob ich das einbauen und testen kann - wird aber wegen Urlaub etwa eine Woche dauern.

LG

pah

fred_feuerstein

Wegen dem "0 && irgendwas..."

Habe mir den Code nochmal angeschaut.
im sub Speak gibt es 2 Pfade.

if(length($text) < 100) {
    ...
    # kurzer Text
    # Google-TTS direkt / Cloud-Weg
}
else {
    ...
    # MP3 erzeugen
    # über DLNA abspielen
}

durch die Änderung wird der 1. Pfad über die bose cloud nie mehr ausgewählt, da nicht mehr möglich.
stattdessen immer der mp3 / dlna weg.

War die einfachste Änderung, ohne den ganzen Code für Pfad 1 gleich wegzuwerfen.
ist ja quasi noch Testphase :)
Gruß, Fred

NEU: FHEM auf Raspberry PI 5, OS: Bookworm, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art