Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Problem bei Verarbeitung von POST-Request innerhalb des Plugins

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

    Neues Plugin: Problem bei Verarbeitung von POST-Request innerhalb des Plugins

    Hallo zusammen,

    ich bin gerade dabei, mein Plugin für die das Nuki Smartlock bzw. Nuki Bridge zu optimieren, bevor ich es dann der Community zur Verfügung stelle :-)
    Über die Bridge kann ich Befehle an das Smartlock über die Nuki Bridge API senden und Status Infos abfragen.

    Aktuell bin ich an der Optimierung der Statusabfragen. Wird ein Befehl (z. b. Aufsperren) über sh.py getriggert, so kann ich den daraus folgenden Status über eine nachfolgende Abfrage leicht selber abholen.
    Problem ist aber, wenn die Statusänderung "extern", spricht z. B. das Smartlock via Handy-App getriggert wird. Sh.py bekommt dann erstmal aktiv davon nichts mit. Meine aktuelle Lösung sieht vor, per cron jede Minute den Status abzufragen, was sehr unsmart ist.

    Die Bridge API bietet allerdings die Möglichkeit, via Callback-Funktion einen POST-Request inkl. neuem Status (JSON-Objekt) an eine selbst festzulegende URL zu senden, sobald sich der Status des Smartlocks verändert hat.

    Für diesen Zweck hab ich mithilfe von http.server schon einmal einen kleinen Webserver gebaut, welcher diesen POST-Request entgegennehmen und die Status auslesen kann.

    Leider reichen meine sh.py und Python Kenntnisse nicht soweit um den nächsten Schritt zu gehen, diesen Webserver in das Plugin zu integrieren. Einfach ins Plugin-Script "reinkopieren" brachte nichts, da der Start des Server die weitere Ausführung des Scripts blockierte.

    Mir schwebt vor, dass mit Start des Plugins ein Webserver mit gestartet wird, der die Callback POST-Requests entgegennimmt und dann entsprechend den Status des zugehörigen sh.py Items updated.

    Das network Plugin habe ich mir auch schon angeschaut. Leider kann dies aktuell nur mit POST-Requests umgehen. Über lib.connection habe ich keinerlei Doku gefunden um bewerten zu können, ob man das Plugin auch so umbauen könnte, damit es auch POST-Requests verarbeiten kann.

    Besten Dank bereits im Voraus für eure Hilfestellungen.

    Gruß

    Christian

    #2
    Gut das du Bescheid sagst. Ich entwickle auch gerade daran. Schau dir mal mein Sonos Plugin an, dort habe ich einen Event-Listener integriert (zwar UDP, geht aber auch TCP). Warum du einen eigenen Webserver nehmen willst, verstehe ich nicht, geht alles mit sh.py-Hausmitteln. Ich würde unnötige Abhängigkeiten vermeiden. Vielleicht solltn wir uns da nochmal kurzschließen.

    Gruss,

    Stefan
    Sonos

    Kommentar


      #3
      Hallo Stefan,
      vielen Dank für deine Antwort.

      Wenn ich mir dein Sonos Plugin so ansehe, glaub ich überlass ich dir lieber den Vortritt beim Erstellen des Nuki Plugins ;-)

      Ich war vor deinem Post bereits einen Schritt weiter und bin es jetzt noch mehr. Die lib.connection scheint ein smarthome.py spezifisches Modul zu sein. Deshalb hab ich vermutlich im Netz auch keine Doku hierrüber gefunden. Gibt es vermutlich auch nirgend anders, oder?
      Ich hab das network Plugin jetzt soweit umgeschrieben, dass es POST Requests entgegennimmt. Einzig die Verarbeitung des JSON-Formats fehlt noch.

      Das mit dem Webserver ist natürlich übertrieben bzw. ich habe mich etwas falsch ausgedrückt. Der Listener-Ansatz ist natürlich der richtige...

      Wie weit bist du denn schon mit deinem Plugin? Ich würde mich wie gesagt die nächsten Tage dann über den Listener her machen. Ne Doku von lib.connection wäre dafür echt hilfreich...

      Danke schon mal!

      Gruß

      Christian

      Kommentar


        #4
        Du kannst gerne ein Release machen, wenn du willst kann ich gerne im Vorfeld deinen Code anschauen.
        Grüsse,

        Stefan
        Sonos

        Kommentar


          #5
          Danke. Werd auf dein Angebot zurückkommen. Hoffe, dass ich übers Wochenende das Ganze soweit fertig bekommen :-)

          Nochmals nachgehakt: Zur lib.connection gibt es außer dem Code keine Doku, oder?

          Danke!

          Gruß

          Christian

          Kommentar


            #6
            Zitat von fuppy Beitrag anzeigen
            ...
            Nochmals nachgehakt: Zur lib.connection gibt es außer dem Code keine Doku, oder?

            Danke!

            Gruß

            Christian
            Leider nein.
            Sonos

            Kommentar


              #7
              pfischi Kurze Wasserstandsmeldung:

              Deinen Sonos-UDPDispatcher konnte ich jetzt soweit anpassen, dass die Nuki-Bridge erfolgreich die Callbacks senden kann und ich die JSON Daten einlesen kann.

              Ich kam leider am nicht drum rum, den JSON-String manuell aus den übertragenen Daten rauszuparsen. Nachdem ich die empfangenen Daten decodiere, bekomme ich einen ordinären String zurück, der zwar im Aufbau einen normalen HTTP Request Header gleicht, aber eben vom Typ String ist.
              Habs jetzt so gelöst, dass ich per RegEx den JSON-String raus parse und anschließend in ein JSON-Objekt überführe... weiß nicht ob das State-of-the-art ist, klappt aber ;-)
              Zuletzt geändert von fuppy; 11.11.2016, 08:37.

              Kommentar


                #8
                Super, freue mich aufs Plugin.

                Gruss,

                Stefan
                Sonos

                Kommentar


                  #9
                  Short Update:
                  Plugin läuft nun soweit... möchte nun den Code noch aufräumen und das Fehlerhanding etwas verbessern... dauert also noch ein paar Tage...

                  Kommentar

                  Lädt...
                  X