Sonos steuern

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

Vorheriges Thema - Nächstes Thema

Andy89

dann wirst du keine docker-compose Datei haben.

aber auch per cmd / Portainer gibst du den verschiedenen Dockern Parameter mit, oder? Was war dann der ausschlaggebende Punkt, so dass die MP3s erstellt wurden?
Ich habe gefühlt alle möglichen Konfigrationen durchprobiert, die im Forum oder im Netz beschrieben werden. Den Sonos Docker habe ich dabei nie betrachtet, da die Datei ja schon im fhem Docker mit dem sonos Device nicht erstellt wird.

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

Thomas41587

Meine Einrichtung der Container ist zwar schon ein paar Tage her, sodass die Erinnerungen nicht ganz frisch sind, aber: als fhem container läuft der "offizielle" docker build (fhem/fhem:latest), als fhem_sonos_standalone habe ich folgendes genutzt (bin mir nicht mehr sicher, woher ich das kopiert hatte):

FROM debian:stretch
ENV DEBIAN_FRONTEND noninteractive
ENV TERM xterm

# Install base environment
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends apt-utils
RUN apt-get -y install \
apt-transport-https \
build-essential \
curl \
cpanminus \
dfu-programmer \
etherwake \
git \
netcat \
perl \
snmp \
snmpd \
sqlite3 \
sudo \
telnet \
usbutils \
vim \
wget && \
apt-get -y install \
libwww-perl \
libsoap-lite-perl \
libxml-parser-lite-perl

EXPOSE 4711

WORKDIR "/opt/fhem/FHEM"

CMD perl 00_SONOS.pm 4711 3 1


Und in dem fhem_sonos_standalone habe ich dann als volume den Pfad meines docker hosts angegeben, der auf den "original" fhem container verweist (ja ich weiß, so macht mans eigentlich nicht, aber es funkioniert).
Zuletzt wurde (wieder im fhem_sonos_standalone) der host pfad /media/sonos (welcher über samba für "jeden" freigegeben wurde) auf den docker Pfad /opt/fhem/SonosSpeak gemountet. Fertig :)
Und mein Fehler war, dass ich den letzten Punkt auf dem "haupt" fhem container gemacht habe anstatt auf dem fhem_sonos_standalone.

Thomas41587

Gibt es eigentlich eine Möglichkeit, ohne Umwege eine Spotify Playlist zu starten? Die "url" einer Spotify-Playlist bekommt man ja über die Desktop Anwendung raus. Aber versucht man dann z.B. ein "set Sonos_Bad PlayURI spotify:playlist:37i9dQZF1DWUW2bvSkjcJ6" bekommt man zwar "LastActionResult - PlayURI: Success!", aber die Wiedergabe mit dem alten Track läuft munter weiter.
Mein aktueller "Umweg" besteht darin, die Playlist in "Mein Sonos" zu speichern und dann abzuspielen. Leider ist das ja nur eine Momentaufnahme dessen, was die Spotify Playlist enthält.

Andy89

Zitat von: Thomas41587 am 22 November 2019, 15:17:06
Und in dem fhem_sonos_standalone habe ich dann als volume den Pfad meines docker hosts angegeben, der auf den "original" fhem container verweist (ja ich weiß, so macht mans eigentlich nicht, aber es funkioniert).
Zuletzt wurde (wieder im fhem_sonos_standalone) der host pfad /media/sonos (welcher über samba für "jeden" freigegeben wurde) auf den docker Pfad /opt/fhem/SonosSpeak gemountet. Fertig :)
Und mein Fehler war, dass ich den letzten Punkt auf dem "haupt" fhem container gemacht habe anstatt auf dem fhem_sonos_standalone.
Für den fhem-sonos-Docker habe ich das gleiche Dockerfile.
Ich habe es jetzt auch endlich hinbekommen. ich glaube, ich hatte mehrere Probleme, welche nun mit deinen Hilfen behoben sind. Danke  :) :) :) :) :) :)

Falls noch jemand das Problem haben sollte, hier die wichtigsten Einstellungen.

fhem sonos-device:
attr Sonos targetSpeakDir /opt/fhem/SonosSpeak
attr Sonos targetSpeakURL \\192.168.xxx.xxx\SonosSpeak   #ip und ordner vom samba-ordner


docker-compose.yml

version: '2.0'
services:
############################################################################
# Service: FHEM
############################################################################
  fhem:
    container_name: fhem
    image: fhem/fhem:latest
    restart: always
    network_mode: host
    #networks:
    #  - fhem-network
    ports:
      - "8083:8083"
      - "4711"
    volumes:
      - ./fhem/:/opt/fhem/
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    depends_on:
      - "fhem_sonos"

############################################################################
# Service: Portainer
############################################################################
  portainer:
      container_name: fhem_portainer
      image: portainer/portainer:latest
      restart: always
      networks:
        - fhem-network
      ports:
          - "9000:9000"
      volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - ./portainer/data:/data

############################################################################
# FTUI
############################################################################
  fhem_tabletui:
    container_name: fhem_tabletui
    image: raigen/fhem-tablet-ui:rpi-alpine
    volumes:
      - ./fhem_tabletui/ftui/flex/:/usr/share/nginx/html/tablet/
    ports:
      - "80:80"

############################################################################
# Service: FHEM SONOS
############################################################################
  fhem_sonos:
    container_name: fhem_sonos
    hostname: fhem_sonos
    build: fhem_sonos
    restart: always
    volumes:
      - ./fhem/:/opt/fhem/
      - ./SonosSpeak/:/opt/fhem/SonosSpeak/
    network_mode: host

############################################################################
# Service: Samba Freigabe
############################################################################
  samba:
    container_name: fhem_samba
    restart: always
    image: dperson/samba:rpi
    ports:
      - "139:139"
      - "445:445"
    environment:
      TZ: "Europe/Berlin"
      SHARE: "SonosSpeak;/mnt/SonosSpeak;yes;no;yes;"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./SonosSpeak/:/mnt/SonosSpeak/:z
    network_mode: host

networks:
  fhem-network:
    driver: "bridge"

das ganze läuft auf einen neuen raspberryPi 4 mit "Raspbian GNU/Linux 10 (buster)"  ;)
da das ja nun geht, werde ich demnächst nach und nach die host-Rechte wegnehmen und ins bridge Netzwerk übergehen. Aber zum Testen war das so einfacher.

Danke nochmal  :) :)

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

hoppel118

Moinsen,

habe mal eine Frage dazu: Warum lasst ihr das Sonos Modul in einem zusätzlichen FHEM Container laufen?

Ich nutze seit mittlerweile fast 2 Jahren Docker und FHEM ist aufgrund der vielen Abhängigkeiten noch nicht in einen Docker Container umgezogen. Dies soll eigentlich im Rahmen der Migration von Stretch zu Buster passieren. Evtl. werde ich mir in dem Zuge aber auch mal wieder Proxmox als Basis installieren und FHEM dann in einen LXC Container packen.

Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Thomas41587

Zitat von: hoppel118 am 22 November 2019, 20:53:37
Moinsen,

habe mal eine Frage dazu: Warum lasst ihr das Sonos Modul in einem zusätzlichen FHEM Container laufen?

Ich nutze seit mittlerweile fast 2 Jahren Docker und FHEM ist aufgrund der vielen Abhängigkeiten noch nicht in einen Docker Container umgezogen. Dies soll eigentlich im Rahmen der Migration von Stretch zu Buster passieren. Evtl. werde ich mir in dem Zuge aber auch mal wieder Proxmox als Basis installieren und FHEM dann in einen LXC Container packen.

Gruß Hoppel
Sonos funktioniert über Multicast. Diese Multicast Pakete werden nicht über Subnetze hinweg geroutet. Wenn man fhem in einem Docker Container betreibt, hat man normalerweise ein seperates Netz, ergo funktioniert Multicast (und somit Sonos) nicht. Abhilfe schafft hier der "Host-Netzwerk" Modus. Dabei teilt sich der docker Container die Ip-Adresse mit dem Host. Aus Sicherheitsgründen ist das aber nicht empfohlen. Somit landet man dann bei dem Szenario fhem in docker Netzwerk und zusätzlich ein Sonos container im Host-Modus.

hoppel118

Ok, danke für die Info. Meine Docker Container laufen entweder im Host-Modus oder im Host-Modus mit MAC-VLAN, um dem Service eines Containers eine eigene IP im gleichen Subnetz des Hosts geben zu können. Ob das nun aus Sicherheitsgründen bedenklich ist... Mir eigentlich egal. Ich halte meine Systeme immer aktuell. Von außen kommt man nur per VPN rein.

Mein Sonos System soll mittelfristig dann sowieso in mein IoT-VLAN verlagert werden. Da ist alles drin, was irgendwie aus der Cloud gemanaged wird oder gar keine Firmware Updates mehr erhält.

Mit MDNS und IGMP Snooping werde ich die Multicasts dann in mein normales VLAN umleiten. Das Thema hatten wir hier kürzlich. Das funktioniert.

Aber ich werde diese Gedanken bei der Migration von Stretch zu Buster (inkl. Übergang zu FHEM Docker) berücksichtigen.

Danke nochmal! Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Thomas41587

Zitat von: Thomas41587 am 22 November 2019, 18:24:30
Gibt es eigentlich eine Möglichkeit, ohne Umwege eine Spotify Playlist zu starten? Die "url" einer Spotify-Playlist bekommt man ja über die Desktop Anwendung raus. Aber versucht man dann z.B. ein "set Sonos_Bad PlayURI spotify:playlist:37i9dQZF1DWUW2bvSkjcJ6" bekommt man zwar "LastActionResult - PlayURI: Success!", aber die Wiedergabe mit dem alten Track läuft munter weiter.
Mein aktueller "Umweg" besteht darin, die Playlist in "Mein Sonos" zu speichern und dann abzuspielen. Leider ist das ja nur eine Momentaufnahme dessen, was die Spotify Playlist enthält.
Hat eventuell jemand hierfür noch einen Tipp? Es muss doch eine Möglichkeit geben, Spotify Playlisten direkt abzuspielen, ohne diesen Umweg?

essera

Hi,

nachdem im Multimediaforum schweigen im Wald ist versuche ich es einmal direkt bei den Sonos Cracks. :-)
Ich kann mit meinem Sonos per Set Sonos_Esszimmer playuri \\xxx.xxx.xxx.xxx\SonosSpeak\sound.mp3 ein Soundfile (z.b. Kingelton falls einer auf die Klingen drückt) abspielen.

Dafür muss ich aber Samba und Mounting usw, einrichten.

Gibt es eine Möglichkeit die sound.mp3 nicht über eine Freigabe, sondern über einen lokalen Pfad abzuspielen. (d.h. liegt zum Beispiel in /opt/fhem/sounds)
Oder geht das nicht weil die Sonos Box dann keinen Zugriff auf die Datei hat, weil zum Abspielen nur eine URL übergeben wird und nicht die Datei gestreamt wird ....

VG,
Andreas.

Otto123

Zitat von: essera am 16 Dezember 2019, 13:35:55
Oder geht das nicht weil die Sonos Box dann keinen Zugriff auf die Datei hat, weil zum Abspielen nur eine URL übergeben wird und nicht die Datei gestreamt wird ....
So ist es :)

BTW: Du brauchst nichts zu mounten sondern musst freigeben - aber vielleicht sind ja in meinem Kopf die Windows Begriffe und "Linux" sieht es anders :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

essera

Zitat von: Otto123 am 16 Dezember 2019, 16:05:50
So ist es :)

BTW: Du brauchst nichts zu mounten sondern musst freigeben - aber vielleicht sind ja in meinem Kopf die Windows Begriffe und "Linux" sieht es anders :)

Danke Otto.
Ich wollte mein System halt "schlank" halten und auf den Samba Server verzichten. Aber dann geht das halt nicht....(Ist ja auch irgendwie logisch wenn man drüber nachdenkt :-) )

Otto123

Naja Du kannst irgendwo einen Samba Server haben, das muss nicht dein System sein. Router, NAS ....

Aber an sich ist es keine große Sache. Hier mein Setup Script. ;)
https://github.com/heinz-otto/raspberry/blob/master/setupSamba.sh

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ceear

Zitat von: Thomas41587 am 25 November 2019, 13:45:17
Sonos funktioniert über Multicast. Diese Multicast Pakete werden nicht über Subnetze hinweg geroutet. Wenn man fhem in einem Docker Container betreibt, hat man normalerweise ein seperates Netz, ergo funktioniert Multicast (und somit Sonos) nicht. Abhilfe schafft hier der "Host-Netzwerk" Modus. Dabei teilt sich der docker Container die Ip-Adresse mit dem Host. Aus Sicherheitsgründen ist das aber nicht empfohlen. Somit landet man dann bei dem Szenario fhem in docker Netzwerk und zusätzlich ein Sonos container im Host-Modus.

In diesem Zusammenhang. Bei mir läuft fhem mit Sonos im Container ohne Host-Network. Ich leite die Multicastanfragen an den Container weiter. Ich habe aber ein anderes Problem dadurch:
Der SubscriptionPort des UPnP Services ist ,,zufällig" - ändert sich mit jedem Neustart. Da ich diesen Port aber in den Container ,,öffnen" muss, ist das schwierig. Vermutlich steht deshalb im Wiki auch, dass man eine lokale Firewall komplett öffnen muss. Wäre es möglich, diesen per Attribut fest vorzugeben? Sonos benutzt dafür den Port 3400 oder 3401.

RalfP

Hallo Reinerlein,

ich hab mal eine Frage: Ist es geplant auch den Upnp-Service xml/HTControl1.xml zu unterstützen?

Darin versteckt sich z.B. die IR Remote De-/Aktivierung u.a.m.
Wäre ein tolles Feature, um im Wohnzimmer mit Amp und Beam die IR Fernbedienung beim gerade genutztem Gerät zu aktivieren.

Frohe Weihnacht wünsche ich

gruß Ralf

Elektrolurch

Hallo,

habe auf debian Buster umgestellt und nun gibt es wohl mit der unter FHEM/lib/mp3/tag.pm ein Problem:


2020.01.07 17:18:31 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/^\??({ <-- HERE ([^{}]+)}|.)/ at FHEM/lib/MP3/Tag.pm line 2944, <M3UFILE> line 3.
2020.01.07 17:18:31 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/^({ <-- HERE [^{}]+}|\w)/ at FHEM/lib/MP3/Tag.pm line 2956, <M3UFILE> line 3.


Leider verstehe ich nicht, was an der regex falsch sein soll...

Hat da jemand einen Tipp? Was hat sich da in perl 5.32 geändert

Elektrolurch
?
configDB und Windows befreite Zone!