Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfägerfragen zur plugin Programmierung

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

    Anfägerfragen zur plugin Programmierung

    Hallo,
    Da ich nirgend wo ein passendes plugin gefunden habe, versuche ich es nun einmal selbst, obwohl meine Python Kenntnisse ehr bescheiden sind.
    Mein Ziel ist es einen Drehstromzähler via Modbusprotokoll auszulesen. Mit folgendem Python Script funktioniert das auch schon sehr gut.
    Code:
    #!/usr/bin/env python
    import minimalmodbus
    port = '/dev/ttyAMA0'
    slave1 = 1
    slave1.serial.baudrate = 9600
    slave1.serial.bytesize = 8
    slave1.serial.stopbits = 1
    slave1.serial.timeout  = 5
    slave1.serial.parity   = 'E'
    slave1 = minimalmodbus.Instrument(port, slave1, minimalmodbus.MODE_RTU)
    
    typ_L1V = slave1.read_float
    reg_L1V = 8192
    
    L1V = (typ_L1V(reg_L1V))
    print L1V
    Jetzt bereitet mir die Umsetzung in ein plugin jedoch große Schwierigkeiten. Meine Ansätze sehen wie folgt aus:
    Aber das war es auch schon, vielleicht hat ja jemand Zeit und Lust mir auf die Sprünge zu helfen.
    Code:
    import logging
    import time
    import minimalmodbus
    
    port = '/dev/ttyAMA0'
    slave1 = 1
    slave1.serial.baudrate = 9600
    slave1.serial.bytesize = 8
    slave1.serial.stopbits = 1
    slave1.serial.timeout  = 5
    slave1.serial.parity   = 'E'
    slave1 = minimalmodbus.Instrument(port, slave1, minimalmodbus.MODE_RTU)
    
    logger = logging.getLogger('KDK')
    
    
    class KDK():
        _items = []
    
        def __init__(self, smarthome, cycle=20):
            self._sh = smarthome
          
        def run(self):
            self.alive = True
            self._sh.scheduler.add('KDK', cycle=20)
    
        def stop(self):
            self.alive = False
            
        def parse_item(self, item):
            if 'reg_L1V' in item.conf and 'typ_L1V' in item.conf:
                return L1V = (typ_L1V(reg_L1V)) # L1V
    Die Item.conf stelle ich mir in etwa so vor:


    name = L1V
    type = num
    knx_dpt = 9
    knx_send = 7/7/7
    knx_cache = 7/7/7
    typ_L1V = slave1.read_float
    reg_L1V = 8192


    Mike
    Gruß Mike

    #2
    Ohne jetzt den Code im Detail gelesen zu haben - vergiss nicht die /etc/plugin.conf, damit das Plugin auch geladen wird ...
    ​/tom

    Kommentar


      #3
      Hallo,

      hast Du https://github.com/mknx/smarthome/wi...ugin-5-minutes schon entdeckt?
      Lies das mal.
      Wenn Du danach noch Fragen hast, melde Dich noch mal.

      Bis bald

      Marcus

      Kommentar


        #4
        Halllo Marcus,
        die Anleitung habe ich durchgearbeitet und mir auch diverse plugins angesehen. Was ich aber noch nicht verstehe ist, wie ich die Variablen aus der item.conf (in meinem Fall: Register und Typ) importiere, verarbeite und das Ergebnis als neue Variable (in meinem Fall: Spannung) wieder an die item.conf übergebe. Wenn Du an der Stelle noch mal auf meinen Code schauen könntest.

        @ Tom, das mit der Plugin.conf ist klar, aber trotzdem Danke für deine Antwort.

        Bis dann
        Mike
        Gruß Mike

        Kommentar


          #5
          Code:
           
           def parse_item(self, item):         if 'reg_L1V' in item.conf and 'typ_L1V' in item.conf:             return L1V = [B](typ_L1V(reg_L1V))[/B] # L1V [FONT=Arial][SIZE=15px][/SIZE][/FONT]
          parse_item bekommt doch das "item" übergeben. Damit kannst du auf die Werte zugreifen ... Lesen, Schreiben, etc.

          Kommentar


            #6
            Hallo Seppel,
            typL1V und reg_L1V sind statisch und "bewirken" eine Änderung von L1V wie übergebe ich L1V an die Item.conf? Oder ist das schon mit "name = L1V" in meiner oben angeführten .config so in Ordnung?

            Gruß Mike
            Gruß Mike

            Kommentar


              #7
              Hast du mal in den Link von Marcus geschaut? Da steht es doch drin:

              def parse_item(self, item):
              if 'my_parameter' in item.conf:
              value = item.conf['my_parameter']
              return self.update_item
              else:
              return None

              Kommentar


                #8

                gelesen schon nur diesen Teil nicht verstanden, evtl. bin ich auch zu blöd dafür. Wie definiere ich denn 'my_parameter' in der item.conf. my_parameter wäre in meinem Fall ja mit L1V eine Variabel die als Antwort von minimalmodbus kommen würde.
                Ich hoffe Ihr habt noch etwas Geduld mit mir.

                Mike
                Gruß Mike

                Kommentar


                  #9
                  [upstairs]
                  [[lamp]]
                  type = bool
                  visu_acl = rw
                  ivalue = 1
                  knx_dpt = 1

                  You can access the parameter ivalue using the following code:

                  if 'ivalue' in item.conf:
                  ad=item.conf['ivalue']
                  return self.update_item
                  else:
                  return None

                  Kommentar

                  Lädt...
                  X