fhem mit sonos im docker container Problem

Begonnen von lewej, 27 April 2017, 22:01:53

Vorheriges Thema - Nächstes Thema

lewej

Hallo Zusammen,

hat jemand einen fhem docker container mit sonos und UPNP am laufen. Fhem ist kein Problem, leider funktioniert das SONOS Plugin nicht mehr.
Hat jemand eine funktionieren Konfiguration?

Mit diese Optionen funktioniert es nicht:
docker-compose.yml ausschnitt

expose:
            - "8083"
            - "7072"
            - "8084"
            - "8085"
            - "2222"
            - "9001"
            - "4711"
            - "1900"
        ports:
            - "1900:1900/udp"
            - "8083:8083"
            - "7072:7072"
            - "8084:8084"
            - "8085:8085"
            - "9001:9001"
            - "2222:2222"
            - "4711:4711"
        build: fhem_jessie
        cap_add:
            -  SYS_ADMIN
        privileged: true


Gruß
lewej

crowzero

Hallo lewej,
ich kämpfe auch gerade mit dem Sonos im Docker. Neben den Ports habe ich aber auch das Netzwerksegment in verdacht.
docker inspect myfhem | grep IP
Der Container läuft in einem anderen Segment als der Sonos. IMHO funktioniert Sonos immer nur im selben Netzwerk.

Bin gespannt auf Antworten.

Gruß
crowzero

dev0

Ihr werdet nicht drum herumkommen Euch mit Multicast auseinander zu setzen. Sonos benutzt 239.255.255.250/1900.

Zitat von: crowzero am 29 April 2017, 00:05:08
IMHO funktioniert Sonos immer nur im selben Netzwerk.
Out of the box funktioniert es nicht, aber je nachdem wie Du das Netz segmentiert hast, kannst Du IGMP oder einen Multicast/Bonjour-Proxy einsetzen.

lewej

Hallo Zusammen,

ich finde es zwar nicht schön, aber damit ich erstmal weiter machen kann, habe ich folgende Option gesetzt. Damit funktioniert es erstmal.

network_mode: host

Gruß
lewej

Reinerlein

Hallo,

alternativ kannst du auch den Sonos-SubProzess selber auf einer Maschine innerhalb des Netzes laufen lassen, wo deine Sonos-Player laufen.
Dein Docker-Fhem kann sich dann mit diesem Prozess verbinden.

Das bedeutet aber immer noch, dass du eine laufende Maschine innerhalb deines "normalen" Netzes brauchst, auf der Perl läuft...

Wenn du das versuchen möchtest, so kannst du den SubProzess selber starten:

perl 00_SONOS.pm <PORT> <INITIAL_VERBOSELEVEL> <MSECLOG>

also z.B.

perl 00_SONOS.pm 4711 1 1


Grüße
Reinerlein

lewej

Zitat von: Reinerlein am 29 April 2017, 23:38:36
Hallo,

alternativ kannst du auch den Sonos-SubProzess selber auf einer Maschine innerhalb des Netzes laufen lassen, wo deine Sonos-Player laufen.
Dein Docker-Fhem kann sich dann mit diesem Prozess verbinden.

Das bedeutet aber immer noch, dass du eine laufende Maschine innerhalb deines "normalen" Netzes brauchst, auf der Perl läuft...

Wenn du das versuchen möchtest, so kannst du den SubProzess selber starten:

perl 00_SONOS.pm <PORT> <INITIAL_VERBOSELEVEL> <MSECLOG>

also z.B.

perl 00_SONOS.pm 4711 1 1


Grüße
Reinerlein

Hallo,

danke für den Tipp. Ich habe das SONOS Modul in einen seperaten CONTAINER gepackt und lasse diesen Container mit network-mode host laufen. Fhem kann dann wiederum im bridge Modus weiter laufen.

Gruß
lewej

Erdmännchen

Hallo lewej,
Hallo Reinerlein,

Ich bin noch blutiger Anfänger was Linux/Docker/Perl/FHEM angeht und ich stehe vor dem selben Problem wie lewej.

Wenn ich das richtig verstehe kann FHEM (bridge modus) die SONOS Lautsprecher vom Container aus nicht erreichen, weil der IP Adressbereich nicht der selbe ist.
Deshalb muss ich das SONOS Modul in einen eigenen Container packen mit network-host. (Wieso und Weshalb oder was genau der Unterschied zwischen bridge und host ist, weiss ich nicht genau)

Jetzt hapert es natürlich an der praktischen Umsetzung.
Was für ein Image muss ich für den "SONOS-Container" nehmen?
Wie bekomme ich das einzelne SONOS Modul in den Container?
Wie verbinde ich den SONOS- und FHEM-Container?

Ansatz aus einem anderen Foreneintrag:
Muss ich einen zweiten FHEM Container (jessie) als host erstellen und mit FHEM2FHEM die Daten an der FHEM Container übergeben?

Oder wie funktioniert das mit den "SubProzessen"? (perl 00_SONOS.pm <PORT> <INITIAL_VERBOSELEVEL> <MSECLOG>)

Habt ihr vielleicht einen Auszug aus eurer Dockerfile, yml und fhem.cfg?

Es wäre echt super, wenn ihr mich mal in die richtige Richtung schubsen könntet, damit würde ich mir tage langes googeln ersparen.

Danke euch schon mal im voraus und hoffe auf eine kompetente Hilfe.

MfG Erdmännchen

Reinerlein

Hi Erdmännchen,

kurzer Umriss: Eine Docker Bridge arbeitet wie ein Netzwerk-Router, der IP-Adressbereiche trennt bzw. kontrolliert verbindet.
UPnP, das Basisprotokoll der Sonosplayer, ist ein sogenanntes Broadcast-Verfahren. Leider werden an einem Router alle Broadcast-Pakete verworfen, und nicht geroutet.

Deshalb die Idee, wenn Fhem in einem solchen Bridged-Host laufen soll (wegen konfigurierter, größerer Sicherheit o.ä.), dann kann man in einem anderen Container, der dann im Host-Modus laufen muss, damit er Bestandteil des "normalen" Netzes ist, den Sonos-SubProzess selber anstarten, und von Fhem aus dahin verbinden lassen. Der SubProzess fungiert dann sozusagen als Befehlsproxy für die Befehle und als Informationsproxy für alle Events der Player.
Das tut der SubProzess sowieso, nur passiert das sonst versteckt im Hintergrund, weil die meisten Menschen sich nicht damit beschäftigen wollen/müssen.

Also: Du kannst Fhem direkt im Host-Modus laufen lassen, oder einen zweiten Container (der die gleichen Bedingungen aufweisen muss, wie dein Fhem-Container, also Perl usw.) starten.
In diesem zweiten Container läßt du Fhem nicht laufen, aber du installierst es normal. Dort kannst du dann mit der angegebenen Befehlszeile den SubProzess starten.

In deinem Fhem-Sonos-Define gibst du dann die IP-Adresse und den von dir verwendeten Port in diesem zweiten Container an.

Das wars :)
Bedenke, dass du bei Sonos-Updates dann immer beide Container updaten musst, und den SubProzess im zweiten Container selber beenden und neu anstarten musst...

Grüße
Reinerlein

Erdmännchen

Hallo Reinerlein,
erstmal herzlichen dank für deine schnelle und herrvoragende Hilfe.

Ich habe zwar ein paar Tage gebraucht deinen Vorschlag um zu setzen, aber ich habe jetzt die Lösung  :D

Hier meine yml File:

version: '3'

services:
    portainer:
        container_name: portainer
        expose:
            - "9000"
        ports:
            - "9000:9000"
        image: portainer/portainer
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        network_mode: "bridge"

    mysql:
        container_name: mysql
        expose:
            - "3306"
            - "33060"
        ports:
            - "3306:3306"
            - "33060:33060"
        image: mysql/mysql-server:latest
        volumes:
            - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql
            - ./mysql/data:/var/lib/mysql
        environment:
            - MYSQL_RANDOM_ROOT_PASSWORD=yes
        networks:
            - bridge

    fhem:
        container_name: fhem
        expose:
            - "8083"
            - "7072"
        ports:
            - "8083:8083"
            - "7072:7072"
        build: fhem
        privileged: true
        volumes:
            - ./fhem/start.sh:/opt/fhem/start.sh
            - ./fhem/log/:/opt/fhem/log
            - ./fhem/backup/:/opt/fhem/backup
            - ./fhem/data/fhem.cfg:/opt/fhem/fhem.cfg
            - ./fhem/data/FHEM/controls.txt:/opt/fhem/FHEM/controls.txt
            - ./fhem/data/FHEM/99_myUtils.pm:/opt/fhem/FHEM/99_myUtils.pm
            - ./fhem/data/contrib/dblog/db.conf:/opt/fhem/contrib/dblog/db.conf
        networks:
            - bridge
        depends_on:
            - "mysql"
            - "sonos"

    sonos:
        container_name: fhem_sonos
        build: fhem_sonos
        volumes:
            - ./fhem_sonos/start.sh:/opt/fhem/start.sh
        hostname: fhem_sonos
        network_mode: "host"

networks:
    bridge:
        driver: bridge


Dockerfile: FHEM
# FHEM_update
FROM debian:jessie

MAINTAINER Erdmaennchen <ich@welt.com>

#TAG jessie/fhem

ENV FHEM_VERSION 5.8
ENV DEBIAN_FRONTEND noninteractive
ENV TERM xterm

# non-free & contrib Quellen hinzufügen (snmp-mibs-downloader)
COPY etc/apt/sources.list etc/apt/sources.list

# Install Updates
RUN apt-get update && \
apt-get upgrade -y --force-yes && \
apt-get dist-upgrade -y --force-yes && \
apt-get install -y --force-yes --no-install-recommends apt-utils

# Install dependencies
RUN apt-get -y --force-yes install \
perl \
wget \
git \
apt-transport-https \
sudo \
etherwake \
dfu-programmer \
build-essential \
snmpd \
snmp \
snmp-mibs-downloader \
nano \
telnet \
usbutils \
sqlite3

# Install perl packages
RUN apt-get -f -y --force-yes install \
libavahi-compat-libdnssd-dev \
libalgorithm-merge-perl \
libclass-dbi-mysql-perl \
libclass-isa-perl \
libcommon-sense-perl \
libdatetime-format-strptime-perl \
libdbi-perl \
libdevice-serialport-perl \
libdpkg-perl \
liberror-perl \
libfile-copy-recursive-perl \
libfile-fcntllock-perl \
libio-socket-ip-perl \
libio-socket-ssl-perl \
libjson-perl \
libjson-xs-perl \
libmail-sendmail-perl \
libsocket-perl \
libswitch-perl \
libsys-hostname-long-perl \
libterm-readkey-perl \
libterm-readline-perl-perl \
libwww-perl \
libxml-simple-perl \
libdbd-sqlite3-perl \
libtext-diff-perl \
libsoap-lite-perl \
libxml-parser-lite-perl

# Install snmp mibs (NAS Status)
RUN cpan install use Net::SNMP

# Timzone
RUN echo Europe/Berlin > /etc/timezone && dpkg-reconfigure tzdata

# FHEM installieren
RUN wget https://fhem.de/fhem-${FHEM_VERSION}.deb && dpkg -i fhem-${FHEM_VERSION}.deb

# Benutzdefinierter Skin laden
RUN cd /opt/fhem/www/ && git clone https://github.com/klein0r/fhem-style-haus-automatisierung.git hausautomatisierung-com && chown -R fhem:dialout /opt/fhem/www/hausautomatisierung-com

# FHEM-User löschen
RUN userdel fhem

# Verzeichnis wechseln
WORKDIR "/opt/fhem"

# Update Config kopieren
COPY /data/fhem.cfg.update /opt/fhem/fhem.cfg

# Quellen für Update hinzufügen
COPY data/FHEM/controls.txt ./FHEM/controls.txt

# FEHM starten zum Updaten (durch notify in fhem.cfg)
RUN perl fhem.pl fhem.cfg | tee /opt/fhem/log/fhem.log

# Abfallkalender kopieren
COPY data/kal_abfall.ics ./kal_abfall.ics

# Wetterverlauf gplot kopieren
COPY data/www/gplot/SVG_Wetterverlauf.gplot ./www/gplot/SVG_Wetterverlauf.gplot
EXPOSE 8083 7072

# Start-Script kopieren
COPY start.sh ./
CMD bash /opt/fhem/start.sh


Dockerfile: FHEM_Sonos
# SONOS
FROM debian:jessie

MAINTAINER Erdmaennchen <ich@welt.com>

#TAG jessie/fhem_sonos

ENV FHEM_VERSION 5.8
ENV DEBIAN_FRONTEND noninteractive
ENV TERM xterm

# Install Updates
RUN apt-get update && \
apt-get upgrade -y --force-yes && \
apt-get dist-upgrade -y --force-yes && \
apt-get install -y --force-yes --no-install-recommends apt-utils

# Install dependencies
RUN apt-get -y --force-yes install \
perl \
wget \
git \
apt-transport-https \
sudo \
etherwake \
dfu-programmer \
build-essential \
nano \
telnet \
usbutils \
sqlite3

# Install perl packages
RUN apt-get -f -y --force-yes install \
libavahi-compat-libdnssd-dev \
libalgorithm-merge-perl \
libclass-dbi-mysql-perl \
libclass-isa-perl \
libcommon-sense-perl \
libdatetime-format-strptime-perl \
libdbi-perl \
libdevice-serialport-perl \
libdpkg-perl \
liberror-perl \
libfile-copy-recursive-perl \
libfile-fcntllock-perl \
libio-socket-ip-perl \
libio-socket-ssl-perl \
libjson-perl \
libjson-xs-perl \
libmail-sendmail-perl \
libsocket-perl \
libswitch-perl \
libsys-hostname-long-perl \
libterm-readkey-perl \
libterm-readline-perl-perl \
libwww-perl \
libxml-simple-perl \
libdbd-sqlite3-perl \
libtext-diff-perl \
libsoap-lite-perl \
libxml-parser-lite-perl

# Timzone
RUN echo Europe/Berlin > /etc/timezone && dpkg-reconfigure tzdata

# Install fhem
RUN wget https://fhem.de/fhem-${FHEM_VERSION}.deb && dpkg -i fhem-${FHEM_VERSION}.deb
RUN userdel fhem

WORKDIR "/opt/fhem"

# Update-Config kopieren
COPY /data/fhem.cfg.update /opt/fhem/fhem.cfg

# FEHM starten zum Updaten (durch notify in fhem.cfg)
RUN perl fhem.pl fhem.cfg | tee /opt/fhem/log/fhem.log

COPY start.sh ./
CMD bash /opt/fhem/start.sh


start.sh FHEM_Sonos

#!/bin/bash

echo "Starte SONOS"
perl /opt/fhem/FHEM/00_SONOS.pm 4711 1 1


Wenn jemand möchte kann ich meinen kompletten Code mal auf github posten.

Ich update FHEM schon beim erstellen. Zuerst kopiere ich eine einfache fhem.cfg.update:
# FHEM updaten und beenden
define Update notify global:INITIALIZED sleep 2;;update
define Shutdown notify global:UPDATE sleep 2;;shutdown

dann starte ich fhem mit dieser Config und Fhem macht ein update und beendet sich danach.
Erst dann wir meine richtige fhem.cfg kopiert.

Somit ist mein fhem schon beim ersten Starten auf dem neusten Stand.

Im FHEM Container starte ich fhem und im Sonos Container nur das perl modul.

Die Container sind schon ziemlich auf mein System angepasst, daher ist dieser Code nur als Beispiel gedacht.

Falls jemand Fragen hat stehe ich gerne zur Verfügung.

Einen großen Dank auch an Matthias Kleine der mir die Grundlage für meine yml File geliefert hat.
https://github.com/klein0r/fhem-docker
https://haus-automatisierung.com/

MfG Erdmännchen

Otto

Hallo Erdmännchen,
ZitatWenn jemand möchte kann ich meinen kompletten Code mal auf github posten.

ich fange gerade mit Docker an und würde mich freuen, wenn du den Code auf github posten würdest.
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

Erdmännchen

Hallo Otto,

danke für dein Interesse.

Ich habe mal meinen Code online gestellt, vielleicht können wir uns ja gegenseitig helfen.

https://github.com/3rdmaennchen/docker_test

Der Code ist nur als Beispiel gedacht, musste viele Sachen löschen bzw. ändern.

Falls du noch Fragen oder Anregungen hast, immer raus damit.

MfG Erdmännchen

Otto

Hi Erdmännchen,

danke für deine config.

Ich "forsche" gerade mit docker, also viel kann ich nicht helfen.

Alexa-Fhem habe ich schon mal laufen, habe dieses hier genommen.
https://github.com/sbiermann/x86-alexa-fhem
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

FunkOdyssey

#12
Was ich mich hier noch frage:

Wie greifst du innerhalb der FHEM-Umgebung (bridge) auf das fhem_sonos (Host) zu?

Mir steht der Hostname in der bridged-Umgebung nicht zur Verfügung. Folgende Varianten funktioniere nicht:

define Sonos SONOS dockerhost:4711 1 1
define Sonos SONOS fhem_sonos:4711 1 1
define Sonos SONOS sonos:4711 1 1

Nutze ich die hart-verdrahtete IP, dann kann ich darauf zugreifen:

define Sonos SONOS 192.168.0.x:4711 1 1

Aber das ist ja nicht wirklich optimal.

Die Frage ist wahrscheinlich: Wie kann ich den Hostname der Host-Umgebung (z.B. per Environment-Variable) an das FHEM weitergeben. Ich scheitere an der Syntax der Environment-Parameter.




Alternative: add-host?

Erdmännchen

Servus,

Zur Zeit habe ich meinen Sonos Container deaktiviert, da ich noch andere Baustellen habe, die mir wichtiger sind.

Ich habe auch die "hart-verdrahtete IP" genommen. Vielleicht kann man das anders/besser lösen.
Hier einige Ideen:

- Fhem Container in der yml Datei mit dem Sonos Container "verlinken"
https://docs.docker.com/compose/compose-file/#links

-Mutlicast (habe mich damit noch nicht beschäftigt, hat vielleicht etwas mit den docker Netzwerken zu tun)
Zitat von: dev0 am 29 April 2017, 08:08:04
Ihr werdet nicht drum herumkommen Euch mit Multicast auseinander zu setzen. Sonos benutzt 239.255.255.250/1900.

Out of the box funktioniert es nicht, aber je nachdem wie Du das Netz segmentiert hast, kannst Du IGMP oder einen Multicast/Bonjour-Proxy einsetzen.

Weiss nicht genau was er damit sagen möchte.
Vielleicht interne IP Adressen und Subnet richtig mit Multicast vergeben?

- Eigenes internes docker-Netzwerk konfigurieren mit IP/Subnet usw.
https://runnable.com/docker/docker-compose-networking
unter "Custom Network" (habe auf die schnelle kein besseres Beispiel gefunden)

Habe die Vermutung das man ein eigenes Netzwerk in der yml Datei mit Multicast erstellt und die Container ins selbe Netzwerk zuweist. Also anstatt network mode bridge ein eigenes erstelltes Netzwerk.
Wie genau das geht und wie man die internen IP Adressen und Subnetze richtig verteilt weiß ich nicht genau. So genau kenne ich mich mit der Netzwerktechnik nicht aus.

Werde mich heute nachmittag mit der HA-Bridge auseinander setzen. Wenn die HA-Bridge nicht im network mode bridge läuft, hänge ich schon wieder beim selben Thema (host mode) fest.

MfG Erdmännchen

FunkOdyssey

Ich habe bei mir auch noch das Problem, dass sich die fhem_sonos-Instanz irgendwann irgendwie zerlegt und in einer CPU-Last im Host mit 100% endet.
Noch spiele ich mit Docker und habe aktuell folgende Container eingeplant:

- Fhem
- eBusd
- Fhem_sonos (Host-Modus)
- Ha-bridge (Host-Modus)
- Hmcfgusb (privileged=true)
- Homebridge
- ReverseProxy mit SSL (Passwort und Client-Zertifikat)

Dabei habe ich mich an deiner Vorarbeit und der des Foren-Users pipp37 orientiert.
Mit dem Proxy bin ich noch gar nicht angefangen. Der Rest scheint schon zu laufen.
Ich traue mich nur noch nicht, den Hebel umzulegen und das RasPi durch meine neue Hardware zu ersetzen.
Außerdem will ich vorher noch das Host-Betriebssystem wieder wechseln. Ich habe derzeit Debian9Stretch und will wieder zu Ubuntu 16.04 LTS.

Wenn ich fertig bin, werde ich das auch in ein GitHub-Repository packen. Aber noch ist mir das zu sehr gepfuscht.

Es würde mich freuen, wenn du deine Neuerungen auch ins Repo committen könntest.




Frage am Rande: Ich sehe in vielen Fhem-Docker-Images, dass supervisord genutzt wird. Ist das überhaupt notwendig? Nice to have und praktisch, wenn man Fhem eigentlich nur als Daemon laufen lassen kann. Aber irgendwie ist mir das zu viel (ich nenne es mal) "Overhead".

Erdmännchen

#15
Bevor ich mit der HA-Bridge anfange, habe ich mal meinen aktuellen Stand hoch geladen.

https://github.com/3rdmaennchen/docker_test

Sorry hab mich noch nicht mit supervisord beschäftigt, kann ich nichts zu sagen.

mfg

Erdmännchen

Lieber dev0,

könntest du bitte auf deine Antwort https://forum.fhem.de/index.php/topic,71191.msg627802.html#msg627802
näher eingehen.
Zitat von: dev0 am 29 April 2017, 08:08:04
Ihr werdet nicht drum herumkommen Euch mit Multicast auseinander zu setzen. Sonos benutzt 239.255.255.250/1900.
Out of the box funktioniert es nicht, aber je nachdem wie Du das Netz segmentiert hast, kannst Du IGMP oder einen Multicast/Bonjour-Proxy einsetzen.

Was genau muss ich in Docker machen, damit Multicast für Sonos funktioniert?

Mein Traumszenario ist ein FHEM Container mit integriertem "Sonos-Server" ohne host mode.
Ist das überhaupt möglich, wenn man in docker das Netzwerk richtig einrichtet?
In etwa so, wie im Abschnitt "Custom Networks":
https://runnable.com/docker/docker-compose-networking

Momentan habe ich einen Fhem Container im network mode bridge und einen Sonos Container als host.
Damit FHEM den Sonos Container sieht, muss ich den Sonos Server als hart verdrahtete IP definieren.

Es ist keine schöne Lösung, da sich die Container intern nicht sehen.
Vielleicht mit einem Overlay Network https://www.youtube.com/watch?v=nGSNULpHHZc
oder "verlinken" des Containers, wie ich es mit dem mysql Server gemacht habe. https://docs.docker.com/compose/compose-file/#links

Wie schon gesagt, am liebsten hätte ich nur einen Container mit FHEM und Sonos. Aber ich weiss nicht genau, was ich machen muss.
Ich habe versucht deine Aussage mit der Multicast Adresse von Sonos zu verstehen.
Wenn ich das richtig verstanden habe kann man mit einer Multicast Adresse bestimmte Geräte im Netzwerk ansprechen.
Die Multicast Adresse setzt sich aus der IP Adresse und dem MAC-Adress-Bereich der Geräte zusammen.
Da ich kein Netzwerk Profi bin, ist das alles nur gefährliches Halbwissen.

Hier meine aktuelle Docker Umgebung https://github.com/3rdmaennchen/docker_test

Über eine Antwort würde ich mich freuen.
Ich verlange keine Komplettlösung, nur ein paar Denkanstöße oder nähere Informationen mit welchem Thema ich mich beschäftigen muss.

Für Nähere Informationen stehe ich dir gerne zur Verfügung.

MfG Erdmännchen

dev0

Zitat von: Erdmännchen am 03 September 2017, 11:41:27
Was genau muss ich in Docker machen, damit Multicast für Sonos funktioniert?
Da Du mich direkt ansprochen hast (sonst hätte ich mir die Antwort verkniffen): Die bisherigen Antworten aus diesem Thread weiter verfolgen und Dich in Docker einarbeiten. Konkrete Fragen werden hier vmtl. beantwortet, auch wenn es mMn im FHEM Forum offtopic ist.

Erdmännchen

Zitat von: dev0 am 03 September 2017, 11:57:19
Da Du mich direkt ansprochen hast (sonst hätte ich mir die Antwort verkniffen)
Danke das du dir Zeit für eine Antwort genommen hast, hat mich echt weiter gebracht.  :-\

Tut mir echt Leid, daß ich mich als Neuling hier im Forum nicht so auskenne.
Ich werde mich mal durch das Offtopic Forum klicken.

Schönen Sonntag noch.

dev0

ZitatIch werde mich mal durch das Offtopic Forum klicken
Statt sich "irgendwo" durchzuklicken, könnte man sich auch direkt die Grundlagen der verwendeten Software/Technologie aneignen...

Erdmännchen

Alles klar mach ich.
Danke für deine Zeit.

FunkOdyssey

Hallo Erdmännchen, lass dich bitte nicht entmutigen. :-) Ich hatte auch ein wenig die Hoffnung, dass dev0 vielleicht eine schnelle Antwort zur Hand hat. Hätte ja sein können. Dann müssen wir uns wohl in den Docker-Foren umschauen. Die Fragen sind für ein FHEM-Forum wirklich sehr speziell. Wobei ich - ehrlich gesagt - hier noch nie an Grenzen gestoßen bin. Bisher habe ich selbst immer Hilfe zu auch offtopic-Fragen erhalten können. Nur sind die Docker-Threads hier wirklich Mangelware. :-)

Ich persönlich habe mir auch schon den Wolf gesucht und befürchte, dass MultiCast in einem bridged-Docker-Container nicht laufen wird. dev0 erwähnte ja auch bereits, dass es "out-of-the-box" nicht klappen wird. Ich finde zwar Ansätze in verschiedenen Threads dazu, mir wird eine solche Umsetzung zu komplex. Dann bleibe ich lieber im Host-Modus.




Was mich noch interessieren würde:
Ich sehe in deinem fhem_sonos-Container die relative geschickte Möglichkeit, das FHEM zu aktualisieren.
Aber wird dies nicht eigentlich nur beim Erstellen des Containers durchgeführt?
Muss ich also die Container regelmäßig löschen, wenn ich die FHEM-Instanz updaten möchte?

Erdmännchen

Hallo FunkOdyssey,

die dockerfile erstellt ein image und daraus wird beim ersten starten des "Containers" ein container erstellt.
d.h. der erstellte Container ist direkt lauffähig für meine fhem.cfg ohne das ich Sachen aus der Config löschen oder aus kommentieren muss.

Ich benutze z.b. das ABFALL Modul, wenn ich FHEM (ohne update) das erste mal mit meiner eigenen Config laden möchte, stürtz FHEM ab, weil das Modul ABFALL nicht gefunden wurde.

FHEM hat bei der Installation nicht alle Module die ich brauche an Bord.
Bei einem update von FHEM werden diese erst geladen (Quellen stehen in der controls.txt).

Somit ist mein Container, der aus dem Image erstellt worden ist, direkt lauffähig.
Ohne das man blöd rum tricksen muss: definierte Module in der fhem.cfg aus kommentieren usw.

Du kannst ganz normal in deinem Container "update all" machen, du brauchst den Container nicht zu löschen.
Dein container ist dann auf dem aktuellsten stand, aber dein image hat dann noch den Softwarestand vom Tag des Erstellens.

Ich hoffe du konntest folgen. Kann das irgendwie schlecht beschreiben, ist auf jeden Fall komfortabel   ;D


Habe mich ein wenig mit docker networking auseinander gesetzt.
Wenn ich das richtig verstanden habe, werden beim erstellen von Container auto. die Container an das docker bridge Netzwerk (docker0) eingebunden.
d.h. eine interne IP Adresse wird vergeben (172.17.0.x) und es wird ein Eintrag in die iptables generiert, der auf diese IP Adresse verweist, wenn eine Anfrage über das Netzwerk kommt.

Nur eine Vermutung:
Wenn du die richtigen Ports aus einem Container nach aussen mapst, kann Sonos zwar Daten senden, aber das Empfangen funktioniert nicht, weil das docker0 Netzwerk nicht weiss wohin mit den Daten.
d.h. man muss in der iptables die multicast Adresse von Sonos auf den Container verweisen.

Diese Informationen sind ohne Gewähr und verzeiht mir, wenn ich etwas falsches geschrieben habe. Dann korrigiert mich bitte, ich bin kein Profi.
Das sind alles nur Vermutungen!!!

Ich schmeisse einfach mal ein paar links in die Runde:
http://www.dasblinkenlichten.com/docker-networking-101/
http://www.dasblinkenlichten.com/docker-networking-101-host-mode/
http://www.dasblinkenlichten.com/docker-networking-101-mapped-container/
https://blog.docker.com/2016/12/understanding-docker-networking-drivers-use-cases/
https://runnable.com/docker/basic-docker-networking
https://runnable.com/docker/docker-compose-networking

Vielleicht kann man sich auch Informationen aus einem airsonos dockerfile holen:
https://github.com/justintime/docker-airsonos

Ich bleibe auch erstmal im host mode, wenn ich nochmal viel Zeit und Lust habe, werde ich mich nochmal damit beschäftigen.

Wünsche noch viel Erfolg.

FunkOdyssey

Zitat von: Erdmännchen am 07 September 2017, 18:31:20
Hallo FunkOdyssey,

die dockerfile erstellt ein image und daraus wird beim ersten starten des "Containers" ein container erstellt.
d.h. der erstellte Container ist direkt lauffähig für meine fhem.cfg ohne das ich Sachen aus der Config löschen oder aus kommentieren muss.

Ich benutze z.b. das ABFALL Modul, wenn ich FHEM (ohne update) das erste mal mit meiner eigenen Config laden möchte, stürtz FHEM ab, weil das Modul ABFALL nicht gefunden wurde.

FHEM hat bei der Installation nicht alle Module die ich brauche an Bord.
Bei einem update von FHEM werden diese erst geladen (Quellen stehen in der controls.txt).

Somit ist mein Container, der aus dem Image erstellt worden ist, direkt lauffähig.
Ohne das man blöd rum tricksen muss: definierte Module in der fhem.cfg aus kommentieren usw.

Du kannst ganz normal in deinem Container "update all" machen, du brauchst den Container nicht zu löschen.
Dein container ist dann auf dem aktuellsten stand, aber dein image hat dann noch den Softwarestand vom Tag des Erstellens.

Ich hoffe du konntest folgen. Kann das irgendwie schlecht beschreiben, ist auf jeden Fall komfortabel   ;D

Danke, Erdmännchen, für die ausführliche Antwort. Das hättest du dir aber sparen können. Wie der Docker-Fhem-Container funktioniert, habe ich schon verstanden. Bei mir ist es genauso. Wobei ich komplett /opt/fhem als Volume angelegt habe. Einschränken kann ich das später.

Meine Frage bezog sich eher auf die eigene FHEM-Instanz für Sonos. Hier führst du ja nur bei der Erstellung des Containers ein Update durch. Danach wird die update.cfg ja umbenannt.




Am Rande: AirSonos läuft bei mir übrigens im Host-Modus. :-)

Erdmännchen

Hallo FunkOdyssey,

Im FHEM Sonos Container ist noch die update.cfg aktiv d.h. du musst nur Fhem einmal im Container starten.

perl fhem.pl fhem.cfg

Dann wird sich FHEM updaten und beenden.
(Hoffe ich, bis jetzt hab ich den Container & Image immer gelöscht und neu gebaut.)

Falls es zu Problemen kommt musst du den org. FHEM Container so lange beenden.

Mfg Erdmännchen

Otto

Hallo zusamen,

habt Ihr Sonos schon im Fhem Container laufen?
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

FunkOdyssey

Zitat von: Reinerlein am 29 April 2017, 23:38:36
Hallo,

alternativ kannst du auch den Sonos-SubProzess selber auf einer Maschine innerhalb des Netzes laufen lassen, wo deine Sonos-Player laufen.
Dein Docker-Fhem kann sich dann mit diesem Prozess verbinden.

Das bedeutet aber immer noch, dass du eine laufende Maschine innerhalb deines "normalen" Netzes brauchst, auf der Perl läuft...

Wenn du das versuchen möchtest, so kannst du den SubProzess selber starten:

perl 00_SONOS.pm <PORT> <INITIAL_VERBOSELEVEL> <MSECLOG>

also z.B.

perl 00_SONOS.pm 4711 1 1


Grüße
Reinerlein


Ich habe folgende Ausgangssituation:

In einem Docker-Container, welchen ich im Host-Modus laufen lasse, starte ich die Sonos-Prozesse wie folgt:

perl 00_SONOS.pm 4711 120 10 10

Im produktiven FHEM-Container (eigene Bridge) habe ich Sonos folgendermaßen eingebunden:

define Sonos SONOS dockerhostname:4711 120 10 10

Das funktioniert generell ganz gut.

Aber sobald ich das Produktiv-FHEM kurz offline nehme, neu starte oder sonst pausiere, steigt die CPU-Last im Sonos-Container (auf der Host) auf 100%.
Wenn ich das richtig verstehe, so liegt das doch wahrscheinlich daran, dass das FHEM dem Prozess nicht mitteilen kann, dass die Sub-Prozesse beendet werden müssen, oder? Quasi Zombie-Prozesse?
Ich muss jedenfalls stets beide Container neu starten. Vergesse ich den Sonos-Container, so gehen CPU-Lust und Stromverbrauch steil nach oben.

Besteht irgendwie die Möglichkeit, dass man (auch den nicht eigens gestarteten) Sub-Prozess stoppen kann (SONOS_StopSubProcess / fremdes DevIo)?




Falls mal jemand fragen sollte, warum ich das so mache?
Der Sonos-Prozess muss scheinbar im Host-Modus laufen (siehe Diskussion zuvor) und ich will FHEM nicht in dieser Ebene laufen lassen.

Reinerlein

Hi FunkOddyssey,

die Parameter für den Sonos-Prozess solltest du noch anpassen:

perl 00_SONOS.pm 4711 3 1
Die drei ist der Verbose-Level. Dort hattest du 120 stehen, was wirklich hoch ist :)
Danach folgt die Angabe, ob in der Logausgabe Millisekunden enthalten sein sollen (also 0 oder 1).
Das sind nicht die gleichen Parameter wie bei deinem Fhem-Device!

Aber zu deiner Frage:
Prinzipiell arbeitet das System nach dem Prinzip: Wer einen Prozess startet, beendet ihn auch wieder.
Deswegen gibt es auch keine Möglichkeit von Fhem aus den SubProzess zu beenden.

Allerdings sollte er auch nicht auf 100% CPU-Last gehen, da bei einem regulären Fhem-Shutdown ein Signal an den SubProzess gesendet wird, dass Fhem jetzt weg ist, und dementsprechend die Threads des SubProzesses beendet werden sollen.
Passiert das beim regulären Beenden? Oder wird Fhem irgendwie abgeschossen o.ä.?

Sonst mal den SubProzess mit Verbose auf 5 starten (anstatt der drei in meinem Beispiel), und nach dem Beenden des Fhem-Containers im Log schauen, was er so tut, bzw. gerade noch getan hat...

Grüße
Reinerlein

FunkOdyssey

Zitat von: Reinerlein am 09 Februar 2018, 19:45:01
Hi FunkOddyssey,

die Parameter für den Sonos-Prozess solltest du noch anpassen:

perl 00_SONOS.pm 4711 3 1
Die drei ist der Verbose-Level. Dort hattest du 120 stehen, was wirklich hoch ist :)
Danach folgt die Angabe, ob in der Logausgabe Millisekunden enthalten sein sollen (also 0 oder 1).
Das sind nicht die gleichen Parameter wie bei deinem Fhem-Device!

Ehrlich gesagt hatte ich das sogar immer auf
perl 00_SONOS.pm 4711 1 1
stehen und habe das erst beim Schreiben meines Postings bemerkt. Ich dachte, dass das ein Fehler wäre und habe das zeitgleich mit dem Posting auf 120 geändert. Dank deiner Erläuterung habe ich den Wert unverzüglich wieder abgeändert.

Zitat von: Reinerlein am 09 Februar 2018, 19:45:01
Prinzipiell arbeitet das System nach dem Prinzip: Wer einen Prozess startet, beendet ihn auch wieder.
Deswegen gibt es auch keine Möglichkeit von Fhem aus den SubProzess zu beenden.

Ist logisch. Leider habe ich vom Produktiv-FHEM keine Möglichkeit, den Prozess im Host-Container zu stoppen. Nun ja, das ist wohl mein individuelles Problem. :-)

Zitat von: Reinerlein am 09 Februar 2018, 19:45:01
Allerdings sollte er auch nicht auf 100% CPU-Last gehen, da bei einem regulären Fhem-Shutdown ein Signal an den SubProzess gesendet wird, dass Fhem jetzt weg ist, und dementsprechend die Threads des SubProzesses beendet werden sollen.
Passiert das beim regulären Beenden? Oder wird Fhem irgendwie abgeschossen o.ä.?

Ich habe mal ein wenig darauf geachtet. In der Tat passiert wohl nichts, wenn ich FHEM (z.B. durch ein Update) neu starte. Ich versuche den Fehler mal einzugrenzen. Noch weiß ich nicht mehr.

Zitat von: Reinerlein am 09 Februar 2018, 19:45:01
Sonst mal den SubProzess mit Verbose auf 5 starten (anstatt der drei in meinem Beispiel), und nach dem Beenden des Fhem-Containers im Log schauen, was er so tut, bzw. gerade noch getan hat...

Das habe ich jetzt gerade mal gemacht. Ich frage mich gerade nur, ob ich wohl im richtigen Log schauen. Das FHEM-Log ist diesbezüglich leer. Und das sonos.log in FHEM ist merkwürdig ruhig. Da sehe ich nur ein paar der folgenden Zeilen:

2018-02-13_11:26:26 Sonos LastProcessAnswer: 1518517586.28313
2018-02-13_11:26:26 Sonos ZoneGroupState: <ZoneGroups><ZoneGroup Coordinator="xxx" ID="xxx:37"><ZoneGroupMember UUID="xxx" Location="http://xxx:1400/xml/device_description.xml" ZoneName="Küche" Icon="x-rincon-roomicon:kitchen" Configuration="1" SoftwareVersion="40.5-49090" MinCompatibleVersion="39.0-00000" LegacyCompatibleVersion="25.0-00000" BootSeq="265" TVConfigurationError="0" WirelessMode="1" WirelessLeafOnly="0" HasConfiguredSSID="1" ChannelFreq="2437" BehindWifiExtender="0" WifiEnabled="1" Orientation="0" RoomCalibrationState="3" SecureRegState="3" VoiceState="0"/><ZoneGroupMember UUID="xxx" Location="http://xxxx:1400/xml/device_description.xml" ZoneName="Wohnzimmer" Icon="x-rincon-roomicon:living" Configuration="1" SoftwareVersion="40.5-49090" MinCompatibleVersion="39.0-00000" LegacyCompatibleVersion="25.0-00000" BootSeq="180" TVConfigurationError="0" WirelessMode="1" WirelessLeafOnly="0" HasConfiguredSSID="1" ChannelFreq="2437" BehindWifiExtender="0" WifiEnabled="1" Orientation="0" RoomCalibrationState="1" SecureRegState="3" VoiceState="0"/></ZoneGroup></ZoneGroups>
2018-02-13_11:26:27 Sonos LastProcessAnswer: 1518517587.84417


Ich werde das mal beobachten.

Danke dir für deinen (off-topic)-Support.

Reinerlein

Hi FunkOdyssey,

du musst natürlich in der Konsole des anderen Docker-Containers (dem des Sonos-Prozesses) schauen.
Je nachdem, wie du deinen Container erzeugt hast, landen die Sonos-Prozess-STDOUT-Ausgaben in der STDOUT-Ausgabe des Docker-Containers selbst, sodass du dir nur dieses anschauen brauchst...

Grüße
Reinerlein

FunkOdyssey

Ich starte den Subprozess wie folgt:
#!/bin/bash
set -e
echo "Starte SONOS"
perl /opt/fhem/FHEM/00_SONOS.pm 4711 5 1


Ich habe auch ein wenig Output in STDOUT:

Starte SONOS 2018.02.13 10:19:33.469 1: SONOS0: /opt/fhem/FHEM/00_SONOS.pm is listening to Port 4711 2018.02.13 10:19:59.065 3: SONOS0: Connection accepted from ? d:48502 2018.02.13 10:20:09.071 3: SONOS0: Connection accepted from ? d:48664 2018.02.13 10:20:10.074 5: SONOS0: Received: 'SetData:Sonos:0:-:syn:192.168.0.224,192.168.0.201:192.168.0.200,192.168.0.211,192.168.0.216,192.168.0.110:0:Sonos_Kueche,Sonos_Wohnzimmer:RINCON_B8E937B7C36201400_MR,RINCON_B8E937B7C31001400_MR'

Und das mit verbose5. Ziemlich knapp, oder?
Irgendetwas mache ich hier falsch.




(1) Nun habe ich testweise das SONOS-Device in FHEM mit disable=1 deaktiviert. Es hat sich in keinen Logs etwas geändert.
(2) Aber kurz darauf stieg die CPU-Auslastung im Produktiv-FHEM-Container auf 100% (perl fhem.pl fhem.cfg).
(3) Dann habe ich das SONOS-Device wieder aktiviert (disable=0).
(4) Das Produktiv-FHEM hat sich wieder erholt.
(5) Aber der Container mit "perl 00_SONOS.pm 4711 3 1" geht danach auf 100% CPU-Last.
(6) Ich führe ein Container-Restart des Sonos-Container aus
(7) und alles ist wieder normal.

Irgendwie habe ich das Gefühl, dass sich FHEM und SubProzess in einer solchen Konstellation nicht richtig unterhalten.


Reinerlein

Hi FunkOdyssey,

du musst auch noch am Sonos-Device Verbose auf 5 setzen. Die Angabe am Sonos-SubProzess ist nur für den initialen Loglevel zuständig.
Sorry, hätte ich auch früher schreiben können, habs nur selber übersehen...

Grüße
Reinerlein

FunkOdyssey

#32
Zitat von: Reinerlein am 13 Februar 2018, 12:31:40
du musst auch noch am Sonos-Device Verbose auf 5 setzen. Die Angabe am Sonos-SubProzess ist nur für den initialen Loglevel zuständig.
Sorry, hätte ich auch früher schreiben können, habs nur selber übersehen...

Macht doch nichts. Ich bin froh, dass du dich überhaupt mit mir beschäftigst. :-)

Das Log ist wohl zu groß fürs CODE-Tag. Daher habe ich die Datei als Anhang beigefügt.

Reinerlein

Hi FunkOdyssey,

da scheint ein Thread aus der vorherigen Verbindung noch übrig geblieben zu sein.

in deiner Zeitphase ab "13:21:46.541" dürfte niemals mehr der Thread 1 auftauchen (zu erkennen am SONOS1 nach dem Loglevel). Tut er aber...

Was genau passiert denn in den Zeilen vor dem Schnipsel hier:

attr Sonos disable 0 (100% CPU-Last)
====================================

2018.02.13 13:21:46.541 3: SONOS0: Connection accepted from ?d:58812
?

Dort müsste was von Threads stehen, die sich beenden... und nur noch Ausgaben der Ebene 0 auftauchen...

Grüße
Reinerlein

FunkOdyssey

Zitat von: Reinerlein am 13 Februar 2018, 15:31:53
Hi FunkOdyssey, da scheint ein Thread aus der vorherigen Verbindung noch übrig geblieben zu sein.
in deiner Zeitphase ab "13:21:46.541" dürfte niemals mehr der Thread 1 auftauchen (zu erkennen am SONOS1 nach dem Loglevel). Tut er aber...
Das ich jetzt nicht wirklich verstanden. Sorry.

Zitat von: Reinerlein am 13 Februar 2018, 15:31:53
Was genau passiert denn in den Zeilen vor dem Schnipsel hier:

attr Sonos disable 0 (100% CPU-Last)
====================================

2018.02.13 13:21:46.541 3: SONOS0: Connection accepted from ?d:58812
?

Dort müsste was von Threads stehen, die sich beenden... und nur noch Ausgaben der Ebene 0 auftauchen...


Hi, ich habe das Log nicht gekürzt, sondern einfach nur ein paar Leerzeilen mit der Überschrift eingefügt, um besser zu erkennen, was wann passiert ist. Es fehlt im Verlauf nicht eine Sekunde.

Als ich das "disable" gesetzt habe, ist NICHTS passiert.

Reinerlein

Hi FunkOdyssey,

du hast sowas von Recht. Der Part, der beim disablen dem SubProzess bescheid sagen sollte, ist überhaupt noch nicht geschrieben. Soll heißen: fehlt noch :-\
Momentan kann man nur Fhem beenden/neustarten, dabei wird dem SubProzess sauber mitgeteilt, dass man jetzt verschwinden wird...

Ok, zum Testen.
Kannst du die Prozedur "SONOS_StopSubProcess" folgendermaßen anpassen (so komplett wie unten):

sub SONOS_StopSubProcess($) {
my ($hash) = @_;

RemoveInternalTimer($hash);

# Wenn wir einen eigenen UPnP-Server gestartet haben, diesen hier auch wieder beenden,
# ansonsten nur die Verbindung kappen
if ($SONOS_StartedOwnUPnPServer) {
DevIo_SimpleWrite($hash, "shutdown\n", 2);
} else {
DevIo_SimpleWrite($hash, "disconnect\n", 2);
}
DevIo_CloseDev($hash);

setReadingsVal($hash, "state", 'disabled', TimeNow());
$hash->{STATE} = 'disabled';

# Alle SonosPlayer-Devices disappearen
for my $player (SONOS_getAllSonosplayerDevices()) {
SONOS_readingsBeginUpdate($player);
SONOS_readingsBulkUpdateIfChanged($player, 'presence', 'disappeared');
SONOS_readingsBulkUpdateIfChanged($player, 'state', 'disappeared');
SONOS_readingsBulkUpdateIfChanged($player, 'transportState', 'STOPPED');
SONOS_readingsEndUpdate($player, 1);

if (AttrVal($player->{NAME}, 'stateVariable', '') eq 'Presence') {
$player->{STATE} = 'disappeared';
}
}
}


Mal schauen, was der SubProzess dann macht...

Grüße
Reinerlein

FunkOdyssey

Oh, vielen Dank.
Ich mag es gar nicht ansprechen, aber wenn ich die 00_SONOS.pm bearbeite und speichere, so erscheint (ein ganz anderer) Fehler:
ERROR:
Too many arguments for main::SONOSPLAYER_SimulateCurrentTrackPosition at ./FHEM/00_SONOS.pm line 1570, near "$hash)" BEGIN not safe after errors--compilation aborted at ./FHEM/00_SONOS.pm line 2767.


Wäre es besser, die Datei außerhalb von FHEM zu bearbeiten?

Reinerlein

Das wäre wohl besser. Ich weiß nicht, wie dieser Fehler zustandekommen kann. An der Stelle hast du ja nix verändert...

FunkOdyssey

Wow, ist das schön. Das scheint zu funktionieren.

Ich habe die überarbeitete 00_SONOS.pm in beiden FHEM-Container abgelegt. Vermutlich hätte es im Sonos-Container gerreicht. :-)

Folgende Varianten habe ich ausprobiert:
- Disable des SONOS-Device im (Produktiv-)FHEM
- Neustart (Produktiv-)FHEM

Und mit Erfolg. Ich konnte in STDOUT des Sonos-Containers erkennen, wie die Prozesse beendet wurden.

Jetzt werde ich über die Tage mal beobachten, wie sich die SubProzesse verhalten, wenn das FHEM unerwartet beendet wird.

Vielen Dank, Reinerlein.

FunkOdyssey

Gerade festgestellt: Wenn ich den FHEM-Container über die Konsole neu starte, dann bin ich danach wieder auf 100%.

Kann man den SubProzessen nicht eine Art Heartbeat hinzufügen? So dass die autom. pausieren, wenn aus FHEM keine Rückmeldung kommt?

Reinerlein

Hi FunkOdyssey,

ja, das hatte ich mir schon gedacht...

Aber du schießt doch auch nicht einfach den Fhem-Prozess ab, oder?
Den solltest du doch im Normalfall sauber beenden, damit auch deine Zustände der Devices gesichert wird, und alles dort weitergeht, wo es angehalten wurde.

Ich werde aber trotzdem mal schauen, ob/was ich da einbauen kann...

Grüße
Reinerlein

FunkOdyssey

Leider passiert das in einer Docker-Umgebung relativ häufig.
Darf nicht - will ich auch nicht - mache ich aber leider immer wieder. Da fehlt mir noch die Docker-Erfahrung.
Offtopic: bei jeden ,,docker-compose up -d" wird ein Recreating des Containers durchgeführt. Und somit ein Neustart. Das muss ich noch in den Griff bekommen. 

Reinerlein

Hi,

bevor du ,,docker-compose up -d" aufrufst, musst du doch nur ein "stop" aufrufen, oder nicht?

FunkOdyssey

Nee, das sollte keinen Unterschied machen.
Ich stelle gerade fest, dass folgender Aufruf kein Recreating durchführt.

docker-compose up -d --no-recreate

Reinerlein

Hi FunkOdyssey,

kannst du nochmal einen Code zum Testen einfügen?

Am Ende der Input-Verarbeitung (ca. bei Zeile 9914):

if (defined($inp)) {
# Abschließende Zeilenumbrüche abschnippeln
$inp =~ s/[\r\n]*$//;

# Consume and send evt. reply
SONOS_Log undef, 5, "Received: '$inp'";
SONOS_Client_ConsumeMessage($so, $inp);
}

noch einen Else-Fall anfügen:

if (defined($inp)) {
# Abschließende Zeilenumbrüche abschnippeln
$inp =~ s/[\r\n]*$//;

# Consume and send evt. reply
SONOS_Log undef, 5, "Received: '$inp'";
SONOS_Client_ConsumeMessage($so, $inp);
} else {
$SONOS_Client_Selector->remove($so);
}


Danke schon mal...

Grüße
Reinerlein

FunkOdyssey

#45
Danke dir. Ich habe die Änderungen eingefügt.

Die gute Nachricht:
Ich schaffe es nicht, irgendwelche Container auf 100% CPU Last zu bringen.
Seit dem letzten Fix vom 13. Februar kann ich auch beliebig FHEM beenden und neu starten. Alles kein Problem.

Mit dem Fix vom 21. Februar kann sogar der Container unverhofft beendet werden.

Aber:
Ich habe einen minimalen Anstieg der CPU-Last. In dem Augenblick, in dem ich den Sonos-Container neu starte, gehen CPU- und RAM-Auslastung wieder runter (siehe Screenshot). Das sind aber nur minimale Unterschiede.




Nachtrag:

Ich habe noch einmal einen besseren Screenshot gemacht. CPU/RAM steigen nicht an, wenn der FHEM-Container gestoppt wird. Sondern erst, wenn dieser wieder gestartet wird und sich mit dem Sonos-Container verbindet.

Aber wie gesagt: Alles nur marginal. :-)

Reinerlein

Hi FunkOdyssey,

ich nochmal :)

Kannst du diesen Else-Zweig mal durch folgendes Ersetzen:

if (defined($inp)) {
# Abschließende Zeilenumbrüche abschnippeln
$inp =~ s/[\r\n]*$//;

# Consume and send evt. reply
SONOS_Log undef, 5, "Received: '$inp'";
SONOS_Client_ConsumeMessage($so, $inp);
} else {
# Wenn es der letzte war, dann Threads beenden, sonst nur aus der Liste werfen...
if ($SONOS_Client_Selector->count()) {
SONOS_Log undef, 1, "A Listener seems to be died, but other Listeners exists... leaving Threads alive...";
$SONOS_Client_Selector->remove($so);
} else {
SONOS_Log undef, 1, "Last Listener seems to be died... stopping Threads...";
SONOS_Client_ConsumeMessage($so, 'disconnect');
}

last;
}

Mal schauen, ob es besser wird...

Grüße
Reinerlein

FunkOdyssey

Hmm, leider nein. Mit jedem FHEM-Container-Restart schluckt der Sonos-Prozess 50 MB mehr an Speicher und benötigt 1% mehr CPU-Last. Sorry.

2018.02.24 20:10:49.840 1: SONOS2: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.24 20:10:49.860 1: SONOS3: Restore-Thread gestartet. Warte auf Arbeit...
2018.02.24 20:11:20.559 1: SONOS0: A Listener seems to be died, but other Listeners exists... leaving Threads alive...
2018.02.24 20:12:02.818 1: SONOS5: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.24 20:12:02.838 1: SONOS6: Restore-Thread gestartet. Warte auf Arbeit...
2018.02.24 20:16:24.337 1: SONOS0: A Listener seems to be died, but other Listeners exists... leaving Threads alive...
2018.02.24 20:16:51.253 1: SONOS8: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.24 20:16:51.279 1: SONOS9: Restore-Thread gestartet. Warte auf Arbeit...

Reinerlein

Hi FunkOdyssey,

argh... natürlich wieder mal ein PlusMinus-1-Fehler... sorry... :-[

Es muss im If-Statement >1 heißen, der gerade gestorbene muss ja noch mitgezählt werden, der steht zum Überprüfungszeitpunkt ja auch noch in der Liste...

Also dann so:

} else {
# Wenn es der letzte war, dann Threads beenden, sonst nur aus der Liste werfen...
if ($SONOS_Client_Selector->count() > 1) {
SONOS_Log undef, 1, "A Listener seems to be died, but other Listeners exists... leaving Threads alive...";
$SONOS_Client_Selector->remove($so);
} else {
SONOS_Log undef, 1, "Last Listener seems to be died... stopping Threads...";
SONOS_Client_ConsumeMessage($so, 'disconnect');
}

last;
}
Wobei hier nur die Prüfung auf >1 angepasst wurde....

Grüße
Reinerlein

FunkOdyssey

#49
Es tut mir echt leid, aber CPU- und RAM-Auslastung verdoppeln sich weiterhin.

2018.02.25 00:03:06.661 1: SONOS2: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.25 00:03:06.680 1: SONOS3: Restore-Thread gestartet. Warte auf Arbeit...
2018.02.25 00:03:43.254 1: SONOS0: A Listener seems to be died, but other Listeners exists... leaving Threads alive...
2018.02.25 00:04:10.510 1: SONOS5: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.25 00:04:10.530 1: SONOS6: Restore-Thread gestartet. Warte auf Arbeit...
2018.02.25 00:04:59.494 1: SONOS0: A Listener seems to be died, but other Listeners exists... leaving Threads alive...
2018.02.25 00:05:26.631 1: SONOS8: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.25 00:05:26.650 1: SONOS9: Restore-Thread gestartet. Warte auf Arbeit...


Ich schaffe es irgendwie nicht, in den zweiten Else-Teil mit "Last Listener... stopping threads" zu kommen. Komisch. Obwohl FHEM gestoppt wurde.

Reinerlein

Hi FunkOdyssey,

ich habe das bei mir mal durchdebuggt, und noch einen Denkfehler gefunden: Der Listener-Socket selbst ist ja auch in der Liste.
Es muss also "> 2" heißen (einmal Listener und einmal der Socket, der entfernt werden muss)...

Kannst du bitte nochmal ?
Danke :)

Grüße
Reinerlein

FunkOdyssey

Na natürlich kann ich das für dich ausprobieren. Ist ja nicht ganz uneigennützig. :-)




Wow, das sieht ja perfekt aus.


2018.02.25 14:05:48.708 1: SONOS2: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.25 14:05:48.727 1: SONOS3: Restore-Thread gestartet. Warte auf Arbeit...
2018.02.25 14:11:01.022 1: SONOS0: Last Listener seems to be died... stopping Threads...
2018.02.25 14:11:01.060 1: SONOS2: IsAlive-Thread wurde beendet.
2018.02.25 14:11:01.217 1: SONOS3: Restore-Thread wurde beendet.
2018.02.25 14:11:28.517 1: SONOS5: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.02.25 14:11:28.535 1: SONOS6: Restore-Thread gestartet. Warte auf Arbeit...


Ich danke dir vielmals für deine Unterstützung.
Ich war ja schon mit den Ergebnissen davor zufrieden. Nun ist es perfekt.

Reinerlein

Hi FunkOdyssey,

danke für die Rückmeldung, ich werde dass dann so übernehmen...

Grüße
Reinerlein

FunkOdyssey

Die Möglichkeit Sonos in einen Docker-Container auszulagern hatten ja bereits einige andere User zuvor. Ich bin ja nur auf den Zug aufgesprungen und bin froh, dass das alles überhaupt funktioniert.

Ich finde das angenehm, gewisse Zusatzkomponenten in Docker-Containern auszulagern. Ein Vorteil, den ich nie mehr missen möchte. Sicherlich hat das nun einigen Support von dir benötigt, aber es macht das FHEM somit ein wenig stabiler.

Merci Beaucoup, Reinerlein.

JoeALLb

Gibts das Dockerfile irgendwo zum ansehen?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

FunkOdyssey


FunkOdyssey

#56
HAT SICH ERLEDIGT.

Mein Gott. Zwei Tage habe ich gesucht. Dann habe ich den Post hier gemacht und kurz danach den Fehler gefunden.

Mein Sonos-Device war wie folgt definiert:
define Sonos SONOS dockerhost:4711 120 10 10

Ich bin in FHEM in den letzten Tagen schon häufiger darüber gestolpert, dass meine Namensauflösung nicht mehr funktioniert. Also habe ich es zu der IP geändert und es lief.

define Sonos SONOS <ipadresse>:4711 120 10 10

Ich wette darauf, dass die Labor-Fritzbox-Versionen daran schuld sind. :-(

Hier ist der Post nun zu Ende. Der Rest ist nicht mehr wichtig.








Ich brauche mal wieder eure Hilfe. Irgendetwas hat sich bei mir geändert und meine Sonos-Container-Mischung läuft irgendwie nicht mehr.

Ich starte einen fhem-sonos-Container wie folgt:
perl /opt/fhem/FHEM/00_SONOS.pm 4711 5 1

In Portainer habe ich folgenden Output:
   
2018.08.25 18:40:59.828 1: SONOS0: /opt/fhem/FHEM/00_SONOS.pm is started as standalone process...
2018.08.25 18:40:59.828 1: SONOS0: /opt/fhem/FHEM/00_SONOS.pm is listening to Port 4711


In meiner FHEM-Produktivumgebung (Nicht im host-Modus) habe ich im Sonos-Log trotz verbose=5 nur folgende Inhalte:

Das Sonos-Device ist hat angeblich den Status "opened".

2018-08-25_19:50:21 Sonos LastProcessAnswer: 1535219421.77086
2018-08-25_19:52:21 Sonos LastProcessAnswer: 1535219541.88011
2018-08-25_19:54:21 Sonos LastProcessAnswer: 1535219661.99452
2018-08-25_19:56:22 Sonos LastProcessAnswer: 1535219782.10677
2018-08-25_19:58:22 Sonos LastProcessAnswer: 1535219902.21905
2018-08-25_20:43:18 Sonos LastProcessAnswer: 1535222598.13317
2018-08-25_20:43:22 Sonos LastProcessAnswer: 1535222602.04125
2018-08-25_20:45:22 Sonos LastProcessAnswer: 1535222722.15243
2018-08-25_20:47:22 Sonos LastProcessAnswer: 1535222842.26468


Im FHEM-Log habe ich folgendes:
(ich habe aufgrund der Länge ein paar setValue/received-Zeilen weggelassen)

2018.08.25 20:41:56.583 3: Opening Sonos device dockerhost:4711
2018.08.25 20:41:56.585 3: SONOS0: Connection accepted from localhost:60004
2018.08.25 20:41:56.585 5: SW: Establish connection

2018.08.25 20:41:56.586 3: Sonos device opened
2018.08.25 20:41:57.085 4: SONOS0: A new Connector to list added. There are now 2 connectors in list.
2018.08.25 20:41:57.590 5: SONOS0: SetData:Sonos:5:-:syn:192.168.24.224,192.168.24.201:192.168.24.200,192.168.24.211,192.168.24.216,192.168.24.110:0:Sonos_Kueche,Sonos_Wohnzimmer:RINCON_B8E937B7C36201400_MR,RINCON_B8E937B7C31001400_MR
2018.08.25 20:41:57.590 5: SW: SetData:Sonos:5:-:syn:192.168.24.224,192.168.24.201:192.168.24.200,192.168.24.211,192.168.24.216,192.168.24.110:0:Sonos_Kueche,Sonos_Wohnzimmer:RINCON_B8E937B7C36201400_MR,RINCON_B8E937B7C31001400_MR

2018.08.25 20:41:57.590 5: SONOS0: Received: 'SetData:Sonos:5:-:syn:192.168.24.224,192.168.24.201:192.168.24.200,192.168.24.211,192.168.24.216,192.168.24.110:0:Sonos_Kueche,Sonos_Wohnzimmer:RINCON_B8E937B7C36201400_MR,RINCON_B8E937B7C31001400_MR'


2018.08.25 20:41:57.625 5: SW: StartThread

2018.08.25 20:41:57.625 5: SONOS0: Received: 'StartThread'
2018.08.25 20:41:57.650 1: SONOS1: UPnP-Thread gestartet.
2018.08.25 20:41:57.650 4: SONOS1: SONOS_Client_Data_Retreive(SONOS, attr, bookmarkSaveDir, .) -> DEFAULT
2018.08.25 20:41:57.650 4: SONOS1: Calling SONOS_LoadBookmarkValues("undef", "undef") ~ SaveDir: "."
2018.08.25 20:41:57.672 1: SONOS2: LongJobs-Thread gestartet. Prüfe auf LongJobs...
2018.08.25 20:41:57.691 4: SONOS3: SONOS_Client_Data_Retreive(SONOS, def, INTERVAL, 0) -> 120
2018.08.25 20:41:57.691 1: SONOS3: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2018.08.25 20:41:57.711 1: SONOS4: Restore-Thread gestartet. Warte auf Arbeit...
2018.08.25 20:42:24.611 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=
2018.08.25 20:42:24.614 5: SONOS0: FHEMWEB-AlbumURL:
2018.08.25 20:42:24.616 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.617 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.620 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-profiles.tunein.com%2Fs42828%2Fimages%2Flogog.png%3Ft%3D1
2018.08.25 20:42:24.623 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-profiles.tunein.com/s42828/images/logog.png?t=1
2018.08.25 20:42:24.626 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.626 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.688 5: SONOS0: Cover wurde neu geladen: http://cdn-profiles.tunein.com/s42828/images/logog.png?t=1
2018.08.25 20:42:24.690 5: SONOS0: TempFilename: /tmp/2DOn2ap12G.image
2018.08.25 20:42:24.693 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-profiles.tunein.com%2Fs45087%2Fimages%2Flogog.png
2018.08.25 20:42:24.695 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-profiles.tunein.com/s45087/images/logog.png
2018.08.25 20:42:24.696 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.696 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.744 5: SONOS0: Cover wurde neu geladen: http://cdn-profiles.tunein.com/s45087/images/logog.png
2018.08.25 20:42:24.746 5: SONOS0: TempFilename: /tmp/E_TM6xu1Gy.image
2018.08.25 20:42:24.752 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-profiles.tunein.com%2Fs25260%2Fimages%2Flogog.png
2018.08.25 20:42:24.756 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-profiles.tunein.com/s25260/images/logog.png
2018.08.25 20:42:24.758 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.759 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.795 5: SONOS0: Cover wurde neu geladen: http://cdn-profiles.tunein.com/s25260/images/logog.png
2018.08.25 20:42:24.797 5: SONOS0: TempFilename: /tmp/YrfV4ZPn0e.image
2018.08.25 20:42:24.802 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-profiles.tunein.com%2Fs96647%2Fimages%2Flogog.png%3Ft%3D153182
2018.08.25 20:42:24.804 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-profiles.tunein.com/s96647/images/logog.png?t=153182
2018.08.25 20:42:24.807 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.807 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.845 5: SONOS0: Cover wurde neu geladen: http://cdn-profiles.tunein.com/s96647/images/logog.png?t=153182
2018.08.25 20:42:24.846 5: SONOS0: TempFilename: /tmp/HVZCkKfCOQ.image
2018.08.25 20:42:24.851 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-radiotime-logos.tunein.com%2Fs20301g.png
2018.08.25 20:42:24.853 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-radiotime-logos.tunein.com/s20301g.png
2018.08.25 20:42:24.855 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.855 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.912 5: SONOS0: Cover wurde neu geladen: http://cdn-radiotime-logos.tunein.com/s20301g.png
2018.08.25 20:42:24.913 5: SONOS0: TempFilename: /tmp/ZP38QfHtdF.image
2018.08.25 20:42:24.920 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2Fcdn-radiotime-logos.tunein.com%2Fs8295g.png
2018.08.25 20:42:24.922 5: SONOS0: FHEMWEB-AlbumURL: http://cdn-radiotime-logos.tunein.com/s8295g.png
2018.08.25 20:42:24.925 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.925 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:24.962 5: SONOS0: Cover wurde neu geladen: http://cdn-radiotime-logos.tunein.com/s8295g.png
2018.08.25 20:42:24.963 5: SONOS0: TempFilename: /tmp/NSfftw6SG5.image
2018.08.25 20:42:24.967 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2F192.168.24.201%3A1400%2Fgetaa%3Fu%3Dx-sonosapi-radio%253Acatalog%25252fstations%25252fA2S2W34UF26XLR%25252f%252523chunk-XeSfatPuR-6ZI03KOIBWvQ%253Fsid%253D201%2526flags%253D8300%2526sn%253D5
2018.08.25 20:42:24.970 5: SONOS0: FHEMWEB-AlbumURL: http://192.168.24.201:1400/getaa?u=x-sonosapi-radio%3Acatalog%252fstations%252fA2S2W34UF26XLR%252f%2523chunk-XeSfatPuR-6ZI03KOIBWvQ%3Fsid%3D201%26flags%3D8300%26sn%3D5
2018.08.25 20:42:24.972 5: SONOS0: FHEMWEB-PlayerFound: 1
2018.08.25 20:42:24.973 5: SONOS0: FHEMWEB-PlayerInactive: 1
2018.08.25 20:42:24.980 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2F192.168.24.201%3A1400%2Fgetaa%3Fu%3Dx-sonosapi-radio%253Acatalog%25252fstations%25252fASKR9EKHI9GS5%25252f%252523chunk-RcAyOPjcSY-NDYwMEnII1Q%253Fsid%253D201%2526flags%253D8300%2526sn%253D5
2018.08.25 20:42:24.981 5: SONOS0: FHEMWEB-AlbumURL: http://192.168.24.201:1400/getaa?u=x-sonosapi-radio%3Acatalog%252fstations%252fASKR9EKHI9GS5%252f%2523chunk-RcAyOPjcSY-NDYwMEnII1Q%3Fsid%3D201%26flags%3D8300%26sn%3D5
2018.08.25 20:42:24.984 5: SONOS0: FHEMWEB-PlayerFound: 1
2018.08.25 20:42:24.984 5: SONOS0: FHEMWEB-PlayerInactive: 1
2018.08.25 20:42:24.988 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=https%3A%2F%2Fmosaic.scdn.co%2F640%2F16407ddd1559631a2e600b863e697b1d6085a1d21d2bea5b2a56200d448d02d88645e0b7d29c5091790c816051aef43ae2a0fd8a3a84d82ae40c3cdcd353d92c8fd754f652eb7c489584a18b1ca2e0ee
2018.08.25 20:42:24.989 5: SONOS0: FHEMWEB-AlbumURL: https://mosaic.scdn.co/640/16407ddd1559631a2e600b863e697b1d6085a1d21d2bea5b2a56200d448d02d88645e0b7d29c5091790c816051aef43ae2a0fd8a3a84d82ae40c3cdcd353d92c8fd754f652eb7c489584a18b1ca2e0ee
2018.08.25 20:42:24.990 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:42:24.990 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:42:25.079 5: SONOS0: Cover wurde neu geladen: https://mosaic.scdn.co/640/16407ddd1559631a2e600b863e697b1d6085a1d21d2bea5b2a56200d448d02d88645e0b7d29c5091790c816051aef43ae2a0fd8a3a84d82ae40c3cdcd353d92c8fd754f652eb7c489584a18b1ca2e0ee
2018.08.25 20:42:25.080 5: SONOS0: TempFilename: /tmp/iskvLuNdMm.image
2018.08.25 20:42:25.094 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2F192.168.24.224%3A1400%2Fgetaa%3Fu%3Dx-sonosapi-radio%253Acatalog%25252fstations%25252fA2S2W34UF26XLR%25252f%252523chunk-XeSfatPuR-6ZI03KOIBWvQ%253Fsid%253D201%2526flags%253D8300%2526sn%253D5
2018.08.25 20:42:25.097 5: SONOS0: FHEMWEB-AlbumURL: http://192.168.24.224:1400/getaa?u=x-sonosapi-radio%3Acatalog%252fstations%252fA2S2W34UF26XLR%252f%2523chunk-XeSfatPuR-6ZI03KOIBWvQ%3Fsid%3D201%26flags%3D8300%26sn%3D5
2018.08.25 20:42:25.099 5: SONOS0: FHEMWEB-PlayerFound: 1
2018.08.25 20:42:25.100 5: SONOS0: FHEMWEB-PlayerInactive: 1
2018.08.25 20:42:25.103 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=http%3A%2F%2F192.168.24.224%3A1400%2Fgetaa%3Fu%3Dx-sonosapi-radio%253Acatalog%25252fstations%25252fASKR9EKHI9GS5%25252f%252523chunk-RcAyOPjcSY-NDYwMEnII1Q%253Fsid%253D201%2526flags%253D8300%2526sn%253D5
2018.08.25 20:42:25.105 5: SONOS0: FHEMWEB-AlbumURL: http://192.168.24.224:1400/getaa?u=x-sonosapi-radio%3Acatalog%252fstations%252fASKR9EKHI9GS5%252f%2523chunk-RcAyOPjcSY-NDYwMEnII1Q%3Fsid%3D201%26flags%3D8300%26sn%3D5
2018.08.25 20:42:25.107 5: SONOS0: FHEMWEB-PlayerFound: 1
2018.08.25 20:42:25.107 5: SONOS0: FHEMWEB-PlayerInactive: 1
2018.08.25 20:42:25.110 5: SONOS0: FhemWebCallback: /sonos/cover/empty.jpg
2018.08.25 20:42:25.111 5: SONOS0: Cover: /empty.jpg
2018.08.25 20:42:56.470 1: SONOS0: Modify SonosPlayer-Device: Sonos_Kueche
2018.08.25 20:43:18.010 5: SW: DoWork:RINCON_B8E937B7C36201400_MR:getCurrentTrackPosition:

2018.08.25 20:43:18.011 5: SONOS0: Received: 'DoWork:RINCON_B8E937B7C36201400_MR:getCurrentTrackPosition:'
2018.08.25 20:43:18.020 3: SONOS1: ProxyObject does not exists
2018.08.25 20:43:18.020 4: SONOS1: SONOS_Client_Notifier(DoWorkAnswer:RINCON_B8E937B7C36201400_MR:LastActionResult:CheckProxyObject-ERROR: SonosPlayer disappeared?)
2018.08.25 20:43:18.113 5: SONOS0: Received from UPnP-Server: 'DoWorkAnswer:RINCON_B8E937B7C36201400_MR:LastActionResult:CheckProxyObject-ERROR: SonosPlayer disappeared?'
2018.08.25 20:43:18.115 4: SONOS0: DoWorkAnswer arrived for Sonos_Kueche->LastActionResult: 'CheckProxyObject-ERROR: SonosPlayer disappeared?'
2018.08.25 20:43:21.937 5: SW: DoWork:RINCON_B8E937B7C36201400_MR:getRadiosWithCovers:

2018.08.25 20:43:21.938 5: SONOS0: Received: 'DoWork:RINCON_B8E937B7C36201400_MR:getRadiosWithCovers:'
2018.08.25 20:43:21.939 3: SONOS1: ProxyObject does not exists
2018.08.25 20:43:21.939 4: SONOS1: SONOS_Client_Notifier(DoWorkAnswer:RINCON_B8E937B7C36201400_MR:LastActionResult:CheckProxyObject-ERROR: SonosPlayer disappeared?)
2018.08.25 20:43:22.040 5: SONOS0: Received from UPnP-Server: 'DoWorkAnswer:RINCON_B8E937B7C36201400_MR:LastActionResult:CheckProxyObject-ERROR: SonosPlayer disappeared?'
2018.08.25 20:43:22.040 4: SONOS0: DoWorkAnswer arrived for Sonos_Kueche->LastActionResult: 'CheckProxyObject-ERROR: SonosPlayer disappeared?'
2018.08.25 20:43:24.859 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=
2018.08.25 20:43:24.861 5: SONOS0: FHEMWEB-AlbumURL:
2018.08.25 20:43:24.864 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:43:24.865 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:43:28.869 5: SW: DoWork:SONOS:SaveBookmarks:

2018.08.25 20:43:28.869 5: SONOS0: Received: 'DoWork:SONOS:SaveBookmarks:'
2018.08.25 20:43:28.880 4: SONOS1: SONOS_Client_Data_Retreive(SONOS, attr, bookmarkSaveDir, .) -> DEFAULT
2018.08.25 20:43:28.880 4: SONOS1: Calling SONOS_SaveBookmarkValues("undef", "undef") ~ SaveDir: "."
2018.08.25 20:44:54.111 5: SONOS0: FhemWebCallback: /sonos/proxy/aa?url=
2018.08.25 20:44:54.113 5: SONOS0: FHEMWEB-AlbumURL:
2018.08.25 20:44:54.115 5: SONOS0: FHEMWEB-PlayerFound: 0
2018.08.25 20:44:54.116 5: SONOS0: FHEMWEB-PlayerInactive: 0
2018.08.25 20:45:22.049 5: SW: DoWork:undef:refreshProcessAnswer:

2018.08.25 20:45:22.049 5: SONOS0: Received: 'DoWork:undef:refreshProcessAnswer:'
2018.08.25 20:45:22.058 4: SONOS1: SONOS_Client_Notifier(rePing:undef::)
2018.08.25 20:45:22.151 5: SONOS0: Received from UPnP-Server: 'rePing:undef::'
2018.08.25 20:47:22.161 5: SW: DoWork:undef:refreshProcessAnswer:

2018.08.25 20:47:22.161 5: SONOS0: Received: 'DoWork:undef:refreshProcessAnswer:'
2018.08.25 20:47:22.162 4: SONOS1: SONOS_Client_Notifier(rePing:undef::)
2018.08.25 20:47:22.263 5: SONOS0: Received from UPnP-Server: 'rePing:undef::'




Irgendwie aktualisiert sich gar nichts mehr. Es scheint als wäre die Verbindung zu den Playern weg.

Kann irgendjemand hier etwas erkennen?

Danke.

Otto

Hi FunkOdyssey,

hast du das Dockerfile so gelassen?
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

FunkOdyssey


Otto

Stimmt macht ja auch Sinn.

Dann kann ja auch Sonos im fhem container laufen.

Danke.
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic


AndreM

Zitat von: FunkOdyssey am 17 September 2018, 15:31:49
Ja, ich wollte es aber irgendwann auf fhem/fhem umstellen.
https://github.com/docker-home-automation-stack/fhem-docker?files=1

Schönen Guten Abend,
hat sich hier bereits was getan? Funktioniert Sonos auch mit dem fhem/fhem Dockerimage und wenn ja WIE??  ;D

Schönen Gruß
Andre

AndreM

Hallo zusammen,
nach längerem warten und zögern habe ich jetzt doch nochmal den Versuch unternommen, SOnos in mein fhem/fhem docker container vie sonos container wie hier beschrieben zu implementieren.

Ich betreibe nun den fhem-sonos container und den fhem/fhem container wie folgt.

fhem-sonos:

############################################################################
# FHEM SONOS
#############################################################################

# Image und Version
# Debian --> debian:jessie
# RPi    --> resin/rpi-raspbian:latest
# Ubuntu --> ubuntu:latest
FROM debian:jessie

MAINTAINER Erdmaennchen <ich@welt.com>

############################################################################
# Benutzdefinierte Parameter
############################################################################

# Timezone
ENV TZ="Europe/Berlin"

#F HEM
ENV FHEM_VERSION 5.8

############################################################################
# Laufwerke (docker volume) erstellen
############################################################################

# Dockerfile             Docker volume erstellen
# docker-compose (yml)   Docker volume in container mounten

# VOLUME /my_vol

############################################################################
# Portfreigabe
############################################################################

# host

############################################################################
# Update/Install/Zeitzone
############################################################################

# Standart Pakete installieren
ARG PACKAGE="nano wget git-core curl apt-transport-https usbutils net-tools tar xz-utils"

# set version label
ARG BUILD_DATE
ARG VERSION
LABEL build_version="Version:- ${VERSION} Build-date:- ${BUILD_DATE}"

# Develepor Commands
ARG _clean="cd / && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*"
ARG _apt_clean="eval apt-get clean && $_clean"
ARG _update="eval apt-get update && apt-get upgrade -y --force-yes"
ARG _install="eval apt-get install -y --force-yes"
ARG _deinstall="eval apt-get purge -qq"

# Develepor Parameter
ENV DEBIAN_FRONTEND noninteractive
ENV TERM xterm

# Updates & Dist-Upgrades installieren
RUN $_update && \
apt-get install -y --force-yes --no-install-recommends apt-utils && \
apt-get dist-upgrade -y --force-yes

# Standart Pakete installieren
RUN $_install $PACKAGE

# Zeitzone einstellen
RUN echo ${TZ} > /etc/timezone && dpkg-reconfigure tzdata

############################################################################
# Pakete installieren
############################################################################

# non-free & contrib Quellen hinzufügen (snmp-mibs-downloader)
RUN sed -i "s/$/ contrib non-free/g" etc/apt/sources.list

# Neue Quellen updaten & Install dependencies
RUN $_update && $_install \
perl \
etherwake \
dfu-programmer \
build-essential \
snmpd \
snmp \
snmp-mibs-downloader \
telnet \
sqlite3 \
samba \
samba-common-bin \
lirc

# Install perl packages
RUN $_install \
libavahi-compat-libdnssd-dev \
libalgorithm-merge-perl \
libclass-dbi-mysql-perl \
libclass-isa-perl \
libcommon-sense-perl \
libdatetime-format-strptime-perl \
libdbi-perl \
libdevice-serialport-perl \
libdpkg-perl \
liberror-perl \
libfile-copy-recursive-perl \
libfile-fcntllock-perl \
libio-socket-ip-perl \
libio-socket-ssl-perl \
libjson-perl \
libjson-xs-perl \
libmail-sendmail-perl \
libsocket-perl \
libswitch-perl \
libsys-hostname-long-perl \
libterm-readkey-perl \
libterm-readline-perl-perl \
libwww-perl \
libxml-simple-perl \
libdbd-sqlite3-perl \
libtext-diff-perl \
libsoap-lite-perl \
libxml-parser-lite-perl

# Install für SONOS
#RUN cpan SOAP::Lite

# Install fhem
RUN wget https://fhem.de/fhem-${FHEM_VERSION}.deb && dpkg -i fhem-${FHEM_VERSION}.deb
RUN userdel fhem

WORKDIR "/opt/fhem"

# Update Config kopieren
COPY /data/fhem.cfg.update ./fhem.cfg

# FEHM starten zum Updaten (durch notify in fhem.cfg)
RUN perl fhem.pl fhem.cfg | tee /opt/fhem/log/fhem.log

############################################################################
# CleanUp
############################################################################

RUN $_update && $_apt_clean

############################################################################
# Start-Script
############################################################################

COPY entrypoint.sh /entrypoint.sh
CMD bash /entrypoint.sh


docker-compose.yml (Auschnitte):

############################################################################
# Service: FHEM
############################################################################

    fhem:
        restart: always
        ports:
            - "8083:8083"
            - "7072:7072"
            - "3000:3000"
            - "4711:4711"
            - "1900:1900/udp"
        image: fhem/fhem:latest
        privileged: true
        devices:
            - "/dev/ttyACM0:/dev/ttyACM0"
        volumes:
            - ./fhem/core/:/opt/fhem/
            - /dev/serial/by-id:/dev/serial/by-id

        network_mode: "bridge"

        depends_on:
            - "sonos"

        environment:
            FHEM_UID: 0
            FHEM_GID: 1000
            TIMEOUT: 10
            RESTART: 1
            TELNETPORT: 7072
            TZ: Europe/Berlin


############################################################################
# Service: SONOS
############################################################################
           
    sonos:
        container_name: fhem_sonos
        build: fhem_sonos
        volumes:
            - ./fhem_sonos/entrypoint.sh:/entrypoint.sh
        hostname: fhem_sonos
        network_mode: "host"

networks:
    fhem-network:
            driver: bridge


Im fhem/fhem Container habe ich jetzt in allen Varianten versucht das Sonos device anzulegen:

define Sonos SONOS <IP-Server>:4711 120 10 10
define Sonos SONOS sonos:4711 120 10 10
define Sonos SONOS fhem-sonos:4711 120 10 10
define Sonos SONOS localhost:4711 120 10 10

Hier steht denn je nach Variante mal "open" mal "disconnected"

Im fhem-log steht immer:


2020.07.01 19:09:40 3: Sonos device opened
2020.07.01 19:09:42 5: SONOS0: SetData:Sonos:5:-:syn:::0::
2020.07.01 19:09:42 5: SW: SetData:Sonos:5:-:syn:::0::
2020.07.01 19:09:42 5: SONOS0: Received: 'SetData:Sonos:5:-:syn:::0::'
2020.07.01 19:09:42 5: SONOS0: SetValues:SONOS:disable=0|INTERVAL=120|NAME=Sonos
2020.07.01 19:09:42 5: SW: SetValues:SONOS:disable=0|INTERVAL=120|NAME=Sonos
2020.07.01 19:09:42 5: SONOS0: Received: 'SetValues:SONOS:disable=0|INTERVAL=120|NAME=Sonos'
2020.07.01 19:09:42 5: SW: StartThread
2020.07.01 19:09:42 5: SONOS0: Received: 'StartThread'
2020.07.01 19:09:42 1: SONOS1: UPnP-Thread gestartet.
2020.07.01 19:09:42 4: SONOS1: SONOS_Client_Data_Retreive(SONOS, attr, bookmarkSaveDir, .) -> DEFAULT
2020.07.01 19:09:42 4: SONOS1: Calling SONOS_LoadBookmarkValues("undef", "undef") ~ SaveDir: "."
2020.07.01 19:09:42 1: SONOS2: LongJobs-Thread gestartet. Prüfe auf LongJobs...
2020.07.01 19:09:43 4: SONOS3: SONOS_Client_Data_Retreive(SONOS, def, INTERVAL, 0) -> 120
2020.07.01 19:09:43 1: SONOS3: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 120 Sekunden...
2020.07.01 19:09:43 1: SONOS4: Restore-Thread gestartet. Warte auf Arbeit...



Im fhem-sonos Container habe ich nichts weiter konfiguriert.
Dort erscheint die Fehlermeldung:


2020.07.01 18:45:52.848 0: SONOS0: Retries left (wait 30s): 1
2020.07.01 18:46:22.890 0: SONOS0: Can't bind Port 4711: Bind failed: Address already in use at /opt/fhem/FHEM/00_SONOS.pm line 9870.

2020.07.01 18:46:22.891 0: SONOS0: Retries left (wait 30s): 0
Bind failed... at /opt/fhem/FHEM/00_SONOS.pm line 9879.



  • Wo kann ich jetzt ansetzten zu suche?
  • Habe ich vergessen Einstellungen vorzunehmen?

ch.eick

Zitat von: AndreM am 22 April 2020, 16:08:56
hat sich hier bereits was getan? Funktioniert Sonos auch mit dem fhem/fhem Dockerimage und wenn ja WIE??  ;D
Hallo zusammen,

es ist zwar schon etwas länger her, aber ich schreibe mal trotzdem.

Im Dez./Jan. bin ich auf Docker umgestiegen und habe fhem/fhem als Basis genommen.
Die FHEM Installation habe ich einfach rüber kopiert und dann noch aufgeräumt.
Leider kann ich nicht sagen, ob Sonos sofort wieder lief, da ich zuerst noch folgendes Problem hatte. Ein SMA Energie Manager lief nicht, da die fhem/fhem Installation kein udp zu lies. Das scheint im Docker ein Problem zu sein. Daraufhin musste ich dann mangels weiterer Kenntnisse auf "network_mode host" umstellen, wodurch dann alle Container mit der Host IP erreichbar sind, so wie es vorher bei der Installation ohne Docker ja auch gewesen ist.

Ausschnitte aus der docker-compose.yml

version: '3.3'

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/24

...snip...

  fhem:
    image: fhem/fhem:latest
    restart: always
    network_mode: host
    privileged: true

...snip...

Hierdurch gingen dann die udp Pakete wieder wie vorher auch, was anscheinend dann auch für die SONOS udp Verbindung passend war.
Später habe ich dann auch irgendwann nach Sonos geschaut, aber da lief es bereits schon.
Den separaten Sonos Docker Container habe ich noch nicht getestet.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

FunkOdyssey

Offtopic: Denkt daran, dass ihr den Docker-Container und Image löscht und neu anlegen lasst, da es vor wenigen Tagen ein neues Update von Reinerlein gegeben hat.

ch.eick

Zitat von: FunkOdyssey am 02 Juli 2020, 11:44:52
Offtopic: Denkt daran, dass ihr den Docker-Container und Image löscht und neu anlegen lasst, da es vor wenigen Tagen ein neues Update von Reinerlein gegeben hat.
Das habe ich mich bisher noch nicht getraut. Sind dann alle debian Updates drin?


services:
  fhem:
    image: fhem/fhem:latest
    restart: always
    network_mode: host
    privileged: true
#    devices:
#      - "/dev/ttyACM0:/dev/ttyACM0"
    volumes:
      - "./core/:/opt/fhem/"
    environment:
      PIP_PKGS: "vallox_websocket_api fhem"
      CPAN_PKGS: "Crypt::OpenSSL::AES XML::Bare"
      FHEM_UID: 6061
      FHEM_GID: 6061
      TIMEOUT: 10
      RESTART: 1
      TELNETPORT: 7072
      TZ: Europe/Berlin
    depends_on:
      - "mysql"
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

rohlande

#66
Hallo Zusammen,

Ich habe das Problem mit dem aktuellen Docker Container nicht.#Aber die SMB Problematik bekomme ich nicht gelöst. --> einfach auf localhost mappen. dann geht alles.
Ich verwende den Container mit einer MCVLAN auf einer Synology im Portainer. Läuft bisher sehr stabil....
2021.01.06 09:29:07.996 1: SONOS2: LongJobs-Thread gestartet. Prüfe auf LongJobs...

2021.01.06 09:29:08.054 1: SONOS3: IsAlive-Thread gestartet. Warte 120 Sekunden und pruefe dann alle 30 Sekunden...

2021.01.06 09:29:08.061 2: SONOS1: Discover Sonosplayer 'Wohnzimmer' (S12) Software Revision 12.2.2 with ID 'RINCON_949F3EF627E601400_MR'

2021.01.06 09:29:08.114 1: SONOS4: Restore-Thread gestartet. Warte auf Arbeit...

2021.01.06 09:29:08.998 2: SONOS1: SonosPlayer 'Wohnzimmer' (S12) with ID 'RINCON_949F3EF627E601400_MR' is already defined (as 'Sonos_Wohnzimmer') and will only be updated

2021.01.06 09:29:10.118 2: SONOS1: SonosPlayer 'Wohnzimmer' is now updated

2021.01.06 09:29:10.135 2: SONOS1: Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009359

2021.01.06 09:29:10.149 2: SONOS1: Rendering-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009360

2021.01.06 09:29:10.162 2: SONOS1: GroupRendering-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009361

2021.01.06 09:29:10.173 2: SONOS1: ContentDirectory-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009362

2021.01.06 09:29:10.185 2: SONOS1: Alarm-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009363

2021.01.06 09:29:10.197 2: SONOS1: ZoneGroupTopology-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009364

2021.01.06 09:29:10.208 2: SONOS1: DeviceProperties-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009365

2021.01.06 09:29:10.466 2: SONOS1: MusicServices-Service-subscribing successful with SID=uuid:RINCON_949F3EF627E601400_sub0000009366

2021.01.06 09:29:10.466 3: SONOS1: Discover: End of discover-event for "Wohnzimmer".

2021.01.06 09:29:10.489 3: SONOS1: Event: Received Transport-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.571 3: SONOS1: Event: End of Transport-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.581 3: SONOS1: Event: Received GroupRendering-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.581 3: SONOS1: Event: End of GroupRendering-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.592 3: SONOS1: Event: Received Alarm-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.608 3: SONOS1: Event: End of Alarm-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.620 3: SONOS1: Event: Received ZoneGroupTopology-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.629 3: SONOS1: Event: End of ZoneGroupTopology-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.642 3: SONOS1: Event: Received DeviceProperties-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.643 3: SONOS1: Event: End of DeviceProperties-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.655 3: SONOS1: Event: Received MusicServices-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.656 3: SONOS1: Event: End of MusicServices-Event for Zone "Sonos_Wohnzimmer".

2021.01.06 09:29:10.671 3: SONOS1: Event: Received ContentDirectory-Event for Zone "Sonos_Wohnzimmer".


Sieht gut aus und ich kann auch alles, bis auf Sprachausgabe verwenden.
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

Otto123

Hallo Christian,

vielleicht können wir das im passenden Thread machen?
https://forum.fhem.de/index.php?topic=111711.msg1303460#msg1303460

In diesem geht es ja weder um den sonos2mqtt docker container noch um sonos2mqtt sondern um das alte sonos Modul im Docker Container.

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

ch.eick

Zitat von: Otto123 am 01 April 2024, 11:01:00vielleicht können wir das im passenden Thread machen?
Hallo Otto,
ich habe es gerade umgezogen
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick