Sonos steuern

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

Vorheriges Thema - Nächstes Thema

RadioJames

#2610
Hallo Reinerlein,

Zitat@James:
du könntest die Zeile 309 (die mit der Loading-Device-Fehlermeldung) in folgendes umschreiben:
Code: [Auswählen]

carp("Loading device description failed with error: " . $response->code . " " . $response->message . ' (Location: ' . $location . ')') if ($response->code != 200);

Damit erhältst du eine Angabe der Ziel-IP-Adresse, und kannst diese u.U. auf die Ignored-Liste setzen...

Danke schön, hab den bzw. einen der Übeltäter erwischt. Es ist mein Sat-Receiver.
Habe die IP, wie von dir geraten, im SONOS Device unter dem Attribut ignoredIPs gespeichert. Jetzt sollte Ruhe sein  :)
Die entsprechende Stelle im Wiki hab ich inzwischen auch gefunden.

@Fixel2012:
Es ist Zeile 309 im Modul 'ControlPoint.pm' (Funktion '_createDevice'), die du ändern musst. Das Modul befindet sich im Ordner '/opt/fhem/FHEM/lib/UPnP'

Grüße James
There are 10 kind of people. Those who understand binary and those who don't.

Fixel2012

Zitat von: RadioJames am 18 Dezember 2016, 21:03:11
Hallo Reinerlein,

Danke schön, hab den bzw. einen der Übeltäter erwischt. Es ist mein Sat-Receiver.
Habe die IP, wie von dir geraten, im SONOS Device unter dem Attribut ignoredIPs gespeichert. Jetzt sollte Ruhe sein  :)
Die entsprechende Stelle im Wiki hab ich inzwischen auch gefunden.

@Fixel2012:
Es ist Zeile 309 im Modul 'ControlPoint.pm' (Funktion '_createDevice'), die du ändern musst. Das Modul befindet sich im Ordner '/opt/fhem/FHEM/lib/UPnP'

Grüße James

Danke euch beiden!

Das Problem verursachte ein Router im ersten Stock...

Habe nun auch das Attribut ignoredIps gesetzt, mal schauen ob geholfen hat!

Grüße Felix
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Reinerlein

Hi,

schön, dass die Log-Ausgabe geholfen hat. Ich habe sie auch in den Code übernommen, sodass auch andere in Zukunft diese Info vorfinden werden...

Grüße
Reinerlein

Tobias

Hi,
Auf meinem FHEM-Server sind auch iptables aktiviert da noch jede Menge anderes Zeugs drauf läuft und dieser Von Außen zugänglich ist.
Problem ist nun, das mit aktivierten IP-Tables die Sonos Connection gestört ist. Ohne aktivierte IPTables wird mein Player bei einem RescanNetwork sofort gefunden, auch alle Steuerungen zum Player funktionieren.
Mit aktivierten IPTables funktioniert beides nicht. Irgendwann steht der Player auf disappered.

Da ich in den letzten Tagen an FHEM geschraubt und geupdated habe vermute ich, das am SonosModul was geändert wurde denn bis vor ein paar Tagen hat es mit den IPTables problemlos funktioniert.

Also ist die Preisfrage: Was muss ich in den IPTables eintragen?
In /etc/default/iptables habe ich zb. solche Einträge:
# smtp, submission
-A INPUT -p tcp --dport 25 -j ACCEPT
-A INPUT -p tcp --dport 587 -j ACCEPT

# pop3, pop3s
-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT

# imap, imaps
-A INPUT -p tcp --dport 143 -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPT


Laut Sonos wird mit diesen Protokollen/Ports gearbeitet. Was benötigt davon FHEM? Wie lautet der korrekte Eintrag?
https://sonos.custhelp.com/app/answers/detail/a_id/692/~/configuring-your-firewall-to-work-with-sonos
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Wuppi68

Du musst noch den Multicast auf 239.255.255.250:1900 aufmachen (wikipedia upnp)
FHEM unter Proxmox als VM

Tobias

#2615
ok, verstanden... und wie müsste dann der korrekte iptables Eintrag aussehen ohne etwas kaputt bzw Tür- und Tor zu öffnen?
zb: -A INPUT -s 239.255.255.250/24 -p udp -m udp --dport 1900 -j ACCEPT

reicht das dann? Wer nutzt noch iptables??
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Wuppi68

Zitat von: Tobias am 20 Dezember 2016, 12:32:25
ok, verstanden... und wie müsste dann der korrekte iptables Eintrag aussehen ohne etwas kaputt bzw Tür- und Tor zu öffnen?
zb: -A INPUT -s 239.255.255.250/24 -p udp -m udp --dport 1900 -j ACCEPT

reicht das dann? Wer nutzt noch iptables??

Du ;-)

das Discovery findet über den Port statt, worauf der dann entsprechend antwortet kann ich Dir auch nicht sagen :-) Sollten aber bestimmt genügend Beispiele im Niet zu googeln sein

https://en.community.sonos.com/advanced-setups-229000/sonos-with-homemade-linux-routerbridge-11848

Ansonsten Logging anwerfen und schauen welche Pakete geblockt werden
FHEM unter Proxmox als VM

Tobias

So, jetzt hab ich es hinbekommen... in /etc/default/iptables bzw /etc/sysconfig/iptables muss folgendes drinstehen:

# Sonos Kommunikation
-A INPUT -m pkttype --pkt-type multicast -j ACCEPT
-A INPUT -s 224.0.0.0/8 -j ACCEPT

# alles im lokalen LAN
-A INPUT -s 192.168.0.0/16 -j ACCEPT


Wär was fürs Wiki ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

Hi,
ich habe hier ein komisches Problem...
Ich habe meine Musiksammlung im NAS und über meinen Webserver im lokalen Netz freigegeben.
Meine Playlist liegt im cache Verzeichnis von fhem und sieht zb so aus:
http://192.168.10.30/music/Deutsch/Ich&Ich_-_Vom_Selben_Stern/Ich_und_Ich__-__Ich_atme_ein,_ich_atme_aus.mp3
Meinen Sonosplayer starte ich an mit: set <player> StartPlaylist file:cache/playlist.m3u

Allerdings wird nichts abgespielt :(

Liegt in der Playlist dieser Pfad vor, wird die playlist korrekt abgespielt:
\\NAS/music/Deutsch/Ich&Ich_-_Vom_Selben_Stern/Ich_und_Ich__-__Ich_atme_ein,_ich_atme_aus.mp3

Der über den Webserver freigegebene Datei wird auf meinem Laütop sauber  geladen und abgespielt.
Aufgefallen ist noch, das der Sonos "currentTrackProvider" von "Bibliothek" auf "Radio" springt. Ev. hängt es damit auch zusammen.

Ist das ein kleiner Bug im Sonos Modul?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Reinerlein

Hallo Tobias,

da die Playliste nicht von Sonos selbst verstanden wird, interpretiere ich die selber.
Dabei sind Einträge die mit "http://" beginnen automatisch Streams.

Als Grundlage kann hier das Verhalten bei PlayURI herangezogen werden, da diesselben Erkennungsprozeduren verwendet werden...
Das Sonos-System basiert auf Windows-UNC-Freigaben für direktes Abspielen von Dateien und http-Streams für Radiostreams...

Grüße
Reiner

Tobias

Hallo Rainer, danke für die Antwort.
Das heißt also das das Sonsos System die per http bereitgestellten dateien garnicht abspielen kann?

Ok, dann muss in meinem MediaList Modul bzgl den Pfadumformatierungen von fhem-lokalen Pfad zu MP3 Datei und Cover unterscheiden.
Eine jpg Datei kann ich in tabletUI nicht mit UNC Freigabe einbinden.. ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

bruece-lee

Hallo,

ich hätte noch eine Frage zur Sprachausgabe und hoffe, dass mir jemand mit Linux-Kenntnissen weiterhelfen kann.
Ich nutze derzeit die Sprachausgabe wie im Wiki beschrieben und die funktioniert erstmal prima. Speak1 ist wie folgt definiert:

mp3:/usr/bin/espeak -v %language% --stdout "%text%" | /usr/bin/avconv -i - %filename%

Nun habe ich pico2wave getestet und finde, dass die Stimme natürlicher und freundlicher klingt und würde gerne darauf wechseln. Was ist bereits erfolgreich hinbekommen habe, ist die Installation und eine Sprachausgabe mittels .wav-Datei unter Speak2:

wav:/usr/bin/pico2wave --lang %language% --wave %filename% "%text%"

Kann mir jemand einen Tipp geben, wie ich das Wav-File in ein Mp3 File umwandeln kann wie im oberen Beispiel mit espeak? Das Problem was ich sehe ist, dass pico2wave den umgewandelten Text nur direkt in eine .wav-Datei schreiben und das Ergebnis nicht auf "stout" ausgeben kann. Somit kann ich den Pipe Operator nicht einfach benutzen oder habe ich da einen Denkfehler?

Gibt es jemanden, der pico2wave in Kombination mit avconv bereits im Einsatz hat?

Danke und Gruß,
Bruece-Lee

speex

Hi Bruece-lee

ich habe einen ähnlichen Anwendungsfall in zusammenhang mit Telegram um Sprachnachrichten zuhause über Sonos auszugbeen.

Telegram Sprachnachrichten sind im ogg Format deshalb bin ich mir nicht sicher ob der avconv auzch wav files packt, lange rede kurzer sinn.

Zuerst gibt es bei mir ein Notify das auf Telegram reagiert wenn ich dort eine Sprachnachricht hinschicke:
teleBot:msgText:.received.voice.* {
  my $folder = "/opt/fhem/SonosSpeak/";
  my $fhemip = "192.168.1.119/SonosSpeak/";
  my $url = fhem("get $NAME urlForFile ".ReadingsVal($NAME, 'msgFileId', ''));
  my $fileName = "${NAME}_$1" if ($url =~ m/.*\/(.*)/);
  my $newFileName = "$1.mp3" if ($fileName =~ m/(.*)\..*/);

  writeFile($folder.$fileName, get($url));
  qx(/usr/bin/avconv -i $folder$fileName $folder$newFileName);
  fhem('set '.ReadingsVal($NAME, 'currentSpeakPlayer', 'Sonos_Epizentrum').' PlayURITemp \\\\'.$fhemip.$newFileName.' '.ReadingsVal($NAME, 'currentSpeakVolume', 35));
}


Die Variablen $fhemip und $folder an die eigenen Gegenbenheiten anpassen sowie Sonos_Epizentrum.

In der 99_myutils habe ich dann noch folgende sub die die datei als mp3 schreibt.

# Telegram sprachnachrichten schreib prozedur
sub writeFile($$) {
my ($fileName, $data) = @_;

open IMGFILE, '>'.$fileName;
binmode IMGFILE;
print IMGFILE $data;
close IMGFILE;
}


Ich muss gestehen ich hab mir das hier selber zusammengepfuscht im forum und wenn es da verbesserungen gibt immer her damit. :)

Du musst das auf jeden fall auf deine Bedürfnisse anpassen aber dann sollte es m.E. kein problem sein die wav. dateien in mp3`s umzuwandeln.

Beste Grüße und viel erfolg :)

bruece-lee

Hallo speex,

vielen Dank für die ausführliche Beschreibung! Ich bin noch gar nicht auf die Idee gekommen, Sonos mit Telegram zu verbinden.... Sollte ich auch mal drüber nachdenken, guter Ansatz  :D

Was ich derzeit mache ist aber eigentlich noch eine Spur einfacher. Ich möchte eine simple text2speech Ausgabe erzeigen und dafür die Speak-Funktion benutzen.
Entscheident dafür ist, dass im Sonos Player Modul das Attribut speak1, speakt2..etc korrekt gesetzt ist, im Beispiel von espeakt wie oben angegeben mit:

mp3:/usr/bin/espeak -v %language% --stdout "%text%" | /usr/bin/avconv -i - %filename%

Dann reicht ein set sonos_wohnzimmer speak1 40 -vde "zu sprechender Text" für die Erzeugung einer .wav-Datei, die Umwandlung in Mp3 und das Abspielen. Leider habe ich noch nicht verstanden, wie ich am Beispiel von pico2wave das avconv mit in die Attribut Definition bekomme.

Sollte das nicht funktionieren, werde ich versuchen, Deine Logik für meine Zwecke umzubauen oder muss damit leben, dass der Text nur als .wav umgewandelt wird.

Viele Grüße, Bruece-lee

Reinerlein

Hi Bruece-lee,

hast du es schon mal mit der Stdout-"Datei" versucht?
Also:

mp3:/usr/bin/pico2wave --lang %language% --wave /dev/stdout "%text%" | /usr/bin/avconv -i - %filename%


Alternativ kannst du auch über eine temporäre Datei gehen:

mp3:/usr/bin/pico2wave --lang %language% --wave /tmp/speak1.wav "%text%" && /usr/bin/avconv -i /tmp/speak1.wav %filename%
würde aber die Pipe bevorzugen...

Grüße
Reiner