Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos Anbindung

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

  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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.

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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.

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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.

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • dafra
    antwortet
    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.

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X