Ankündigung
Einklappen
Keine Ankündigung bisher.
Sonos Anbindung
Einklappen
X
-
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
Kommentar
-
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 machtsDer "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
Kommentar
-
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
Kommentar
-
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
Kommentar
-
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
Kommentar
-
Zitat von mknx Beitrag anzeigenHallo 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
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
Kommentar
-
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
Kommentar
-
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
Kommentar
-
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
Kommentar
-
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
Kommentar
Kommentar