Ankündigung

Einklappen
Keine Ankündigung bisher.

Viessmann Plugin Neuentwicklung Python Hilfe

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

    Viessmann Plugin Neuentwicklung Python Hilfe

    Hallo,

    ich beschäftige mich gerade mit einer Neuentwicklung des Viessmann Plugins, mit Lese- und Schreibfunktion und direktem Zugriff über die serielle Schnittstelle.
    Viele Funktionen sind bereits implementiert und getestet. Aktuell stehe die Timer (Schaltzeiten) an und dabei bräuchte ich Hilfe bei der Umsetzung in Python.

    Konkret:
    Die Abfrage der Schaltzeiten liefert ein Bytearray in dem die möglichen 4 An- und 4 Abschaltzeiten enthalten sind. diese möchte ich in ein dict übertragen.
    Das Dict soll so aussehen: {1{'AN':'Zeit1'; 'AUS':'Zeit2'};2{'AN':'Zeit3'; 'AUS':'Zeit4'};3{'AN':'Zeit5'; 'AUS':'Zeit6'};4{'AN':'Zeit7'; 'AUS':'Zeit8'}}

    Mein PythonCode zur Ermittelung der Zeit sieht so aus:
    Code:
    def decode_timer(self, rawdatabytes, valuebytecount, commandsignage):
    timer = {} while (len(rawdatabytes) > 0):
    # Ersten 2Byte zwischenspeichern leftbytes = rawdatabytes[:2] # Wert der Bytes ermitteln value = int(leftbytes, 16) # Ermitteln der Zeit if value != 255:
    hour = int(value>>3) minute = int((value-(hour<<3))*10)
    else:
    hour = 0 minute = 0
    zeit = time(hour, minute) # Bytestring um das erste Byte verkürzen rawdatabytes = rawdatabytes[2:]
    return timer

    Wie bekomme ich die Zeiten nur am besten in das Dict, wie ich es oben skizziert habe?
    Danke für Eure Hilfe

    #2
    Viele Wege führen nach Rom.
    Versuch mal so:

    Code:
    def decode_timer(self, rawdatabytes, valuebytecount, commandsignage):
    timer = {} sub_dict={} index = 0 while (len(rawdatabytes) > 0):
    # Ersten 2Byte zwischenspeichern leftbytes = rawdatabytes[:2] # Wert der Bytes ermitteln value = int(leftbytes, 16) # Ermitteln der Zeit if value != 255:
    hour = int(value>>3) minute = int((value-(hour<<3))*10)
    else:
    hour = 0 minute = 0
    zeit = time(hour, minute) if ( index % 2 == 1 or index == 0 ):
    sub_dict['AN'] = zeit
    else:
    sub_dict['AUS']= zeit my_dict[index/2]=sub_dict sub_dict={}
    index = index +1 # Bytestring um das erste Byte verkürzen rawdatabytes = rawdatabytes[2:
    return timer
    Zuletzt geändert von cmalo; 31.01.2020, 00:13.

    Kommentar


      #3
      Hallo,

      ich habe eine neue Version des Plugins zum Lesen und Schreiben von Werten bei einer Viessmann Heizung fertiggestellt und in ein GitHub Repo geladen.
      Hier ist es zu finden. Es ist angelehnt an die Version von loeserman beschrieben hier und an das Comfoair Plugin von SvStefan, das bereits im shNG Repo ist.

      Es ist flexible gestaltet und bedient aktuell das Protokoll P300 und die Heizung mit Steuerung KO1B. Erweiterungen sind einfach möglich. Man kann viele Werte auslesen und auch setzen. Die Anwendung ist in den entsprechenden Dateien beschrieben. Man benötigt einen Optolink Adapter.

      loeserman thesing psilo
      Ihr könnt das Plugin gern testen und mir evtl Erweiterungen mitgeben. Bei mir läuft es seit 3 Wochen stabil.

      Beste Grüße
      Michael

      Kommentar


        #4
        Kommt das Plugin auch mit einem USB-Reconnect klar? Ich hatte damals das Problem, dass alle paar Tage der USB-Stack auf dem Raspberry-Pi ein Reconnect erforderte.

        Kommentar


          #5
          thesing
          Der reconnect mit einem USB optolink klappt.

          Kommentar

          Lädt...
          X