Snapcast Modul (WIP)

Begonnen von LeoSum, 28 Juni 2016, 08:37:26

Vorheriges Thema - Nächstes Thema

LeoSum

Hallo zusammen,
ich würde mich gerne darin versuchen ein Modul für die Multiroom-Audio Software Snapcast zu schreiben: https://github.com/badaix/snapcast

Durch das Querlesen von einer bereits vorhandenen python implementierung der Snapcast Steuerung (https://github.com/happyleavesaoc/python-snapcast) sowie der Dokumentation des Protokolls (https://github.com/badaix/snapcast/blob/master/doc/control_spec.md) habe ich bereits rausgefunden, dass hierzu Informationen im JSON Format via Telnet ausgetauscht werden.

Testweise habe ich mich mal über die Konsole per telnet mit dem Server Verbunden (er lauscht auf den Port 1705) und kann dort auch sehen, wenn ich etwas ändert (Lautsärke Änderungen, andere Stream zuweisung, etc.).

Allerdings komme ich nicht so recht dahinter, mit welcher Syntax ich selbst etwas versenden muss, um "set" commands auszuführen, geschweige denn das ganze aus dem Stehgreif in perl umzusetzen.

Ich habe nun in FHEM das Modul 70_JSONReadings.pm (https://forum.fhem.de/index.php/topic,38463.0.html) gefunden, welches zwar JSON ausliest, allerdings per HTTP und nicht per Telnet. Dort kann ich für mein Vorhaben also nicht abkupfern, oder?

Kann mich vielleicht jemand auf ein Modul hinweisen, welches bereits eine ähnliche Kommunikationsstuktur mit JSON über Telnet aufweist wie ich sie für Snapcast benötige? Leider ist mein Perl gar nicht gut und ich hoffe möglichst viel durch Abschreiben lernen zu können :)

Ich bin für alle Ideen oder Hinweise dankbar!

Gruß
Leo

CoolTux

Alles was Du machen musst ist Deine Daten die Du senden möchtest in JSON zu codieren und das dann per Telnet zu versenden. Anders rum hast Du ja schon festgestellt das Du Daten über Telnet erhalten kannst die JSON Format haben, diese musst du decodieren und dann als Reading bereit stellen.

Ich habe Dir nun bereits einige Dinge gegeben mit denen Du auf die Suche gehen kannst.

encode_json
decode_json

Für telnet schau Dir das Modul telnet an.

Für ein FHEM Modul gibt es im Wiki die Developer Seiten.
Ansonsten lerne intensiv Perl und wenn Du dann Probleme mit Code hast, poste ihn und umschreibe Dein Problem und wir werden helfen.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

nur kurz um zukünftige verwirrungen zu vermeiden: eigentlich hat das ganze nichts mit telnet zu tun. das verwendete protokoll nennt sich JSON-RPC.

es sind einfach json daten die über sockets ausgetauscht werden. es gibt diverse module die sockets verwenden um daten auszutauschen. das telnet modul gehört zwar auch dazu ist aber nicht das beste beispiel weil es vor allem verbindungen annimmt. du möchtest aber eine verbindung aufbauen.

schau dir mal das lightify modul an. das verwendet zwar kein json, ist aber ein recht einfaches beispiel wie man ein socket anlegt hinein schreibt und daraus liest. statt den binär daten verwendet du aber encode_json und decode_json.

gruss
  andre

ps: das man telnet zum testen verwenden kann liegt daran das telnet auch nur ein protokoll über sockets ist und unter anderem mit klartext arbeitet.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

LeoSum

Vielen Dank für eure Tipps!
Ich werde mir das ganze heute Abend mal ansehen und gucken was ich zustande bringe.

CoolTux

Und nicht darauf versteifen es unbedingt heute Abend zu schaffen. Das ist utopisch. Gerade ohne Perl Kenntnis. Das kann gerne auch Monate dauern, aber wenn Du es geschafft hast, weil Du es wirklich wolltest fühlt es sich super an   ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

LeoSum

Ich hab keine Zeit, das muss heute Abend fertig sein!

Spaß beiseite: Ich meinte dass ich heute Abend anfange ;)

LeoSum

Wo ich die Experten gerade so schön beisammen hab: gibt es einen sinnvollen Workflow zum Debuggen beim erstellen von fhem modulen? Nutzt ihr ein IDE?
Oder lädt man die nach jeder Korrekturschleife im Editor auf den Server und generiert sich temporäre Outputs in die Log-Datei?

CoolTux

Ich habe keine IDE, verwende einen normalen Editor mit Code und Syntaxhighlighting. Du kannst einzelne Funktionen oder Teile von Funktionen ohne FHEM Interner extern testen. Ansonsten schreibe ich den Code extern und lade die PM auf mein Entwickler FHEM. Dort teste ich dann mit print oder printf Debugausgaben.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

zum entwickeln sollte man nicht sein produktives fhem system verwenden sondern eine lokale ausgeheckte/installierte version auf dem entwicklungsrechner.

zum entwickeln selber reicht ein vi und Log ausgaben. da nichts kompiliert werden muss sondern der code (in fast allen fällen) einfach per reload neu geladen werden kann geht das auch sehr schnell.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Entwickelst Du echt mit vi Andre? Ich finde den Editor wahnsinnig unflexibel und bin froh vim zu haben. Da kann man auch wundervoll unendlich viele Module/Plugins für laden.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Ralf9

ich verwende als Testrechner meinen PC auf dem Opensuse drauf ist. Als Editor verwende ich KWrite.

Hat dies irgendwelche Nachteile, die ich übersehen habe, wenn fhem nicht unter /opt/fhem/ liegt und wie folgt gestartet wird?
ralf@linux-ralf4:~/prog/fhem-5.5> perl fhem.pl fhem.cfg

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

CoolTux

Zitat von: justme1968 am 28 Juni 2016, 17:56:11
vim ist auch nur vi :)

gruss
  andre

Naja so verallgemeinert stimmt das ja schon lange nicht mehr  ;D
Ich sage da nur Richtungstasten und Entferntesten. Das alles funktioniert unter Standard vi ja nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

doch das funktioniert auch mit einem 'standard' vi. man muss nur die tasten richtig mappen.

den vi den du meinst gibt es schon lange nicht mehr. nachfolger war mal nvi. aber auch den gibt es nicht mehr.

vim ist inzwischen der standrard vi.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Ach so? Ok. Das wusste ich nicht. Das erste was ich immer gemacht habe war entweder emerge vim oder apt-get vim. Naja, gut zu wissen.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net