[Neues Modul] BOSE SoundTouch

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

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

#480
Nachdem ich mir jetzt ein paar der Bose-Teile zugelegt habe, wurden sie natürlich sofort eingebunden.

Zum Modul: Gute Arbeit, Danke auch von meiner Seite.

Dokumentation des Moduls (räusper): Die Anleitung für die TTS-Installation im ersten Post des Threads ist ein wenig mager, und das Lesen aller 32 Seiten hat mein heutiges Zeitbudget etwas überschritten.


Edit: Nach ordnungsgemäßer Installation des miniDLNA macht TTS gar keine Probleme - und die Bose Soundtouch ist perfekt in mein Sprachausgabenetzwerk eingebunden (diverse wandhängende Tablets).


Einzig verbleibendes Problem ist noch, dass nach einem Neustart (bzw. dem nächtlichen Ausschalten) meiner NAS diese als "INVALID_SOURCE" erscheint - das wurde vor ca. 10 Seiten hier schon diskutiert, ohne dass es eine Lösung gegeben hat.


Mit dem Twonkyserver als DLNA-Server ist das jedenfalls so - und der hat den Vorteil, dass ich extern erzeugte Playlists im m3u-Format abspielen kann. Derzeit versuche ich das mit dem Plex Server zu umgehen, kann aber noch kein Resultat berichten.


LG

pah


dominik

Hi,
seit ein paar Tagen hat BOSE nun eine "Audio Notification API" mit der man angeblich jeglichen http Content abspielen kann. Ich werde das Modul also noch umbauen, dann erspart man sich minidlna und die ganze Einrichtung :)

Wie spielst du .m3u Playlisten ab? Das hat bislang bei mir nie funktioniert.

Gruß
Dominik
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Prof. Dr. Peter Henning

#482
Der Twonky-Server (ist bei mir optionaler Bestandteil der NAS-Software) erkennt m3u, und diese werden von der Soundtouch-App wunderbar unter "Wiedergabelisten" angezeigt. Sie sind auch Presetable, aber werden nach dem NAS-Neustart eben erst dann wiedergefunden, wenn man sie einmal in der App aufgerufen hat. Vorher als "INVALID_SOURCE" bezeichnet.

Das scheint aber kein Problem des Moduls zu sein. Denn auch mit den Hardware-Preset-Tasten am Gerät kann ich sie sie speichern, der Aufruf scheitert aber nach einem NAS-Neustart genauso, wenn die App nicht vorher angeworfen wurde.

Wen ich mir das genau ansehe, liegt das möglicherweise an der Art der Speicherung. Beim Plex-Server (ebenfalls optionaler Bestandteil der NAS) wird ein Musikstück auf den Presettasten beispielsweise als
ZitatLife In A Beautiful Light||0fa5917685fb00d5fd86|STORED_MUSIC|412fb986-b8f2-2a6d-6872-bb2bc5bed07f/0
gespeichert. Beim Twonkyserver wird eine Playlist beispielsweise als
ZitatWeckmusik||0$1$9$5881|STORED_MUSIC|55076f6e-6b79-1d65-a4eb-000000000509/0
abgelegt. Wofür stehen die Dollarzeichen ? Möglicherweise für einen Hinweis auf die Ebenen der Navigationsstruktur - und die muss offenbar erst geladen werden (aber wie ?)

Die Playlisten kann der Twonkyserver übrigens auch nicht selbst erstellen. Die habe ich extern mit einem Editor  zusammengebaut, Das ist ganz einfach, aber Fleißarbeit. Beim Plex-Server werden diese nicht erkannt, das entsprechende Playlistenformat kenne ich noch nicht und weiß auch nicht, wo die stehen.


LG

pah

Prof. Dr. Peter Henning

#483
Ich antworte mir mal selbst: Stimmt mit den Dollarzeichen. Ich habe nämlich noch einen dritten DLNA-Server ausprobiert, den MinimServer http://minimserver.com/

Hat erstens den Vorteil, dass er für alle Systeme frei verfügbar ist.

Zweiter Vorteil: Erkennt m3u Playlists und präsentiert diese in der Soundtouch App zur Auswahl - und sie sind "Presetable". Wenn man sie dann abspielt, werden die Metadaten korrekt im FHEM-Device angezeigt - und mit savechannel wird dann z.B., abgelegt:
ZitatWeckmusik||0$playlists$*p2|STORED_MUSIC|196abad4-673d-4149-9bba-ede06ae1cf86/0

Dritter Vorteil - ich bin ganz hin und weg: Sowohl mit den Hardware-Presettasten, als auch mit dem FHEM-Device lassen sich diese Playlists auch nach einem NAS-Neustart abspielen, ohne dass man erst die App bemüht.


Also nochmal die Erkenntnis: Als Speicherort meldet der Twonkyserver so etwas wie 0$1$9$5881 , und der Minimserver 0$playlists$*p2. Die Dollarzeichen stehen demanch wirklich für die Ebenen der Navigationsstruktur - und die ist beim Twonkyserver erst nach einem Aufruf der App vorhanden.

Der Plex-Server erkennt weder die m3u-Playlists, noch erkennt die Soundtouch-App die Plex-eigenen Playlists. Damit fliegt der Plex-Server gerade wieder herunter.

Für diejenigen, die nicht wissen, wie man von Hand eine m3u Playlist erstellt: Ganz einfach mit einem Texteditor die Dateinamen (nicht Songtitel) und Unterverzeichnisse eintragen. Beispiel:
#Weckmusik

Klassik/Johann Sebastian Bach/Italienisches Konzert/01_Allegro.mp3

Filmmusik/John_Carpenter__Starman.mp3



Sehr zufrieden in Moment.


LG

pah

Prof. Dr. Peter Henning

#484
Und noch ein dritter Post in Folge: Der smarte Wecker bekommt erst einmal testweise ein DOIF:


define Wecker_Bose DOIF
([[timeProfileC:wakeup]])
(set BOSE_50338B343509 volume 20)
(set BOSE_50338B343509 channel 20)
(set BOSE_50338B343509 volume 25)
(set BOSE_50338B343509 volume 30)
(set BOSE_50338B343509 volume 35)
(set BOSE_50338B343509 volume 40)

timeProfileC:wakeup ist ein Reading, in den die Weckzeit eingetragen wird. Dieses DOIF steigert die Lautstärke über 20 Sekunden von 20 auf 40. Achtung: Weil die Hardware aussteigt, wenn zwei Kommandos zu schnell hintereinander kommen, ist die gesamte Kommandosequenz in Teile zerlegt. Mit dem Attribut
attr Wecker_Bose wait 0,2,5,5,5,5
wird der zweite Teil um 2 Sekunden verzögert, der 3. und alle Weiteren um 5 Sekunden.

LG

pah

Eisix

Hallo,

Habe das am Anfang mit den Playlisten auch so gemacht das ich sie mit save Channel gespeichert habe.
Mittlerweile bin ich aber für Musik auf den Logitech Mediaserver umgestiegen und hänge die Bose Box auf den Stream über DLNA.
Sieht dann momentan aus wie im Anhang.

Gruß
Eisix

dominik

Ich habe heute mal die neue SoundTouch Audio Notification API ausprobiert. Damit ist TTS nun problemlos ohne minidlna möglich :)

Einzige zukünftige Einschränkung ist, dass damit sind nur "kurze" (max. 100 Zeichen) TTS Nachrichten möglich. Ich werde das Modul also so umbauen, dass kurze Nachrichten per Audio Notification API laufen und für längere Nachrichten weiterhin minidlna möglich ist.

Damit entfällt endlich die mühsame Einrichtung :)

Doorbell oder sowas wäre damit auch möglich, muss nur per http verfügbar sein.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Anbei eine erste Testversion mit der Bitte um Test.

Kein minidlna erforderlich für speak < 100 Zeichen.

Das Attribut ttsLanguage sollte auf "de" gesetzt werden damit Google Translate die deutsche Aussprache nutzt (Default: en).
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

travelling-man

Guten Abend,

erste Tests waren erfolgreich.
 
Super Arbeit, vielen Dank!

Wie kommt die Beschränkung von 100 Zeichen zustande?

VG
Basti

docb

Guten Morgen, bei mir funktioniert die neue Version mit dem TTS auch einwandfrei! Tip Top, vielen Dank!
I love FHEM!

dominik

100 Zeichen Beschränkung liegt daran, dass Google nicht mehr unterstützt.

Neue Version gerade eingecheckt :)
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Supadone

Hallo, nachdem jetzt ja kein minidlna mehr notwendig ist hab ich mich auch mal an TTS gewagt. Das Modul läuft sonst schon seit einem Jahr problemlos, danke dafür :)
Leider bekomme ich aber bei dem speak Befehl folgende Meldung bei verbose 5 im Log, hören tut man natürlich auch nichts:

BOSEST: success: <?xml version="1.0" encoding="UTF-8" ?><Error value="403" name="HTTP_STATUS_FORBIDDEN" severity="Unknown">unsupported device</Error>

Hab ich irgendwo etwas vergessen?

Supadone

Zwecks meiner Fehlermeldung hab ich festgestellt dass das Problem nur bei Modellen der Series II besteht. Bei Geräten der Series III klappt alles einwandfrei. Die installierte Firmware ist bei beiden Versionen identisch, solltest du für irgendwas eventuell einen Log benötigen stell ich mich zum testen natürlich zur Verfügung  ;)

geforce28

Hallo Zusammen.

Erstmal vielen Dank für das tolle Modul.
Ich steige noch nicht ganz dahinter, wie ich folgendes Umsetzen kann:

1) Ist es möglich eine Datei (oder alle Dateien in einem Ordner) direkt abzuspielen, wie eine MP3, FLAC, etc. mit Angabe des Pfads ?

2) Kann ich direkt, ohne Auswahl von Channels einen bestimmten Track, Radiosender, etc abspielen lassen ?

3) Wie kann ich an den Anfang eines Albums springen (1. Track) ?

Habt ihr Ideen ? Oder habe ich Funktionen übersehen ?

Vielen Dank im Voraus ! :)

Prof. Dr. Peter Henning

#494
Ich habe mit der neuen Version so meine Probleme. TTS ging mit sauber installiertem minidlna problemlos - jetzt aber geht gar nichts mehr. Hier das Log mit verbose 5 bei set .. speak "Test"

2018.01.04 12:31:01 5: BOSEST: run mojo loop
2018.01.04 12:31:01 5: BOSEST: finished mojo loop
2018.01.04 12:31:02 5: BOSEST: run mojo loop
2018.01.04 12:31:02 5: BOSEST: finished mojo loop
2018.01.04 12:31:02 5: BOSEST: run mojo loop
2018.01.04 12:31:02 5: BOSEST: finished mojo loop
2018.01.04 12:31:03 5: BOSEST: run mojo loop
2018.01.04 12:31:03 5: BOSEST: finished mojo loop
2018.01.04 12:31:04 5: BOSEST: run mojo loop
2018.01.04 12:31:04 5: BOSEST: finished mojo loop
2018.01.04 12:31:05 5: BOSEST: run mojo loop
2018.01.04 12:31:05 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:05 5: BOSEST: processXml:
$VAR1 = {
          'msg' => {
                   'header' => {
                               'request' => {
                                            'msgType' => 'RESPONSE',
                                            'requestID' => '1',
                                            'info' => {
                                                      'type' => 'new'
                                                    }
                                          },
                               'deviceID' => '50338B343509',
                               'method' => 'GET',
                               'url' => 'webserver/pingRequest'
                             },
                   'body' => {
                             'pingRequest' => {
                                              'pong' => 'true'
                                            }
                           }
                 }
        };

2018.01.04 12:31:05 5: BOSEST: finished mojo loop
2018.01.04 12:31:05 5: BOSEST: run mojo loop
2018.01.04 12:31:05 5: BOSEST: finished mojo loop
2018.01.04 12:31:06 5: BOSEST: run mojo loop
2018.01.04 12:31:06 5: BOSEST: finished mojo loop
2018.01.04 12:31:07 5: BOSEST: run mojo loop
2018.01.04 12:31:07 5: BOSEST: finished mojo loop
2018.01.04 12:31:07 5: BOSEST: run mojo loop
2018.01.04 12:31:07 5: BOSEST: finished mojo loop
2018.01.04 12:31:08 5: BOSEST: run mojo loop
2018.01.04 12:31:08 5: BOSEST: finished mojo loop
2018.01.04 12:31:09 5: BOSEST: run mojo loop
2018.01.04 12:31:09 5: BOSEST: finished mojo loop
2018.01.04 12:31:09 5: BOSEST: run mojo loop
2018.01.04 12:31:09 5: BOSEST: finished mojo loop
2018.01.04 12:31:10 5: BOSEST: run mojo loop
2018.01.04 12:31:10 5: BOSEST: finished mojo loop
2018.01.04 12:31:11 5: BOSEST: run mojo loop
2018.01.04 12:31:11 5: BOSEST: finished mojo loop
2018.01.04 12:31:12 5: BOSEST: run mojo loop
2018.01.04 12:31:12 5: BOSEST: finished mojo loop
2018.01.04 12:31:12 4: BOSEST: set /speaker => <play_info><app_key>Ml7YGAI9JWjFhU7D348e86JPXtisddBa</app_key><url>http://translate.google.com/translate_tts?ie=UTF-8&tl=de&client=tw-ob&q=Test</url><service>Test</service><volume>40</volume></play_info>
2018.01.04 12:31:13 4: BOSEST: success: <?xml version="1.0" encoding="UTF-8" ?><status>/speaker</status>
2018.01.04 12:31:13 5: BOSEST: run mojo loop
2018.01.04 12:31:13 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:13 5: BOSEST: processXml:
$VAR1 = {
          'userActivityUpdate' => {
                                  'deviceID' => '50338B343509'
                                }
        };

2018.01.04 12:31:13 4: BOSEST: Unknown event, please implement:
$VAR1 = {
          'userActivityUpdate' => {
                                  'deviceID' => '50338B343509'
                                }
        };

2018.01.04 12:31:13 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:13 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'deviceID' => '50338B343509',
                       'nowPlayingUpdated' => {
                                              'nowPlaying' => {
                                                              'artist' => 'Test',
                                                              'track' => {},
                                                              'album' => {},
                                                              'deviceID' => '50338B343509',
                                                              'playStatus' => 'BUFFERING_STATE',
                                                              'skipEnabled' => {},
                                                              'skipPreviousEnabled' => {},
                                                              'stationName' => {},
                                                              'source' => 'NOTIFICATION',
                                                              'sourceAccount' => '',
                                                              'art' => {
                                                                       'artImageStatus' => 'SHOW_DEFAULT_IMAGE'
                                                                     }
                                                            }
                                            }
                     }
        };

2018.01.04 12:31:13 5: BOSEST: parseAndUpdateNowPlaying
2018.01.04 12:31:13 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:13 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'deviceID' => '50338B343509',
                       'volumeUpdated' => {
                                          'volume' => {
                                                      'targetvolume' => '40',
                                                      'actualvolume' => '40',
                                                      'muteenabled' => 'false'
                                                    }
                                        }
                     }
        };

2018.01.04 12:31:13 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:13 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'deviceID' => '50338B343509',
                       'nowPlayingUpdated' => {
                                              'nowPlaying' => {
                                                              'artist' => 'Test',
                                                              'track' => {},
                                                              'album' => {},
                                                              'deviceID' => '50338B343509',
                                                              'playStatus' => 'PLAY_STATE',
                                                              'skipEnabled' => {},
                                                              'skipPreviousEnabled' => {},
                                                              'stationName' => {},
                                                              'source' => 'NOTIFICATION',
                                                              'sourceAccount' => '',
                                                              'art' => {
                                                                       'artImageStatus' => 'SHOW_DEFAULT_IMAGE'
                                                                     }
                                                            }
                                            }
                     }
        };

2018.01.04 12:31:13 5: BOSEST: parseAndUpdateNowPlaying
2018.01.04 12:31:13 5: BOSEST: finished mojo loop
2018.01.04 12:31:14 5: BOSEST: run mojo loop
2018.01.04 12:31:14 5: BOSEST: finished mojo loop
2018.01.04 12:31:15 5: BOSEST: run mojo loop
2018.01.04 12:31:15 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:15 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'deviceID' => '50338B343509',
                       'nowPlayingUpdated' => {
                                              'nowPlaying' => {
                                                              'album' => {},
                                                              'deviceID' => '50338B343509',
                                                              'playStatus' => 'STOP_STATE',
                                                              'skipEnabled' => {},
                                                              'artist' => 'Test',
                                                              'track' => {},
                                                              'art' => {
                                                                       'artImageStatus' => 'SHOW_DEFAULT_IMAGE'
                                                                     },
                                                              'skipPreviousEnabled' => {},
                                                              'stationName' => {},
                                                              'source' => 'NOTIFICATION',
                                                              'sourceAccount' => ''
                                                            }
                                            }
                     }
        };

2018.01.04 12:31:15 5: BOSEST: parseAndUpdateNowPlaying
2018.01.04 12:31:15 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:15 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'nowPlayingUpdated' => {
                                              'nowPlaying' => {
                                                              'deviceID' => '50338B343509',
                                                              'source' => 'STANDBY',
                                                              'ContentItem' => {
                                                                               'isPresetable' => 'true',
                                                                               'source' => 'STANDBY'
                                                                             }
                                                            }
                                            },
                       'deviceID' => '50338B343509'
                     }
        };

2018.01.04 12:31:15 5: BOSEST: parseAndUpdateNowPlaying
2018.01.04 12:31:15 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:15 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'deviceID' => '50338B343509',
                       'volumeUpdated' => {
                                          'volume' => {
                                                      'muteenabled' => 'false',
                                                      'actualvolume' => '40',
                                                      'targetvolume' => '40'
                                                    }
                                        }
                     }
        };

2018.01.04 12:31:15 5: BOSEST: BOSE_50338B343509, received message.
2018.01.04 12:31:15 5: BOSEST: processXml:
$VAR1 = {
          'updates' => {
                       'nowPlayingUpdated' => {
                                              'nowPlaying' => {
                                                              'deviceID' => '50338B343509',
                                                              'ContentItem' => {
                                                                               'isPresetable' => 'true',
                                                                               'source' => 'STANDBY'
                                                                             },
                                                              'source' => 'STANDBY'
                                                            }
                                            },
                       'deviceID' => '50338B343509'
                     }
        };

2018.01.04 12:31:15 5: BOSEST: parseAndUpdateNowPlaying
2018.01.04 12:31:15 5: BOSEST: finished mojo loop
2018.01.04 12:31:15 5: BOSEST: run mojo loop
2018.01.04 12:31:15 5: BOSEST: finished mojo loop


LG

pah