Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei erstellung eines Plugins

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

    Hilfe bei erstellung eines Plugins

    Hallo zusammen,

    als blutiger python Anfänger habe ich es geschaft ein kleines Programm in Phyton zu erstellen, welches meinen Staubsauger startet / pausiert / zum laden schickt.
    Der Code sieht so aus:

    Code:
    #!/usr/bin/env python3
    
    import urllib.request
    import requests
    
    eingabe = 0
    print("Wähle 1 zum Start, 2 zur Pausierung, 3 zum anfahren der Ladestation und 4 zum beenden")
    while eingabe != 4:
       eingabe = int(input("Auswahl: "))
    
       if eingabe == 1:
          print("Staubsauger wird gestartet")
          urllib.request.urlopen("http://192.168.178.92:6260/json.cgi?%7b%22COMMAND%22:%22CLEAN_START%22%7d").read()
       if eingabe == 2:
          print("Staubsauger wird angehalten")
          response = requests.get('http://' + host + ':' + port + '/json.cgi?%7b%22COMMAND%22:%22PAUSE%22%7d')
       if eingabe == 3:
          print("Staubsauger fährt Ladestation an")
          response = requests.get('http://' + host + ':' + port + '/json.cgi?%7b%22COMMAND%22:%22HOMING%22%7d')
    print("Ende")
    Was ich nicht hinbekomme ist das ganze in smarthome zu integrieren. Ich habe mir mittlerweile so gut wie jedes plugin angeschaut, werde aber nicht schlau daraus. Ebenso bei der Anleitung bei dem skeleton Plugin.

    Konkret ist mir nicht klar wie ich smarthome dazu bewegen kann nach drücken eines Buttons in der Visu die url anzusteuern.

    Wenn ich es richtig verstanden habe müsste ich es mittels update_item lösen. Ich versuche jetzt schon lange rum, bekomme aber den Ansatz nicht hin.

    die item.conf sieht so aus:

    Code:
    # items/lghomebot.conf
    
    [lghomebot]
       [[start]]
            type = bool
            name = Start
            visu_acl = rw
       [[pause]]
            type = bool
            name = Pause
            visu_acl = rw
       [[home]]
            type = bool
            name = Pause
            visu_acl = rw
    und die __init__.py so:

    Code:
    #!/usr/bin/env python3
    
    import logging
    from datetime import datetime, timedelta
    import urllib.request
    
    logger = logging.getLogger('')
    
    class lghomebot():
    
       def __init__(self):
          self.logger = logging.getLogger(__name__)
          self._sh = smarthome
    
       def push(self):
          urllib.request.urlopen("http://192.168.178.92:6260/json.cgi?%7b%22COMMAND%22:%22CLEAN_START%22%7d").read()
          logger.debug("Send start to IP {0} at Port {1}".format(self._host, self._port))
          time.sleep(0.1)
    
       def run(self):
          self.alive = True
    
       def stop(self):
          self.alive = False
    
       def update_item(self, item, caller=None, source=None, dest=None):
          if 'lghomebot.start' in item.conf:
             value = item()
              if value == true:
                   self.push()
                   time.sleep(0.1)
                   value = false
    Wäre schön wenn mir jemand einen Tipp geben könnte was alles falsch ist.
    Bitte nicht zu streng sein. Fange gerade erst an mit python :-)

    Danke!

    Stefan
    Zuletzt geändert von himself; 03.11.2016, 12:55.

    #2
    Bau doch eine Logik die auf das Item hinter dem Button hört und bei Veränderung eine Funktion Deines Plugins aufruft.

    Kommentar


      #3
      Ähm. ja. So hatte ich das geplant. Ich weiss nur leider nicht wie. Bisher konnte ich mir immer mit zusammenkopierten skripten helfen. hier scheitere ich aber. Ich denke ich habe die Gesamtfunktion der Plugins (wie werden sie gestartet, wie werden die einzelnen Funktionen gestartet ...) nicht verstanden. Ich werde wie schon erwähnt auch aus den existierenden Plugins nicht schlau.
      Danke trotzdem für die bestimmt richtige Antwort

      Kommentar


        #4
        Also das mit einem Plugin lösen zu wollen ist sicher über's Ziel hinausgeschossen. Da reicht eine Logik die in etwa das gleiche beinhalten kann, wie Dein einfacher Code oben. Du kannst natürlich auch 3 kleine Logiken schreiben, die jede für sich eine Funktion ausführen (Start, Stop, Home). In der Smartvisu gibt es auch ein Widget basic.trigger, da kannst Du Logiken direkt triggern und brauchst nicht mal die Items.

        In die Logic.conf einfügen:
        Code:
        [startvaccumcleaner]
            filename = startvaccumcleaner.py
        [B]    visu_acl = yes[/B]
        in der startvaccumcleaner.py dann
        Code:
         #!/usr/bin/env python3
        import urllib.request
        import requests  
        urllib.request.urlopen("http://192.168.178.92:6260/json.cgi?%7b%22COMMAND%22:%22CLEAN_START%22%7d").read()
        und in der html der smartvisu dann sowas wie

        Code:
        {{ basic.trigger('StaubsaugerStart', 'startvaccumcleaner', 'Staubsauger jetzt starten') }}
        Da ich keinen Staubsauger mir IP Anschluss habe, kann ich das nicht testen aber so in etwa sollte das klappen...

        Gruß,
        Bernd

        Kommentar


          #5
          Hallo Bernd,

          vielen Dank für die Antwort. Werde ich schnellstmöglich testen. Auf die Idee mit der Logik bin ich noch nicht gekommen. Jetzt verstehe ich auch was psilo gemeint hat.

          Gruß

          Stefan

          Kommentar

          Lädt...
          X