Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos Anbindung

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

    Zitat von dafra Beitrag anzeigen
    Hast Du eine Ahnung, warum der Broker mit systemctl nicht hochkommt?
    Kannst du mir mal die
    Code:
    /etc/systemd/system/sonos-broker.service
    posten, bzw schauen, ob die richtig angelegt wurde?

    Zitat von dafra Beitrag anzeigen
    P.S: Gibt es eine Möglichkeit, den Broker "robust" gegen andere Encodings als UTF8 zu machnen? Über das Problem werdnen vermutlich viele stolpern...
    Prinzipiell schwierig. Im Moment muss ich noch Python3.2 mitschleppen, weil viele noch das alte Raspi-Image von Smarthome.py benutzen. Ab Python3.4 kann man ja mit
    Code:
    print(u'unicode text here')
    das Encoding explizit festlegen. Ich muss mir mal eine virtuelle Maschine anlegen und hier einen Workaround finden. Evetuell kann man ja auch einen Warnhinweis am Start ausgeben und auf ein FAQ verweisen.

    Danke für die Tests,

    Stefan
    Sonos

    Kommentar


      dafra

      Könntest du deine Änderungen an dem Encoding des Terminals nochmal auf ASCII zurück ändern und die sonos-broker Datei im Anhang ausprobieren?

      Angehängte Dateien
      Sonos

      Kommentar


        ok, habs wieder zurückgestellt. Ich hoffe ich habe dabei keinen Fehler gemacht, aber
        Code:
         python3 -c "import sys;print(sys.stdout.encoding)"
        ANSI_X3.4-1968
        das in #572 angehängte file habe ich nach /etc/default/ entpackt:
        Code:
        ll /etc/default
        ...
        -rw-rw-r--   1 root root 13338 Jan 14 13:27 sonos-broker
        Allerdings crasht der broker:
        Code:
        sonos-broker start
        Traceback (most recent call last):
          File "/usr/local/bin/sonos-broker", line 311, in <module>
            broker = SonosBroker(args.debug, config=config_path)
          File "/usr/local/bin/sonos-broker", line 84, in __init__
            config.read(config_path)
          File "/usr/lib/python3.5/configparser.py", line 696, in read
            self._read(fp, filename)
          File "/usr/lib/python3.5/configparser.py", line 1077, in _read
            raise MissingSectionHeaderError(fpname, lineno, line)
        configparser.MissingSectionHeaderError: File contains no section headers.
        file: '/etc/default/sonos-broker', line: 7
        'import codecs\n'
        Hab ichs an die falsche Stelle geschoben?

        Hier noch /etc/systemd/system/sonos-broker.service:
        Code:
          cat /etc/systemd/system/sonos-broker.service
        [Unit]
        Description=Sonos Broker
        After=network.target
        
        [Service]
        Type=simple
        ExecStart=/usr/local/sbin/sonos_broker start
        #ExecStop=/usr/local/sbin/sonos_broker
        
        [Install]
        WantedBy=default.target
        Zuletzt geändert von dafra; 14.01.2017, 21:07.

        Kommentar


          War die falsche Stelle. Du hast die Config-Datei überschrieben. Die mitgeliferte Datei kannst du einfach irgendwo ausführen, das ist die sonos-broker Startdatei.
          Vorher musst du sie noch ausführbar machen.

          Code:
          chmod +x sonos-broker
          ./sonos-broker
          Oder du ersetzt die Datei unter
          Code:
          /usr/local/bin
          .

          Da du die Config überschrieben hast, installiere am besten den Broker nochmal neu. Sorry das ich nicht ganz ausführlich war und dir die Umstände mache.

          Gruss,

          Stefan

          Sonos

          Kommentar


            Hallo Stefan,

            Keine Ursache - freut mich, wenn ich auch was beitragen kann (hoffentlich).

            Um Missvertständnisse zu vermeiden, kurz dargestellt, was ich gemacht habe:
            Code:
            sudo rm -rf /usr/local/bin/sonos*
            sudo rm -rf /usr/local/lib/python3.5/site-packages/*sonos*
            sudo rm -rf /usr/local/lib/python3.5/site-packages/soco
            mkdir /usr/local/bin/sonos
            cd /usr/local/bin/sonos
            wget https://github.com/pfischi/shSonos/raw/develop/server.sonos/dist/sonos-broker-1.0b1.tar.gz
            python3 -m pip -v install sonos-broker-1.0b1.tar.gz
            Bis hierher hat alles geklappt, keine Fehlermeldungen o.Ä.

            Dann die #572angehängte Datei runtergeladen und nach /usr/local/bin/sonos kopiert. Dann
            Code:
            chmod +x sonos-broker
            
             sonos-broker start
            -bash: /usr/local/bin/sonos-broker: No such file or directory
            
             ./sonos-broker start
            Traceback (most recent call last):
              File "./sonos-broker", line 318, in <module>
                locale.setlocale(locale.LC_ALL, '')
              File "/usr/lib/python3.5/locale.py", line 594, in setlocale
                return _setlocale(category, locale)
            locale.Error: unsupported locale setting
            
            python3 -c "import sys;print(sys.stdout.encoding)"
            ANSI_X3.4-1968
            Hab ich schon wieder was falsch?

            Gruß, Daniel

            Kommentar


              dafra Hast alles richtig gemacht. Ich muss das Probelm tatsächlich anders lösen. Zuerst werde ich einen Hinweis beim Start einbelden, sobald kein utf8 erkannt wird. Eventuell kann ich auch den logger direkt auf unicode stellen.

              Und was mir auch noch auffällt: tatsächlich ist im Startscript der Pfad falsch, es muss
              Code:
              /usr/local/bin/sonos-broker
              lauten, NICHT
              Code:
              /usr/local/sbin/smarthome
              .

              Danke für den Hinweis, ich mach heute noch eine v1.0b2 fertig, wo das gefixt ist.


              Edit: Version 1.0b2 ist hochgeladen, ich habe den Pfad korrigiert und dem Logger utf-8 mitgegeben. Wenns danach immer noch nicht funktioniert, verkrieche ich mich in meine Kammer und schliesse mich ein bis es funktioniert

              Gruss,

              Stefan
              Zuletzt geändert von pfischi; 15.01.2017, 16:02.
              Sonos

              Kommentar


                Ich habe beim Versuch beide Encodings durchzuspielen mir irgendwo "Reste" eingehandelt und bekomme es nicht mehr ans Laufen. Kannst du mal alle Verzeichnisse posten, wo was installiert wird? Ich würde gerne nochmal alles säubern und dir dann berichten.

                Zu den Versuchen (die ich jetzt nicht mehr nachstellen kann, daher alles aus dem Gedächtnis heraus geschrieben):

                Versuch 1: Installation mit Encoding UTF-8

                Hat alles geklappt, bis auf den start via systemctl. Aus dem Verzeichnis /etc/default heraus konnte ich den broker via sonos-broker start & starten, im sonos-cmd konnte ich den Lautsprecher nach einem update finden. Fehlermeldungen gabs nur wenn ich sonos-cmd mit ctrl+c beendet habe, über den "ordnungsgemäßen" Ausstieg via exit hat er sich nicht beschwert.

                Übrigens kam am Ende des Installationsskrips die Meldung, dass er noch Überreste der vorhegenden Installation (1.0b1) entfernt hat. Sehr cool, dieses Feature. Am besten wäre es natürlich, wenn das auch mit der Version 1.0b2 gehen würde, damit wäre obiges Problem vermutlich erschlagen ;-)

                Versuch 2: Installation mit Encoding ANSI_X3.4-1968:

                Hat ebenfalls geklappt, auch der start via systemctl. Allerdings habe ich nicht rausfinden können wo der sonos-cmd gelandet war. Vermutlich ging hier das "Reste-Problem" los, so das die zweite Installation schon nicht ganz sauber war. Ich kann auch nicht sagen, ob der broker sauber hochgekommen ist, ich habe in nur in der Prozessliste gesehen:
                Code:
                ps -ax | grep sonos
                24002 pts/8    Sl     0:01 /usr/bin/python3 /usr/local/bin/sonos-broker start
                Auf die Idee den Status via systemctl status sonos-broker zu überprüfen, bin ich erst gekommen, nachdem meine Probleme losgegangen waren...


                Gruß, Daniel

                Kommentar


                  dafra

                  Ok gehen wir mal die Stellen durch:

                  1. Sonos binaries
                  Code:
                  rm /usr/local/bin/sonos-broker
                  rm /usr/local/bin/sonos-cmd
                  2. Cofig-Datei
                  Code:
                  rm /etc/default/sonos-broker
                  3. Systemstart Skript
                  Code:
                  rm /etc/systemd/system/sonos-broker.service
                  4. (optional) die python-Bibliotheken
                  Code:
                  rm /usr/local/lib/python3.5/dist-packages/soco
                  rm /usr/local/lib/python3.5/dist-packages/lib_sonos
                  rm /usr/local/lib/python3.5/dist-packages/sonos*
                  Bei Punkt 4. kann dein Pfad eventuell etwas anders sein (glaube ich aber nicht). Danach müsste alles sauber sein und du könntest die Version 1.0b2 nochmal installieren.
                  In der Konfig unter
                  Code:
                  /etc/default/sonos-broker
                  kannst du da logging-Level auf debug setzen und in einem zweiten Terminalfenster mit
                  Code:
                  tail -f /tmp/sonos.log
                  trotz Service-Start mitplotten.

                  Danke,

                  Stefan
                  Sonos

                  Kommentar


                    irgendwas hat mit der vorherigen Installation nicht gestimmt:
                    Code:
                    rm /usr/local/bin/sonos-broker
                    rm: cannot remove '/usr/local/bin/sonos-broker': No such file or directory
                    
                    rm /usr/local/bin/sonos-cmd
                    rm: cannot remove '/usr/local/bin/sonos-cmd': No such file or directory
                    Zusätzlich zu Punkt 2-4 habe ich auch noch
                    Code:
                    sudo rm -rf /usr/local/lib/python3.5/site-packages/*sonos*
                    sudo rm -rf /usr/local/lib/python3.5/site-packages/soco
                    Neu installiert habe ich alles mit aktiviertem ANSI_X3.4-1968 encoding. Start über systemctl ging nicht, manueller Start liefert:
                    Code:
                    sonos-broker start
                    2017-01-15 20:26:46,450 DEBUG    MainThread   Google-TTS disabled! -- sonos-broker:__init__:194
                    Traceback (most recent call last):
                      File "/usr/local/bin/sonos-broker", line 305, in <module>
                        locale.setlocale(locale.LC_ALL, '')
                      File "/usr/lib/python3.5/locale.py", line 594, in setlocale
                        return _setlocale(category, locale)
                    locale.Error: unsupported locale setting
                    Code:
                    locale
                    locale: Cannot set LC_CTYPE to default locale: No such file or directory
                    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
                    locale: Cannot set LC_ALL to default locale: No such file or directory
                    LANG=de_DE.ANSI_X3.4-1968
                    LANGUAGE=de_DE.ANSI_X3.4-1968
                    LC_CTYPE="de_DE.ANSI_X3.4-1968"
                    LC_NUMERIC="de_DE.ANSI_X3.4-1968"
                    LC_TIME="de_DE.ANSI_X3.4-1968"
                    LC_COLLATE="de_DE.ANSI_X3.4-1968"
                    LC_MONETARY="de_DE.ANSI_X3.4-1968"
                    LC_MESSAGES="de_DE.ANSI_X3.4-1968"
                    LC_PAPER="de_DE.ANSI_X3.4-1968"
                    LC_NAME="de_DE.ANSI_X3.4-1968"
                    LC_ADDRESS="de_DE.ANSI_X3.4-1968"
                    LC_TELEPHONE="de_DE.ANSI_X3.4-1968"
                    LC_MEASUREMENT="de_DE.ANSI_X3.4-1968"
                    LC_IDENTIFICATION="de_DE.ANSI_X3.4-1968"
                    LC_ALL=de_DE.ANSI_X3.4-1968
                    Dann habe ich umgestellt auf UTF-8:
                    Code:
                    locale
                    LANG=de_DE.UTF-8
                    LANGUAGE=de_DE.UTF-8
                    LC_CTYPE="de_DE.UTF-8"
                    LC_NUMERIC="de_DE.UTF-8"
                    LC_TIME="de_DE.UTF-8"
                    LC_COLLATE="de_DE.UTF-8"
                    LC_MONETARY="de_DE.UTF-8"
                    LC_MESSAGES="de_DE.UTF-8"
                    LC_PAPER="de_DE.UTF-8"
                    LC_NAME="de_DE.UTF-8"
                    LC_ADDRESS="de_DE.UTF-8"
                    LC_TELEPHONE="de_DE.UTF-8"
                    LC_MEASUREMENT="de_DE.UTF-8"
                    LC_IDENTIFICATION="de_DE.UTF-8"
                    LC_ALL=de_DE.UTF-8
                    Zwischenfrage an der Stelle: utf-8 == UTF-8?

                    Broker lässt sich nicht über systemctl starten, aber manuell. Auch sonos-cmd läuft wie es soll.

                    Bei aktiviertem debug level kann ich den broker nicht mehr richtig dämonisieren - die Meldungen kommen trotzdem über die Konsole raus (auch nachdem man wieder in der Eingabeaufforderung war...)

                    Die Pfade im startskript scheinen jetzt zu passen:
                    Code:
                    cat /etc/systemd/system/sonos-broker.service
                    [Unit]
                    Description=Sonos Broker
                    After=network.target
                    
                    [Service]
                    Type=simple
                    ExecStart=/usr/local/bin/sonos_broker start
                    #ExecStop=/usr/local/bin/sonos_broker
                    
                    [Install]
                    WantedBy=default.targetroot
                    Im Anhang noch das /tmp/sonos-broker.log

                    Ich lasse mein System jetzt erst mal auf UTF-8 und versuche (im Laufe der Woche) das Plugin in smarthomeNG einzubinden. Falls ich noch was testen kann/soll, lasse es mich wissen.

                    Viele Grüße und Danke für deine Mühen,

                    Daniel
                    Angehängte Dateien

                    Kommentar


                      Ich habe gerade nochmal eine Version geamcht, wo zumindestens dein Fehler auch bei Ansi nicht mehr beim Starten zum Absturz führt.

                      Danke für deine Tests, kannst bei Gelegenheit ja nochmal die jetzige Version laufen lassen.


                      Gruss,

                      Stefan

                      Sonos

                      Kommentar


                        Habe es direkt noch ausprobiert. Installation klappt in UTF-8 und ANSI_X3.4-1968. Manuelles Starten funktioniert jetzt ebenfalls in beiden Encodings.
                        => Damit kannst du aus deiner Kammer wieder rauskriechen :-D

                        Ebenfalls gleich: in beiden Encodings (in beiden Installationsweisen) stürtzt der sonos-cmd beim List mit der selben Fehlermeldung ab:
                        Code:
                         sonos-cmd
                        Connecting to Sonos broker ...127.0.0.1 - - [15/Jan/2017 22:58:31] "POST / HTTP/1.1" 200 -
                         done!
                        
                        Welcome to Sonos Broker console!
                        =>> update
                        127.0.0.1 - - [15/Jan/2017 22:58:34] "POST / HTTP/1.1" 200 -
                        127.0.0.1 - - [15/Jan/2017 22:58:34] "POST / HTTP/1.1" 200 -
                        =>> list
                        
                        speaker(s):
                        -----------
                        Traceback (most recent call last):
                          File "/usr/local/bin/sonos-cmd", line 1811, in <module>
                            broker_cmd.cmdloop()
                          File "/usr/lib/python3.5/cmd.py", line 138, in cmdloop
                            stop = self.onecmd(line)
                          File "/usr/lib/python3.5/cmd.py", line 217, in onecmd
                            return func(arg)
                          File "/usr/local/bin/sonos-cmd", line 158, in do_list
                            print(speaker)
                        UnicodeEncodeError: 'ascii' codec can't encode character '\xfc' in position 46: ordinal not in range(128)
                        Wenn ich den Broker im debug modus starte, scheint er aber den Sonos im Netzwerk zu finden. Scheint daher nur ein Problem im cmd zu sein.

                        Nicht ganz klar ist mir warum der Start via systemctl nicht funktioniert:
                        Code:
                        systemctl status sonos-broker
                        ● sonos-broker.service - Sonos Broker
                           Loaded: loaded (/etc/systemd/system/sonos-broker.service; enabled; vendor preset: enabled)
                           Active: failed (Result: exit-code) since Sun 2017-01-15 22:57:11 UTC; 10s ago
                          Process: 19844 ExecStart=/usr/local/bin/sonos_broker start (code=exited, status=203/EXEC)
                         Main PID: 19844 (code=exited, status=203/EXEC)
                        
                        Jan 15 22:57:11 odroid systemd[1]: Started Sonos Broker.
                        Jan 15 22:57:11 odroid systemd[19844]: sonos-broker.service: Failed at step EXEC spawning /usr/local/bin/sonos_broker: No such file or directory
                        Jan 15 22:57:11 odroid systemd[1]: sonos-broker.service: Main process exited, code=exited, status=203/EXEC
                        Jan 15 22:57:11 odroid systemd[1]: sonos-broker.service: Unit entered failed state.
                        Jan 15 22:57:11 odroid systemd[1]: sonos-broker.service: Failed with result 'exit-code'.
                        Der Pfad ist aber richtig:
                        Code:
                        /usr/local/bin# ll
                        total 164
                        {....}
                        drwxr-xr-x  2 root root  4096 Jan 15 22:56 sonos/
                        -rwxr-xr-x  1 root root 12747 Jan 15 22:56 sonos-broker*
                        -rwxr-xr-x  1 root root 57982 Jan 15 22:56 sonos-cmd*
                        Ich bin als root unterwegs, daher kann es eigentlich auch kein Problem mit den Rechten sein.

                        Gruß und keine Hektik,

                        Daniel

                        Kommentar


                          Ha, ich sehe den Fehler. Beim Pfad hat sich ein Unterstrich eingemogelt. Es muss "sonos-broker" heißen und nicht "sonos_broker".

                          Das Encoding habe ich im cmd-Tool tatsächlich noch nicht nachgezogen, hole ich heute Abend noch nach.

                          Vielen Dank für deine Mühen.

                          Stefan
                          Zuletzt geändert von pfischi; 16.01.2017, 08:23.
                          Sonos

                          Kommentar


                            Ha, ich sehe den Fehler. Beim Pfad hat sich ein Unterstrich eingemogelt. Es muss "sonos-broker" heißen und nicht "sonos_broker".
                            Stimmt, war mir nicht aufgefallen. Ich habe /etc/systemd/system/sonos-broker.service entsprechend angepasst, jetzt klappts - in beiden Encodings :-)

                            Code:
                            systemctl status sonos-broker
                            ● sonos-broker.service - Sonos Broker
                               Loaded: loaded (/etc/systemd/system/sonos-broker.service; enabled; vendor preset: enabled)
                               Active: active (running) since Mon 2017-01-16 11:11:19 UTC; 3min 2s ago
                             Main PID: 16009 (sonos-broker)
                               CGroup: /system.slice/sonos-broker.service
                                       └─16009 /usr/bin/python3 /usr/local/bin/sonos-broker start
                            Jan 16 11:11:19 odroid systemd[1]: Started Sonos Broker.
                            Den Dank für die Mühen gebe ich gerne zurück,

                            Gruß, Daniel

                            Kommentar


                              Hallo Stefan,

                              die Integration ins smarthomeNG ging - nachdem ich den dev-Branch fürs Plugin entdeckt hatte - relativ Problemlos. Einzig ein Bug in der Doku hat mich einiges an Fehlersuche gekostet:

                              Add following line to the end of the files widget.js and widget.min.js (also located in the widgets folder)
                              Code:
                                
                               $(document).delegate('[data-widget="sonos.music"]',{update:function(e,r){if (r.toString()){document.getElementById(this.id).src=r.toString()+'?_='+new Date().getTime();}else{document.getElementById(this.id).src="pages/base/pics/trans.png";}}});
                              Da fehlt dein letzer Bugfix, damit das Titelbild richtig angezeigt wird:
                              Code:
                              $(document).delegate('[data-widget="sonos.cover"]',{update:function(d, a){$(this).attr('src', a);}});
                              Zudem hat das Widget nicht auf meine 7" Tablets gepasst und das Titel-Bild wurde viel zu groß angezeigt. Ich habe mir deshalb das Wiget etwas angepasst:

                              Sonos2.png

                              Sonos.png


                              Im Anhang meine Anpassung.

                              Gruß, Daniel
                              Angehängte Dateien
                              Zuletzt geändert von dafra; 24.01.2017, 20:56.

                              Kommentar


                                Ja, bin aktuell am Widget basteln. Ist total veraltet. Möchte ich mit dem Release rausbringen. Ich werde die Doku trotzdem nochmal updaten. Danke für den Hinweis.

                                Gruss,

                                Stefan
                                Sonos

                                Kommentar

                                Lädt...
                                X