Ankündigung

Einklappen
Keine Ankündigung bisher.

Viessmann Plugin Neuentwicklung Python Hilfe

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

  • Sisamiwe
    antwortet
    Zitat von Morg Beitrag anzeigen
    Also muss ich mir das Timing von Anfrage und Antwort nochmal genauer ansehen...
    Hast Du das KW Protokoll so umgesetzt?
    Code:
    Kommunikation (alle Werte in Hex)
    
    Vitotronic sendet periodisch 0x05
    Sofort (xx msec) nach dem Empfang von 0x05 kann ein Telegramm gesendet werden und wird sofort beantwortet.
    Ehe ein weiteres Telegramm gesendet werden kann, muss erst auf das nächste 0x05 gewartet werden.
    Anstatt auf das nächste 0x05 zu warten, kann auch direkt nach dem Empfang einer Antwort das nächste Telegramm geschickt werden. Dabei darf das Telegramm nicht mit 0x01 eingeleitet werden (Somit ist das 0x01 logisch gesehen nicht ein Telegram-Start-Byte sondern ein ACK auf die 0x05).
    Telegrammdetails:
    
    01 Telegramm-Start-Byte (ACK auf 0x05)
    F7 Type F7= Lesen F4=Schreiben
    XX XX Adresse
    XX Anzahl der angefragten Bytes
    Beispiel Abfrage Außentemperatur (V200KW2)
    
    TX: 01
    TX: F7 55 25 02
    RX: 5B 00 > Außentemperatur 9,1°C
    Beispiel Geräte Kennung abfragen
    
    TX: 01
    TX: F7 00 F8 02
    RX: 20 98
    0x2098 = V200KW2
    Beispiel Heizkreis A1 auf Sparbetrieb setzen (V200KW2)
    
    TX: 01
    TX: F4 23 02 01 01
    RX: 00 = Bestätigung OK

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Michael: danke, das hatte ich gehofft dabei geht es auch nur darum, dass ich mit den "alternativen Codezweigen" für KW keine Fehler in den ja sonst problemlos laufenden Code gebracht habe.

    Da es bei mir jetzt aber auch die ganze Zeit sauber lief, erwarte ich in der Hinsicht keine Probleme.

    Du kannst ja spaßeshalber mal schauen was passiert, wenn du in der plugin.yaml auf protocol: 'KW' umstellt. Im Idealfall läuft es problemlos weiter...

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Also, ich erkenne ein gewisses Muster. Wenn er "zu lange" (über 1 Sekunde) auf die Antwort wartet, dann kommt von der Heizung das Sync-Signal (0x05). In vielen Fällen "liest" er dann ein oder zwei Bytes 0x05, was in den meisten Fällen ein Fehler sein dürfte.

    Also muss ich mir das Timing von Anfrage und Antwort nochmal genauer ansehen...

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Morg Beitrag anzeigen
    Bitte testet das Plugin wie gehabt
    - in eurer Standardkonfiguration (keine neuen Fehler)
    Läuft im Moment.

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Hi Morg,

    ich habe das gerade getestet. Jetzt bekomme ich Werte für Aussentemperatur(9.1), Kesselsolltemperatur(64.1) und Warmwasser_Temperatur(44.7).

    Der Rest funktioniert immer noch nicht (war auf 0). Warmwasser_Solltemperatur stimmt glaub so nicht, obwohl das WW wird nicht rund um die Uhr geheizt, sondern nur zu vordefinierten Zeiten. Evtl setzt er die SollTemp dann runter... ansonsten ist WWsoll glaube so 51.

    Merkwürdig ist, dass immer eine Lücke bei den ermittelten Item-Werten war (9.1, dann 0, 64.1, dann wieder 0, 44.7 dann wieder 0), deswegen hab ich mal das erste Item auskommentiert um die Reihenfolge der Lücke mal zu beeinflussen (da ich ein Protokollproblem vermutet habe).

    Dann kommt das dabei raus: Er Zeigt einen Wert für Kesseltemperatur(128.5), Kesselsolltemperatur(128.5), Warmwasser_Solltemperatur(5) und Warmwasser_Temperatur ist wieder 0

    Die Werte stimmen aber alle nicht mehr.

    debug1 ist der erste start (mit allen Items), dann debug2 der zweite (ohne Aussentemperatur).

    Ok, in einem dritten durchlauf - wieder mit Aussentemperatur sieht es plötzlich auch wieder anders aus. Da hat er Werte für alles, aber es stimmt immer noch keiner davon
    Angehängte Dateien
    Zuletzt geändert von TCr82; 13.12.2020, 13:11.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Hm...

    vorweg: die ganzen Meldungen zu "communication initialized" bzw. nicht initialisiert: das gibts bei KW nicht, habe ich jetzt rausgeschmissen. Auch einige andere Meldungen habe ich noch angepasst.

    Erstmal zu den Punkten, wo er was empfangen hat. Beim zweiten Wert fehlte eine Einheitendefinition in der commands.py, das sollte jetzt gehen.

    Kesseltemperatur = 73.4, das scheint mir plausibel?
    Warmwasser_Solltemperatur = 0x33 = 48 - passt das bei dir?

    Dann wären das zwei Werte, auf die die Heizung schonmal (richtig) reagiert hat.

    Es gibt zwei Möglichkeiten für die weiteren "Fehler", die mir spontan einfallen:

    a) ich habe etwas fundamental verkehrt gemacht bei der Implementierung, ggf. beim Timing;
    b) deine Anlage kennt die abgefragten Adressen nicht, und KW antwortet nicht mit "Fehler", sondern gar nicht (b'', leeres Byte, nichts gelesen)

    a) wäre mir unsympathisch aber ich wüsste jetzt auch nicht, wo es haken sollte. Mit meiner Anlage hat er fast ne Stunde alle 30 Sekunden in KW geredet, und alle Daten bekommen, nach denen ich gefragt habe (und die er sonst über P300 abfragt).

    b) scheint mir die wahrscheinlichere Ursache. Leider ist eine vermeintliche Systematik bei Viessmann über die Geräte hinweg nicht erkennbar. Da wäre die einzige Möglichkeit, herumzuprobieren.
    Ich habe ursprünglich versucht, aus deiner vcontrold-Konfiguration Adressen zu extrahieren; es war aber nicht immer eindeutig, ob die auch für deine Anlage zutreffen. Michael hatte oben noch ein PDF mit Adressen verlinkt, die habe ich mal probeweise eingetragen.

    Ich meine, vcontrold hätte auch die Testkonfiguration, wo du auch die Adresse als Argument übergeben kannst und die vorher nicht erst definieren musst - gettestaddr heißt das. Das sollte bei openV beschrieben sein, vielleicht kannst du damit mal ein paar Adressen aus der Konfig testen.

    Ich habe das Logging mal noch etwas an KW angepasst. Meine Vermutung ist, dass KW entweder mit einem Wert antwortet oder gar nicht, "Fehler" ist nicht definiert, es gibt ja keine Statusbytes in der Antwort. Beim Schreiben gibt es "0x00" als Antwort "OK"; ich vermute, wenn das Schreiben fehlschlägt, dass die Anlage dann auch einfach nicht antwortet. Das würde auch das Verhalten erklären und uns auf die Suche nach gültigen Datenpunkten für deine Heizung schicken.

    Probier es bitte nochmal aus; da ich tatsächlich noch Fehlerbehebungen und generelle Änderungen am Logging vorgenommen habe, habe ich die neue Version auf Github hochgeladen.

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Ok, hab jetzt mal ne minimale item konfig gemacht:

    Code:
    technik:
        heizung:
            Aussentemperatur:
                name: Aussentemperatur
                type: num
                viess_read: Aussentemperatur
                viess_read_cycle: 300
                viess_init: true
            Kesseltemperatur:
                name: Kesseltemperatur
                type: num
                viess_read: Kesseltemperatur
                viess_read_cycle: 180
                viess_init: true
            Kesselsolltemperatur:
                name: Kesselsolltemperatur
                type: num
                viess_read: Kesselsolltemperatur
                viess_read_cycle: 180
                viess_init: true
            WarmwasserSolltemperatur:
                name: Warmwasser_Solltemperatur
                type: num
                viess_read: Warmwasser_Solltemperatur
                viess_read_cycle: 180
                viess_init: true
            Warmwassertemperatur:
                name: Warmwassertemperatur
                type: num
                viess_read: Warmwasser_Temperatur
                viess_read_cycle: 180
                viess_init: true
    Bekomme leider diese Fehler:
    2020-12-12 21:38:21 WARNING lib.smarthome -------------------- Init SmartHomeNG 1.7.2c.b9936a87.develop --------------------
    2020-12-12 21:38:21 WARNING lib.smarthome Running in Python interpreter 'v3.8.5 final' on Linux-5.4.0-1022-raspi-armv7l-with-glibc2.29 (pid=11643)
    2020-12-12 21:38:22 WARNING lib.shtime Nutze Feiertage für Land 'DE', Provinz 'None', State 'None', 1 benutzerdefinierte Feiertagsdefinition(en) definiert
    2020-12-12 21:38:28 WARNING lib.smarthome SmartHomeNG initialization finished
    2020-12-12 21:38:28 WARNING plugins.viessmann Communication no longer initialized, trying to reestablish.
    2020-12-12 21:38:30 ERROR plugins.viessmann Received 0 bytes chunk - ignoring response_packet! chunk was: b''
    2020-12-12 21:38:33 ERROR plugins.viessmann Received 0 bytes chunk - ignoring response_packet! chunk was: b''
    2020-12-12 21:38:33 ERROR plugins.viessmann send_command failed with error: Error receiving response: 'ISNON'.
    2020-12-12 21:38:36 ERROR plugins.viessmann Received 0 bytes chunk - ignoring response_packet! chunk was: b''
    Und das einzige was er eingesammelt hat, ist die Kesseltemperatur, alles andere steht auf 0

    Hab mal das Debug Logfile als Anlage angehängt.
    Angehängte Dateien
    Zuletzt geändert von TCr82; 12.12.2020, 23:12.

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Super, mache ich gleich mal Danke!

    EDIT:

    ok, scheinbar bin ich zu doof

    2020-12-12 21:06:22 ERROR plugins.viessmann Sets s, y, s, t, e, m, , s, c, h, e, m, e, s for heating type V200KW2 could not be found!
    Parameter in der plugin.yaml
    Code:
    viessmann:
       plugin_name: viessmann
       serialport: /dev/ttyOptolink
       heating_type: V200KW2
       protocol: KW
    Hab auch als type 2098 versucht, annähernd selbes Ergebnis.

    2020-12-12 21:10:00 ERROR plugins.viessmann Sets c, o, m, m, a, n, d, o, p, e, r, a, t, i, n, g, , m, o, d, e, s, s, y, s, t, e, m, , s, c, h, e, m, e, s for heating type 2098 could not be found!
    EDIT2:
    Ok, ich sehe gerade was fehlt, versuche das erstmal selbst rein zu bauen. - bzw hab jetzt erstmal die systemschemes von V200KO1B für V200KW2 kopiert
    Zuletzt geändert von TCr82; 12.12.2020, 22:16.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    So, KW ist implementiert und die beiden Heizungen habe ich aufgenommen.

    Bei mir (aktuelle V200WO1C) geht alles mit P300 genauso wie mit KW, ich kann keine funktionalen Unterschiede feststellen.

    Aber:

    Da KW einen Schreibvorgang am Interface immer nur nach dem 0x05 akzeptiert, dauern umfangreiche Zugriffe etwas länger. Meine cycle umfasst 21 Items. Mit P300 dauert das 4,6 Sekunden, mit KW 14 Sekunden. Immer noch handlebar, aber deutlich länger.

    Die Möglichkeit, weitere Kommandos direkt anzuhängen, ist mir bekannt. Dafür muss ich aber das ganze Sende-/Empfangsteil _komplett_ umschreiben, weil ich dann eine Queue für mehrere Kommandos einrichten müsste (sonst wüsste das Plugin ja nicht, dass mehrere Befehle unmittelbar aufeinander folgen), und um konkurrierende Zugriffe zu vermeiden, müsste der IO-Thread ausgelagert werden.

    Das ist prinzipiell kein Problem (machen kodi und yamahayxc im Prinzip genauso), aber das Umschreiben der bisherigen Routinen wird dann etwas aufwändiger. Wenn Bedarf dafür da ist, müsste der bitte geäußert werden, dann würde ich das machen, ansonsten erst mal nicht.

    Bitte testet das Plugin wie gehabt
    - in eurer Standardkonfiguration (keine neuen Fehler)
    - in eurer Standardkonfiguration, aber mit Protokoll 'KW' (neuen Code)
    - mit euren Heizungen, die bisher nicht drin waren (Protokollcode und Adressen!)

    Insbesondere für TCr82: bitte probiere mal alle Datenpunkte aus, die in eingebaut habe, und gib mir ein Feedback, ob die ok sind oder ob es Fehler oder (bei KW) unplausible Daten gibt (das könnten dann Fehler sein). Wenn dir noch Punkte fehlen, kannst du die gern selbst ergänzen oder mir mitteilen, welche ich an welchen Adressen zufügen soll.

    https://github.com/Morg42/viessmann

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Morg Beitrag anzeigen
    (Ich glaube, ich habe noch nie irgendwo gewohnt, wo es zwei Heizkreise gab... komisch eigentlich. Sind die für verschiedene Räume?)
    Die typische Anwendung ist der Mischbetrieb von normalen Heizkörpern an A1 (die eine höhere Vorlauftemp brauchen) und Fußbodenheizung mit niedriger Vorlauftemp (so ist es bei mir) oder Heizung im Haus mit 2 Wohneinheiten, und jede hat einen HKL.

    Zitat von Morg Beitrag anzeigen
    Zum Protokoll: soweit ich das jetzt verstanden habe, ist KW2 (oder KW?) wohl vergleichbar mit P300, nur ohne Status (initialized) und ohne
    So schein es zu sein, zumindest steht es so auf der vcontrold Seite (hatte ich oben verlinkt)
    Zitat von Morg Beitrag anzeigen
    damit wir seine Datenpunkte überprüfen
    Die Datenpunkte stehen auch auf der vcontrold Seite in einer Tabelle. Hab hier auch noch was dazu gefunden

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Ja, danke, das bringt mir etwas Licht ins Dunkel

    (Ich glaube, ich habe noch nie irgendwo gewohnt, wo es zwei Heizkreise gab... komisch eigentlich. Sind die für verschiedene Räume?)

    Zum Protokoll: soweit ich das jetzt verstanden habe, ist KW2 (oder KW?) wohl vergleichbar mit P300, nur ohne Status (initialized) und ohne Prüfsummen. Ich hoffe, dass das einigermaßen problemlos umzusetzen ist Ja, testen werde ich es hier auf jeden Fall mal, und wenn es - erstmal - fehlerfrei läuft, "dürft" ihr nochmal test, insbesondere dann TCr82, damit wir seine Datenpunkte überprüfen können, bevor das "online" geht.

    Updates checke ich in mein Repo erst ein, wenn es hier fehlerfrei läuft, insofern ist das vielleicht nicht immer ganz aktuell ich melde mich, sobald ich was habe.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Morg Beitrag anzeigen
    Kann mir einer von euch sagen
    HK1, 2, 3, sind allgemeine Bezeichnungen für die Heizkreise (durchnummeriert).
    Bei Viessmann wird es wohl spezifischer angegeben. A1 etc sind Heizkreise ohne Mischer (für was das A genau steht, weiß ich auch nicht); M1 etc sind Heizkreise mit Mischer, daher das M.

    Bei mit ist HK1 = A1 also Heizkreis ohne Mischer, die VL-Temp entspricht der des Heizkessels. Deshalb gibt es den Datenpunkte VL-Temp A1 auch nicht, da es gleich der Temp des Heizkessels ist. HK2 ist bei mir M2, also Heizkreis mit Mischer.

    Allgemein wird er HK1 auch A1M1 genannt, da dieser Kreis ohne Mischer (dann A1) oder mit Mischer (dann M1) betrieben werden kann. Die Mischeransteuerung ist ein zusätzliches Gerät, dass an den internen Bus der Vitotronic angeschlossen ist.

    Reicht Dir das?

    BTW: Das KW2 Protokoll sollten wir auch testen können, dann die Steuerungen die P300 können, können auch KW2.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Ich versuche gerade, mich durch die möglichen und "sinnvollen" Befehle für die V200KW2 zu kämpfen.

    Kann mir einer von euch sagen, was die "Heizkreise" (?) A1 und M1 sind bzw. bedeuten? In den neueren Heizungen gibt es ja meist HK1/HK2/HK3...

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Die uneinheitliche Struktur und Benennung liegt einfach daran, dass da viele Leute zu beigetragen haben, es aber niemand zentral verwaltet hat. Der eine nimmt die Originalbezeichnungen von Viessmann, der andere welche, die ihm passen (und ggf. kürzer sind), wieder andere nehmen die Beispielbezeichnungen von vcontrold. Dann gibts auch noch englische Namen dazwischen, damit es auch schön bunt wird

    Im Prinzip ist aber auch egal, wie es heißt, da ja kaum zwei Heizungstypen die gleichen Funktionssätze haben, insofern muss man ja eh jedes Mal neu alle Daten zusammensuchen. Ich versuche natürlich, in der commands.py alle Kommandos so weit wie möglich einheitlich zu benennen...

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Also ich probiere gerade selbst mal da durchzublicken.

    Was mir hier gleich auffällt, dass so vieles Doppelt vorkommt - an Kommandos, die bei mehreren Anlagen gleich sind.

    Ich will damit sagen, dass evtl. die Struktur nicht optimal gewählt wurde. Ich überlege aber gerade selbst, wie das besser aussehen könnte.
    Was mir da gerade in den Sinn kommt ist eine kleine sqllite db. Aber evtl. wäre das auch in der aktuellen Form brauchbar umsetzbar..

    Und was jetzt schon nach dem 2. Device begonnen hat, dass die Namen der Objekte unterschiedlich genannt werden.

    Wäre es nicht sinnvoll eine Struktur vorzugeben?

    Ich meine damit zB.: Einmal heist es DevType - einmal Anlagentyp

    Code:
    [FONT=monospace][COLOR=#000000]commandset = { [/COLOR]
       [COLOR=#54ff54][B]'V200KO1B'[/B][/COLOR][COLOR=#000000]: {[/COLOR][/FONT]
    [FONT=monospace][COLOR=#54ff54][B]'DevType'[/B][/COLOR][COLOR=#000000]:                  {[/COLOR][COLOR=#54ff54][B]'addr'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#54ff54][B]'00F8'[/B][/COLOR][COLOR=#000000], [/COLOR][COLOR=#54ff54][B]'len'[/B][/COLOR][COLOR=#000000]: 8, [/COLOR][COLOR=#54ff54][B]'unit'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#54ff54][B]'DT'[/B][/COLOR][COLOR=#000000],      [/COLOR][COLOR=#54ff54][B]'set'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#ff54ff][B]False[/B][/COLOR][COLOR=#000000]},   [/COLOR][COLOR=#ff5454][B] # Heizungstyp[/B][/COLOR][/FONT]
    [FONT=monospace][COLOR=#000000]  },[/COLOR][/FONT]
    [FONT=monospace][COLOR=#54ff54][B]'V200WO1C'[/B][/COLOR][COLOR=#000000]: {[/COLOR][/FONT]
    [FONT=monospace][COLOR=#54ff54][B]'Anlagentyp'[/B][/COLOR][COLOR=#000000]:               {[/COLOR][COLOR=#54ff54][B]'addr'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#54ff54][B]'00F8'[/B][/COLOR][COLOR=#000000], [/COLOR][COLOR=#54ff54][B]'len'[/B][/COLOR][COLOR=#000000]: 2, [/COLOR][COLOR=#54ff54][B]'unit'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#54ff54][B]'DT'[/B][/COLOR][COLOR=#000000],      [/COLOR][COLOR=#54ff54][B]'set'[/B][/COLOR][COLOR=#000000]: [/COLOR][COLOR=#ff54ff][B]False[/B][/COLOR][COLOR=#000000]},     [/COLOR][COLOR=#ff5454][B] # getAnlTyp -- Information - Allgemein: Anlagentyp (204D)[/B][/COLOR][/FONT]
    [FONT=monospace][COLOR=#000000]  },[/COLOR][/FONT]
    }
    Dann wird es auch einfacher sowas wie Templates zu erstellen, die für alle gehen. Die könnte man dynamisch Auswerten ala: (If TempA) print TempA bzw If DevTyp = X usw

    Zuletzt geändert von TCr82; 11.12.2020, 20:59.

    Einen Kommentar schreiben:

Lädt...
X