Home of the Squeezebox™ & Transporter® network music players.
Results 1 to 9 of 9
  1. #1
    Senior Member
    Join Date
    Jan 2011
    Location
    Germany
    Posts
    226

    Implementierung eines CLICommands.

    Hallo zusammen,

    ich bin gerade dabei für einen Plugin eine Routine zu schreiben, durch die ein Netzwerkgerät per HTTP-Request angesprochen wird, welches dann mit einem Nutzernamen antworten soll. Im konkreten Fall geht es um das Pairing einer HueBridge. Hierbei wird an der Bridge der Button gedrückt, dann muss inerhalb von 30 Sekunden ein HTTP Request ausgesandt werden, und das Ding antwortet mit dem Nutzernamen, der gespeichert werden soll. In Perl klappt das auch schon. Nun soll das natürlich auch in die GUI hinein. Speziell ist, dass der Username nicht in den Standard-Prefs von LMS gespeichert werden soll, sondern in einem separaten XML File. Hierbei muss ich also sehen, dass ich das Handling der Antwort etc. richtig hinbekomme.

    Die Idee nun:
    Das ganze über CLI Commands zu regeln -i n Anlehnung an den Teil der Settings, den den rescan der Datenbank abfragt.
    So könnte ich den Seiteninhalt dann auch automatisch aktualieren.. Vielleicht erinnert sich Michael, er hat mir in der ersten Version sehr geholfen.
    Letztlich hätte das CLICommand zusätzlich den Vorteil, dass man per Telnet pairen könnte.

    Nun aber meine Frage:
    Wie stricke ich das Commando am Besten, dass ich den Response abfangen kann?
    Ich dachte etwas an:
    Code:
    hue bridge connect <IPAdresse>
    Als Anwort müsste dann entwerder running oder der UserName kommen...

    Jetzt muss der Kram in den JavaScript-Teil oben rein? Dazu müssten aber auch noch die IP mitgeliefert werden...

    Das klingt für mich recht kompliziert/umständlich.
    Geht das auch irgendwie einfacher? Nicht, dass ich gleich mit Kanonen auf Spatzen schieße...
    LMS-7.9@solaris. 2x Radio, 2x Duet, 1x Chromecast v1, ShairTunes, 1x Philips Hue System

  2. #2
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,702

    Implementierung eines CLICommands.

    > Das klingt für mich recht kompliziert/umständlich.

    Keine Bange: du bist nicht alleine. Tönt für mich auch sehr kopliziert
    und umständlich :-P.

    In so einem Fall gibts nur eins: brich dein Problem in seine einfachen
    Komponenten. Dann löst du ein Problem nach dem anderen. Die da z.B. wären:

    - http Abfrage auf HueBridge
    - Daten in XML speichern/lesen
    - CLI Kommando welches obiges triggert und einen Status zurückgibt
    - JavaScript, welches das Kommando verwendet um irgendetwas zu tun

    Bonuspunkte gibts, wenn du Dinge weglässt, die das alles nur
    verkomplizieren und dabei nicht wirklich notwendig sind. Warum XML? Gibt
    es ganz gute Gründe, das Rad hier neu zu erfinden?

    Dann gehst du hin und überlegst dir, wo ähnliche Dinge auch schon
    implementiert wurden.

    - http Abfrage: z.B. Update checker, last.fm Scrobbler
    - XML: Plugin installer (muss install.xml lesen)
    - CLI Befehl: jede Menge in Slim/Control/Queries.pm
    - JS: hast du schon erwähnt, z.B. rescan Status

    Dein grosses Problem ist vermutlich, dass dies alles asynchron laufen
    muss. Und für asynchrone CLI habe ich genau einen Fall im Code gefunden.

    https://github.com/Logitech/slimserv...Network.pm#L69

    Du musst da also alles, was mit dem Resultat der Abfrage bei der
    HueBridge zu tun hat, in einen Callback packen.

    --

    Michael

  3. #3
    Senior Member
    Join Date
    Jan 2011
    Location
    Germany
    Posts
    226
    Quote Originally Posted by mherger View Post
    > Das klingt für mich recht kompliziert/umständlich.
    Keine Bange: du bist nicht alleine. Tönt für mich auch sehr kopliziert
    und umständlich :-P.

    In so einem Fall gibts nur eins: brich dein Problem in seine einfachen
    Komponenten. Dann löst du ein Problem nach dem anderen. Die da z.B. wären:


    - http Abfrage auf HueBridge
    - Daten in XML speichern/lesen
    - CLI Kommando welches obiges triggert und einen Status zurückgibt
    - JavaScript, welches das Kommando verwendet um irgendetwas zu tun
    Das Ding war ähnlich schon mal implementiert:
    - HTTP Abfrage,
    - CLI,
    - JavaScript laufen alle

    allerdings: siehe Kommentare unten

    Quote Originally Posted by mherger View Post
    Warum XML? Gibt
    es ganz gute Gründe, das Rad hier neu zu erfinden?
    Es geht darum, eine squeeze2... bridge von philippe44 anzupassen.
    Diese Bridges lesen as XML Dateien und sind in C geschrieben.




    Quote Originally Posted by mherger View Post
    Dann gehst du hin und überlegst dir, wo ähnliche Dinge auch schon
    implementiert wurden.

    - http Abfrage: z.B. Update checker, last.fm Scrobbler
    - XML: Plugin installer (muss install.xml lesen)
    - CLI Befehl: jede Menge in Slim/Control/Queries.pm
    - JS: hast du schon erwähnt, z.B. rescan Status
    Mein alter Plugin konnte das teilweise schon (https://github.com/chincheta0815/Hue...in/Settings.pm).
    Nur halt ohne das XML.
    Damals konnte ich einfach das prefs array auslesen... Das war klein und handlich.

    Quote Originally Posted by mherger View Post
    Dein grosses Problem ist vermutlich, dass dies alles asynchron laufen
    muss. Und für asynchrone CLI habe ich genau einen Fall im Code gefunden.

    https://github.com/Logitech/slimserv...Network.pm#L69

    Du musst da also alles, was mit dem Resultat der Abfrage bei der
    HueBridge zu tun hat, in einen Callback packen.
    Ich denke genau so ein Callback ist die Lösung und ggfs. auch die Herausforderung...
    Ich werde da mal reinschauen.

    So wie es aber aussieht komme ich um ein wenig "Übergabe-Arbeit" in Sachen DatenArray im PerlCode nicht drumherum.
    Ich muss aus der Settings.pm in eine HueCom.pm und zurück... Da dachte ich mir, wenn ich das eh schon mache geht das evtl. über reine CLICommandos, wobei die Übergabe im JavaScript Teil stattfinden könnte... Aber dort müsste auch hineine, welche Bridge letztlich verbunden wird (->IPAdresse).
    LMS-7.9@solaris. 2x Radio, 2x Duet, 1x Chromecast v1, ShairTunes, 1x Philips Hue System

  4. #4
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,702

    Implementierung eines CLICommands.

    > So wie es aber aussieht komme ich um ein wenig "Übergabe-Arbeit" in
    > Sachen DatenArray im PerlCode nicht drumherum.
    > Ich muss aus der Settings.pm in eine HueCom.pm und zurück...


    Du musst etwas präziser sein. Weil sonst frage ich, warum du in Settings
    nicht einfach Plugins::Hue::HueCom->gibMirDieDaten() aufrufst? Das ist
    ja alles in deinem Package. Da darfst du schon mal Methoden in anderen
    Klassen aufrufen.

    --

    Michael

  5. #5
    Senior Member
    Join Date
    Jan 2011
    Location
    Germany
    Posts
    226
    Quote Originally Posted by mherger View Post
    Du musst etwas präziser sein. Weil sonst frage ich, warum du in Settings
    nicht einfach Plugins::Hue::HueCom->gibMirDieDaten() aufrufst? Das ist
    ja alles in deinem Package. Da darfst du schon mal Methoden in anderen
    Klassen aufrufen.
    Es geht darum:
    In der Settings.pm wird die XML Dateil in ein Array ausgelesen. Von dort bekomme ich die Daten auch in die HueCom übergeben.
    Wenn ich in der HueCom.pm bin bekomme ich die Daten auch in die XML Datei geschrieben.

    Wo ich nun auf dem Schlauch stehe:
    Ich möchte vermeiden, dass es zu Schreibkonflikten in der XMl kommt. Daher die Idee aus der HueCom den Usernamen zuürck in die Settings.pm zu geben...
    Derzeit rufe ich allerdings ein Funktion "connect" auf, welche keinen Rückgabewert hat, sondern in der HueCom nur den Prozess auslöst, indem sie weitere Funktionen und Timer startet...
    Mir ist noch nicht klar, wie ich aus einer aufgerufenen Funktion dann den Wert zurükbekomme... Den Trigger hab ich noch nicht gefunden.
    Ich muss da aber denke ich auch erstmal nocwas drüber nachdenken, ob das Konzept wirklich passt...
    LMS-7.9@solaris. 2x Radio, 2x Duet, 1x Chromecast v1, ShairTunes, 1x Philips Hue System

  6. #6
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,702

    Implementierung eines CLICommands.

    > Mir ist noch nicht klar, wie ich aus einer aufgerufenen Funktion dann
    > den Wert zurükbekomme... Den Trigger hab ich noch nicht gefunden.


    sub sendMirWas {
    return "da haste was!"
    }

    --

    Michael

  7. #7
    Senior Member
    Join Date
    Jan 2011
    Location
    Germany
    Posts
    226
    Quote Originally Posted by mherger View Post
    sub sendMirWas {
    return "da haste was!"
    }
    Autsch, wie recht Du hast! Das war einfach... Da stand ich gehörig auf dem Schlauch...

    Ich habe aber jetzt ein anderes Problem, das ich nicht ganz verstehe:
    Code:
    [17-05-06 18:32:52.2606] Slim::Networking::IO::Select::__ANON__ (131) Error: Select task failed calling Slim::Web::HTTP::processHTTP: Can't locate object method "addResult" via package "Plugins::HueBridge::HueCom" at /opt/lms-7.9.1/Plugins/HueBridge/HueCom.pm line 39.
    Diese Fehlermeldung bekomme ich in Bezug auf folgende CodeZeile: https://github.com/chincheta0815/LMS.../HueCom.pm#L39
    Habe ich da vergessen ein Package zu laden oder wo liegt der Fehler???
    LMS-7.9@solaris. 2x Radio, 2x Duet, 1x Chromecast v1, ShairTunes, 1x Philips Hue System

  8. #8
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,702

    Implementierung eines CLICommands.

    > [17-05-06 18:32:52.2606] Slim::Networking::IO::Select::__ANON__ (131) Error: Select task failed calling Slim::Web::HTTP:rocessHTTP: Can't locate object method "addResult" via package "Plugins::HueBridge::HueCom" at /opt/lms-7.9.1/Plugins/HueBridge/HueCom.pm line 39.
    >
    > --------------------
    >
    > Diese Fehlermeldung bekomme ich in Bezug auf folgende CodeZeile:
    > https://github.com/chincheta0815/LMS.../HueCom.pm#L39
    > Habe ich da vergessen ein Package zu laden oder wo liegt der Fehler???


    Wann bekommst du denn diese Fehlermeldung? Wichtig ist, dass du
    CLIgetHueBridgeConnectProgress nicht händisch irgendwoher aufrufst,
    sondern nur per CLI.

    --

    Michael

  9. #9
    Senior Member
    Join Date
    Jan 2011
    Location
    Germany
    Posts
    226
    Quote Originally Posted by mherger View Post
    Wann bekommst du denn diese Fehlermeldung? Wichtig ist, dass du
    CLIgetHueBridgeConnectProgress nicht händisch irgendwoher aufrufst,
    sondern nur per CLI.
    Ich hab's gefunden...
    Blöd wie ich bin hab ich die Funktion falsch aufgerufen... Der Name war mit einer anderen zu ähnlich, so dass es im Code gerummst hat...
    Jetzt klappt's...

    Könntest Du mal nach meinem andere Post schauen (http://forums.slimdevices.com/showth...n-basic-html)?
    Da hab ich ein Problem mit der Rückgabe aus XML::Simple...
    Ich habe immer Schwierigkeiten mit den Hash-References, Array-References, etc. Das bekomme ich nur schwer geregelt...
    LMS-7.9@solaris. 2x Radio, 2x Duet, 1x Chromecast v1, ShairTunes, 1x Philips Hue System

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •