Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos Anbindung

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

  • pfischi
    antwortet
    Noch ein kleines Update (im Developer-Zweig)

    https://github.com/pfischi/shSonos/tree/develop

    Neue Funktionen im Server, respektive im Plugin:

    • Play
    • Pause
    • Stop
    • Track-Titel



    Bis bald,


    Stefan

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Großes Update

    Auf Github habe ich gerade ein dickes Update hochgeladen.

    Hier die Änderungen in aller Kürze:


    • Server HTTP (anstatt TCP) umgestellt
    -> Kommandos per Browser absetzbar
    • Server entschlackt: Datenbank raus, komplizierten Argparser raus, simplerer Kommando-Struktur
    • Implementierung von Sonos-Events
      • der Server registriert sich bei den einzelnen Sonos-Speakern und bekommt automatisch Rückmeldung bei Statusänderungen
      • Server sucht automatisch nach neuen Sonos-Speakern und schmeisst alte aus seiner List raus
      • empfangene Events werden durch den Sonos-Server (Broker wäre eigentlich die bessere Bezeichnung) an alle registrierte Clients gesendet (das Smarthome.py-Plugin registriert sich automatisch, soehe Doku Github)
        • das Plugin empfängt nun unverzüglich auch Statusäbderungen am Speaker, die durch andere Clients getriggert wurden (iPad, Androi etc)


    • lxml entfernt, deshalb nur noch die request-Bibliothek notwendig (Raspberry Pi)
    • logischere Plugin-Kommandos
    • integrierte Kommandos bisher:
      • Mute
      • Volume
      • Led
      • der rest folgt asap, die Struktur war bisher wichtiger




    Auf Github habe ich ein wenig ausführlicher alles beschrieben, Unter dem Sonoslugin-Ordner findet ihr auch Beispiele zur Integration ins Smarthome.py-Projekt.


    Mit der Bitte um Bugtrack-Logs,


    Stefan

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Kleines Update,

    im Moment bin ich dabei, dem Sonos-Server eine interessante Funktion zu implementieren. Man kann sich über simple GET-Anfragen bei den Speakern für Events registrieren, diese schicken dann Information beim Eintreten des Events an alle Subscriber (hier der Sonos-Server). Damit würde ein Pollen von Zuständen entfallen.

    Schade das man das alles selber im Netz finden muss, Sonos gibt da null Hilfe (Anfrage an den Support).


    Schönen Abend,

    Stefan

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Sonos Anbindung

    Hallo an alle,

    ich habe den ersten Prototypen für das Sonos-Plugin fertig. Ihr findet es hier unter https://github.com/pfischi/shSonos im Unterorder plugin.sonos.

    Bisher ist nur die "mute"-Funktion integriert im Plugin, weitere folgen im Laufe des WE.

    Wer bereits den Sonos-Server installiert hatte, muss diesen durch das neue Release ersetzen.

    Eine ausführliche Anleitung folgt.


    Edit: Anleitung ist im Plugin.Sonos-Unterordner hinzugefügt.

    Anleitung für die 'mute'-Funktionalität ist hochgeladen.




    Schönes WE an alle,

    Stefan

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Zitat von mknx Beitrag anzeigen
    Hallo Stefan,

    ich scheint Dir Spaß zu machen, schön. Ich bin froh das sich jemand dem Thema annimmt.
    Eine kritische Frage, ist diese Komplexität notwendig? Wenn ich es richtig sehe, müssen ein paar Python-Module und ein separater Dienst installiert werden. Es wäre schön wenn es weniger Abhängigkeiten geben würde, das macht die Nutzung einfacher und den Code wahrscheinlich schlanker.

    Bis bald

    Marcus
    Hallo Markus, danke für das Feedback. Die Idee mit dem Server war / ist eigentlich, das ganze etwas systemunabhaengig zu designen (Kommunikation über TCP, Serverresponse als xml etc). Das entsprechende Plugin für sh käme dann sozusagen als Beigabe hinzu. Die Komplexität des Codes verlagert sich also eigentlich nur vom Plugin zum Server. Angedacht ist, das der Server weitere Funktionalitaeten wie z.B. Backup der Gruppen, Playlisten durchführt, da laut Sonosforen die Speaker bei Stromausfall alle Einstellugen verlieren.

    Aber ich stell das Thema gerne zur Diskussion. Man koennte das SoCo Projekt auch ohne Server integrieren. Meiner Ansicht nach macht aber auch hier eine kleine Sqlite-Datenbank Sinn.

    Zum Thema nachzuinstallierende Plugins:

    Die lxml-Bibliothek bekomme ich raus, bei der requests-library wird es aber schwierig, weil dies Bestandteil vom Soco-Project ist. Diese koennte man aber schon ins Image integrieren, eine Installation von pip oder ähnlichem würde entfallen.

    Edit: Der Server würde auch periodisch das Pollen des Status aller Speaker übernehmen. Die Infos bekommen die Clients dann hauptsächlich aus der Datenbank geliefert. Kann ich die gleiche Funktionalität ohne Performanceauswirkung mit einem Smarthome.py-Plugin abbilden?


    Mfg,

    Stefan



    Gesendet von meinem GT-N7000 mit Tapatalk

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo Stefan,

    ich scheint Dir Spaß zu machen, schön. Ich bin froh das sich jemand dem Thema annimmt.
    Eine kritische Frage, ist diese Komplexität notwendig? Wenn ich es richtig sehe, müssen ein paar Python-Module und ein separater Dienst installiert werden. Es wäre schön wenn es weniger Abhängigkeiten geben würde, das macht die Nutzung einfacher und den Code wahrscheinlich schlanker.

    Bis bald

    Marcus

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    shHonos

    So, der erste Schritt ist gemacht.

    Ich habe unter shSonos ein neues Github-Projekt angelegt. Da ich noch ein bisschen auf wackeligen "Python-Füssen "stehe, musste eine setup.py nochmal hinten anstehen, wird aber asap nachgeliefert. Im Moment reicht es, alle Dateien in ein Verzeichnissen mit Schreibrechten zu kopieren.

    Zur Zeit ist erstmal nur der Server im Github-Repository (inkl. einer kleinen Test-Client-App) ausgecheckt. Die Woche werde ich nutzen, um mir das richtige Design für das Smarthome-Plugin zu überlegen.

    Zur Installation des Server auf dem Raspberry bitte unbedingt den Punkt 3 in der README beachten. Eine kleine Anleitung zum Ansteuern der ersten integrierten Kommandos ist auch da mit drin.

    Es gibt noch viele Ecken und Kanten, aber die werden mit der Zeit alle noch rund.

    Viel Spass,

    Stefan

    Einen Kommentar schreiben:


  • umatz
    antwortet
    Bin auch schon gespannt auf das Plugin.

    Greetinx,
    Udo

    Einen Kommentar schreiben:


  • RoyalTS
    antwortet
    Super!

    Bin total gespannt und bereit zum Testen

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Kleines Update:

    Das "Framework" für die Serveranwendung ist so gut wie fertig. Ich habe einen Argparser servereitig implementiert, der die clienseitigen Anfragen auswertet und die entsprechenden Fehlermeldungen / Hilfen ausspuckt.
    Weiterhin hat die Datenbank ihr Grundgerüst bekommen und kann in mehreren Tabellen die Infos für die Sonos-Geräte aufnehmen.

    Folgende Features sind bereits fertig (ich stell das hier schon mal als Commandline dar, so wie die Anfragen später an der Server geschickt werden):

    refresh quick ("kurzer" Scan nach allen Speakern (online/offline, uid, model)

    refresh all (sucht nach allen Speakern und fragt jeden gefundenen Speaker nach detaillierten Informationen, z.B. Zone, Software-Version, Mac, etc)

    refresh single {id, uid, ip} (holt Infos für einen Speaker. Gesucht werden kann anhand der IP, der eindeutigen UID des Speaker oder per Datenbank-ID des Geräts

    list all {offline, online, complete} (Liste alle Speaker auf)

    list single {id, uid, ip} (Listet einen einzelnen Speaker auf}

    Als nächstes werden die ganzen Sonos-Funktionen integriert, sollte aber zügig gehen, da ich hier das SoCo-Projekt gut integrieren kann.

    Nächste Woche werde ich das entsprechende Github-Project online stellen.

    Bis dahin,

    Stefan

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    So , kleines Update:

    Bin schon fleissig am programmieren. Ich verwende als Basis folgendes Projekt
    SoCo.

    Folgendes schwebt mir vor (als Erweiterung zu SoCo) und wird gerade von mir integriert:

    • Client - Server - Kommunikation
    • sqlite-Datenbank für Datenhaltung
    • ...


    Wenn die ganzen rudimentären Sachen integriert sind, werde ich das Projekt in Github veröffentlichen.

    Folgende Sachen sind bereits fertig:

    • SoCo Python3-"ready" gemacht
    • rudimentäres Server-Client-Grundgerüst
    • erste Datenbank-Tabellen und Funktionen zur Speicherung von Device-Informationen

    • funktionsfähige Suche nach Sonos-Geräten im Netzwerk


    Es bleibt noch einiges zu tun, aber Spass machts Der "WAF" bei meiner Frau sinkt gerade etwas (Zitat: "Legt das Notebook weg..."), aber das wird sich spätestens mit einer Sonos-Smarthome.py-Lösung wieder legen.

    Guten Rutsch euch allen,

    Stefan

    Einen Kommentar schreiben:


  • jj2005
    antwortet
    Nice

    Really looking forward to Sonos integration, I have been trying

    https://github.com/TrondKjeldas/knxsonos

    But due to lack of documentation had no luck.

    https://github.com/SoCo/SoCo

    It works with Python 2.xx but with Python3

    Code:
    TypeError: method expected 2 arguments, got 3
    I for one are a willing beta tester

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    Kleines Update: ich habe mir ein Sonos Play 1 gekauft und werde mich mal diese Woche ans programmieren machen.
    Der Sound aus dem kleinen Teil ist wirklich beeindruckend.

    Einen Kommentar schreiben:


  • RoyalTS
    antwortet
    Super!

    Da freu ich mich, wenn es ein Plugin für Sonos gibt.

    Dank Dir schon mal!

    Grüße
    Thorsten

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hi Stefan,

    Zitat von pfischi Beitrag anzeigen
    Ich werde mir im Vorfeld ein Sonos-Gerät holen und mich mal ans Werk machen.
    Super.

    Bis bald

    Marcus

    Einen Kommentar schreiben:

Lädt...
X