Ankündigung

Einklappen

PLUGINS

Bitte im Titel immer zuerst den Namen des Plugins hinschreiben
Mehr anzeigen
Weniger anzeigen

Sonos4Loxone Version 3.4.4 - UDP-Daten senden an Miniserver funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sonos4Loxone Version 3.4.4 - UDP-Daten senden an Miniserver funktioniert nicht

    Ich versuche seit einiger Zeit nun Daten per UDP über den loxberry, der an und für sich sehr gut funktioniert, an meinen MS zu übermitteln.
    Dazu verwende ich den UDP-Port 8750 in beiden Systemen.

    Leider bekomme ich im LOG wie auch bei Aufruf über den Browser über: http://192.168.178.151/plugins/sonos...n=getsonosinfo immer folgenden Fehler:

    Notice: Undefined index: in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/Loxone.php on line 46

    Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php on line 2805

    Warning: fsockopen(): unable to connect to :1400 (php_network_getaddresses: getaddrinfo failed: No address associated with hostname) in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php on line 2805

    Fatal error: Uncaught Exception: Error opening socket: php_network_getaddresses: getaddrinfo failed: No address associated with hostname (0) in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php:2807 Stack trace:
    #0 /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php(1746): PHPSonos->sendPacket('POST /MediaRend...')
    #1 /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/Loxone.php(47): PHPSonos->GetTransportInfo()
    #2 /opt/loxberry/webfrontend/html/plugins/sonos4lox/Sonos.php(644): sendUDPdata()
    #3 /opt/loxberry/webfrontend/html/plugins/sonos4lox/index.php(20): require_once('/opt/loxberry/w...')
    #4 {main}
    thrown in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php on line 2807

    Habe mir einmal die CFG- und PHP-Files vom Plugin angesehen und vermute, dass der Hostname irgendwie nicht mit der IP-Adresse aufgelöst werden kann. Interessanter Weise funktioniert z.B. der UDP-Empfang von Weather4Loxone problemlos am UDP-Port 7000 (auch ohne Portforwarding am Router)

    player.cfg:
    ; Config::Simple 4.59
    ; Sat Aug 11 17:43:47 2018

    [SONOSZONEN]
    wohnzimmer[]=192.168.178.193,RINCON_000E58F3367001400,s Play:3,75,50,100
    schlafzimmer[]=192.168.178.190,RINCON_000E58C2F11A01400,s Play:1,75,50,100
    kueche[]=192.168.178.194,RINCON_7828CA0745CC01400,s One,75,50,100

    sonos.cfg:
    ; Config::Simple 4.59
    ; Sat Aug 11 16:43:27 2018

    [LOXONE]
    LoxPort=8750
    Loxone=MINISERVER1
    LoxDaten=true

    [LOCATION]
    googlestreet=
    googletown=
    town=""
    googlekey=
    region=

    [TTS]
    secret-key=
    messageLang=de-DE
    API-key=mein API-Key
    t2s_engine=1001
    voice=
    volrampto=
    rampto=

    [VARIOUS]
    CALDav2=""
    announceradio=
    CALDavMuell=""

    [RADIO]
    radio[5]=104.6 RTL Berlin,http://streaming.fueralle.org:8000/Radio-F.R.E.I.m3u
    radio[2]=Ö1,http://mp3stream3.apasf.apa.at:8000/listen.pls
    radio[7]=FM4,http://mp3stream1.apasf.apa.at:8000/listen.pls
    radio[4]=Radio Niederösterreich,http://mp3stream8.apasf.apa.at:8000/listen.pls
    radio[9]=Radio Stephansdom,http://srvhost24.serverhosting.apa.n...dstream128.m3u
    radio[1]=Antenne Bayern,http://mp3channels.webradio.antenne.de/antenne
    radio[8]=Ö3,http://mp3stream7.apasf.apa.at:8000/listen.pls
    radio[3]=Antenne Steiermark,http://mp3stream9.apasf.apa.at:8000/listen.pls
    radio[6]=WDR 2,http://www1.wdr.de/radio/player/radioplayer

    [MP3]
    volumeup=
    volumedown= file_gong=2_Airport_gong.mp3
    MP3store=5

    [SYSTEM]
    checkonline=true
    LOGLEVEL=7

    Hat hier jemand eine Idee oder das gleiche Problem schon gelöst?
    Das Plugin funktioniert ansonsten tadellos (Befehle an Sonos senden, Verknüpfungen im MS, etc.).
    Leider nur die "incoming-Seite" via UDP will und will nicht funktionieren :-((

    Vielen Dank für's Lesen und für eure Anregungen dazu!
    Zuletzt geändert von mbednar; 13.08.2018, 10:52.

  • #2
    Sonos ist PHP, W4Lox ist Perl - da kann es Unterschiede geben.

    Probier in der LoxBerry MS-Konfiguration mal die IP des MS einzutragen, statt des Hostnamens.
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar


    • #3
      Danke für Deine schnelle Rückmeldung!

      In der LoxBerry MS-Konfig hatte ich schon die lokale IP "im Klartext" des MS drinnen ...


      Kommentar


      • #4
        Einen Schritt weiter gekommen:

        http://192.168.178.151/plugins/sonos...kueche&action=info FUNKTIONIERT!
        http://192.168.178.151/plugins/sonos...kueche&action=getsonosinfo funktioniert NICHT! (Wie im LoxWiki unter https://www.loxwiki.eu/display/LOXBERRY/Sonos4Loxone angegeben) Es gibt nämlich nur ein info.php und keine getsonosinfo.php in der Installation.

        Das ist einmal sehr positiv und der Befehl funktioniert sowohl im Browser als auch im MS. Nur leider kommen trotzdem keine Daten per UDP an den MS :-(

        Kommentar


        • #5
          Hab deinen Fehler nochmal angesehen, und mit der MS-Config hat das nichts zu tun, sondern er erreicht aus irgendeinem Grund deine ‚kueche‘ nicht. Dass dann nichts per UDP kommt, ist, weil der Abruf vorher schon abgebrochen hat.
          Kann auch sein, dass ich ganz falsch liege.
          Mehr kann ich nicht sagen.
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar


          • #6
            Wie steht’s denn mit den anderen Zonen bei diesem Request? Was kommt dort zurück?
            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

            Kommentar


            • mbednar
              mbednar kommentierte
              Kommentar bearbeiten
              Mit getsonosinfo als "action" kommt genau der gleiche Fehler wie oben angeführt. Ist bei jeder meiner drei Zonen gleich.

          • #7
            Hallo, ich hatte dazu schonmal geschrieben, vielleicht habe ich ein ähnliches Problem. Dieser Befehl funktionierte bisher einwandfrei, jetzt wird dieser Fehler ausgegeben:

            Fatal error
            : Uncaught Exception: Error sending command: HTTP/1.1 500 Internal Server Error
            CONTENT-LENGTH: 348
            CONTENT-TYPE: text/xml; charset="utf-8"
            EXT:
            Server: Linux UPnP/1.0 Sonos/44.2-54230 (ZPS3)
            Connection: close

            s:ClientUPnPError in /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php:2817
            Stack trace:
            #0 /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php(1033): PHPSonos->sendPacket('POST /MediaRend...')
            #1 /opt/loxberry/webfrontend/html/plugins/sonos4lox/Play_T2S.php(397): PHPSonos->BecomeCoordinatorOfStandaloneGroup()
            #2 /opt/loxberry/webfrontend/html/plugins/sonos4lox/Sonos.php(623): sendmessage()
            #3 /opt/loxberry/webfrontend/html/plugins/sonos4lox/index.php(20): require_once('/opt/loxberry/w...')
            #4 {main}
            thrown in
            /opt/loxberry/webfrontend/html/plugins/sonos4lox/system/PHPSonos.php
            on line
            2817

            In einem anderen Zimmer gibt es keine Probleme. Es liegt also nicht am Loxberry. Hat jemand einen Tip?

            Der Befehl lautet: 192.xxxxxxxx//plugins/sonos4lox/index.php?zone=wohnzimmer&playgong=yes&action=send message&text=es%20klingelt%20an%20der%20haustür&vo lume=60



            Kommentar


            • #8
              Die Meldung bei der Zone "Schlafzimmer" zum Beispiel im Browser bei Eingabe von: http://192.168.178.151/plugins/sonos...n=getsonosinfo sieht wie auf dem Screenshot abgebildet aus. Gleich wie bei allen anderen Zonen.
              Zuletzt geändert von mbednar; 13.08.2018, 11:13.

              Kommentar


              • #9
                Sieh mal nach ob es bei Deinen Miniservern einen leeren Eintrag gibt.
                Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                Kommentar


                • #10
                  Nein, gibt nur EINEN EINZIGEN Eintrag eines Miniservers.

                  ;Config::Simple 4.59
                  ; Mon Aug 13 15:18:32 2018

                  [WEBSERVER]
                  PORT=80

                  [BINARIES]
                  DOS2UNIX=/usr/bin/dos2unix
                  BASH=/bin/bash
                  MAIL=/usr/bin/mailx
                  AWK=/usr/bin/awk
                  SENDMAIL=/usr/sbin/sendmail
                  ZIP=/usr/bin/zip
                  POWEROFF=/sbin/poweroff
                  GREP=/bin/grep
                  DATE=/bin/date
                  CHOWN=/bin/chown
                  CHMOD=/bin/chmod
                  UNZIP=/usr/bin/unzip
                  TAR=/bin/tar
                  REBOOT=/sbin/reboot
                  APT=/usr/bin/apt-get
                  CURL=/usr/bin/curl
                  NTPDATE=/usr/sbin/ntpdate
                  FIND=/usr/bin/find
                  GZIP=/bin/gzip
                  SUDO=/usr/bin/sudo
                  BZIP2=/bin/bzip2
                  DPKG=/usr/bin/dpkg
                  WGET=/usr/bin/wget

                  [MINISERVER1]
                  NOTE=
                  PORT=80
                  USECLOUDDNS=0
                  NAME=Miniserver
                  SECUREGATEWAY=
                  ENCRYPTRESPONSE=
                  IPADDRESS=192.168.178.150
                  CLOUDURLFTPPORT=
                  ADMIN=loxberry
                  PASS= mein Pass
                  CLOUDURL=

                  [UPDATE]
                  INTERVAL=7
                  INSTALLTYPE=install
                  RELEASETYPE=release

                  [BASE]
                  STARTSETUP=1
                  VERSION=1.2.2.2
                  MINISERVERS=1
                  INSTALLFOLDER=/opt/loxberry
                  SENDSTATISTIC=on
                  LANG=de
                  CLOUDDNS=dns.loxonecloud.com

                  [TIMESERVER]
                  METHOD=ntp
                  ZONE=Europe/Berlin
                  SERVER=0.europe.pool.ntp.org

                  [NETWORK]
                  INTERFACE=eth0
                  FRIENDLYNAME=IlFaro
                  TYPE=dhcp
                  IPADDRESS=
                  GATEWAY=
                  DNS=
                  MASK=
                  SSID=

                  [SSDP]
                  DISABLED=0
                  UUID=BECC2890-0C43-11E8-B34E-BB12A90C8772

                  Kommentar


                  • #11
                    Gestern habe ich das gesamte System - den loxberry inkl. Apps - komplett neu aufgesetzt und die Sonos4Lox neu installiert. Die einzelnen Lautsprecher werden ohne Probleme gefunden und die Zonen, bei mir drei, ordnungsgemäß angelegt.
                    Sämtliche ausgehenden Befehle sowie deren Einbindung in den MS funktionieren problemlos.
                    Auch die Anfragen über den Port 1400 des Sonos-Webinterface liefern die angeforderten Informationen.

                    Weiterhin funktioniert jedoch der Versand der UDP-Datenpakete und das Auslesen des Status mit der action:getsonosinfo nicht.

                    Anscheinend findet das Script die angelegten IP-Adressen zu den Zonen (Hostname) nicht bzw. kann diese dort nicht einsetzten. In der player.cfg sind diese jedoch eindeutig eingetragen.

                    Die PHPSonos.php beinhaltet den Aufruf für getsonosinfo und dort sollte die Adresse über die Zeile: $fp = fsockopen($this->address, 1400 /* Port */, $errno, $errstr, 10); eingesetzt werden:

                    Code:
                    /** 
                     * sendPacket - communicate with the device 
                     * 
                     * - <b>NOTE:</b> This function does send of a soap query and may filter xml answers 
                     * - <b>Returns:</b> Answer 
                     * 
                     * @return Array 
                     */ 
                    
                        private function sendPacket($content) 
                        { 
                            $fp = fsockopen($this->address, 1400 /* Port */, $errno, $errstr, 10); 
                            if (!$fp) 
                                throw new Exception("Error opening socket: ".$errstr." (".$errno.")"); 
                    
                            fputs ($fp, $content); 
                            $ret = ""; 
                            while (!feof($fp)) { 
                                $ret.= fgetss($fp,128); 
                            } 
                            fclose($fp); 
                    
                            if(strpos($ret, "200 OK") === false) 
                                throw new Exception("Error sending command: ".$ret); 
                    
                            $array = preg_split("/\r\n/", $ret); 
                    
                            $result = ""; 
                            if(strpos($ret, "TRANSFER-ENCODING: chunked") === false){ 
                                $result = $array[count($array) - 1]; 
                            }else{ 
                                $chunksStarted = false; 
                                $content       = false; 
                                foreach($array as $key => $value){ 
                                    if($value == ""){ 
                                        $chunksStarted = true; 
                                        continue; 
                                    } 
                                    if($chunksStarted === false) 
                                        continue; 
                                    if($content === false){ 
                                        if( $value === 0) 
                                            break; 
                                        $content = true; 
                                        continue; 
                                    } 
                                    $result = $result.$value; 
                                    $content = false; 
                                } 
                            }  
                    
                            return $result; 
                        }  
                    }
                    Genau das funktioniert anscheinend bei mir nicht - weshalb auch immer.

                    Hat jemand eine Idee, woher das Script zu diesem Hostnamen bzw. zur zugehörigen IP des jeweiligen Players/der Zone kommen sollte. Eigentlich steht sie in der player.cfg, aber dort dürfte das Script, zumindest in meinem Fall nicht nachsehen. Bin zu wenig PHP-Spezialist um das interpretieren zu können.
                    Oder handelt es sich möglicher Weise um einen falsch gesetzten Pfad?

                    Danke euch für jeden Input!
                    Angehängte Dateien

                    Kommentar


                    • #12
                      Ich kann euch berichten, dass mein loxberry (Version 1.2.3.2.) mit dem sonos4loxone-Plugin (Version: 3.4.4.) nunmehr ohne offensichtlichem Zutun UDP-Pakete auf dem eingestellten Port in Richtung MS "spuckt".
                      Es funktioniert alles wie gewollt. Zufriedenheit stellt sich ein ;-)

                      Anscheinend brauchte der loxberry ein paar Tage Ruhe - ich habe ihn seit meinem letzten Posting nicht mehr angerührt.

                      Was vielleicht ein Indiz sein kann - was mir aufgefallen ist:
                      Ich mußte und muß in der Konfiguration des sonos4loxone-Plugin immer 2x "speichern" bzw. den Datentransfer aus- und wieder einschalten (Schiebeschalter) bevor der UDP-Versand wirklich startet.

                      Aus meiner Sicht kann das Thema damit geschlossen werden. Danke an alle Interessierten!

                      Kommentar

                      Lädt...
                      X