Modul zur Anbindung Viessmann Heizung (Vitotronic 200 KW1)

Begonnen von Adam, 15 Februar 2014, 18:17:35

Vorheriges Thema - Nächstes Thema

mmi

Hi,

noch ein Update. Ich konnte früher die Brennerleistung (in Prozent) und den Status des Brenners (0/1) zusammen aus einer Adresse rausziehen.

Alte Definition:
POLL,   01F7A38F01, 1ByteU,             2,      Brennerleistung,                -
POLL,   01F7A38F02, 2BytePercent,       1,      Brennerstatus,                  -


Seit dem Update scheint das nur noch für die Leistung zu klappen (Wert ist plausibel). Der Status wird nun nicht mehr als 0/1 zurückgegeben:

POLL,   A38F, 1ByteU,           2,          Brennerleistung,            -
POLL,   A38F, 2BytePercent,     1,       Brennerstatus,                  -


2017-01-02_11:32:09 Heizung Brennerleistung: 22
2017-01-02_11:32:09 Heizung Brennerstatus: 44


Das ist erst mit neueren Versionen so (ab dem 29.12). Die Version von Adam wie auch Deine Version vor Implementation des 300 Protokolls haben mit 2BytePercent immer 0/1 zurückgeliefert.

Hier noch der Debug für das Auslesen:

2017.01.02 12:03:39 5: VCONTROL300: Send 41050001A38F0139
2017.01.02 12:03:39 5: SW: 41050001a38f0139
2017.01.02 12:03:39 5: VCONTROL300: Read '06'
2017.01.02 12:03:39 5: VCONTROL300: Read '41'
2017.01.02 12:03:39 5: VCONTROL300: Read '06'
2017.01.02 12:03:39 5: VCONTROL300: Received 2 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 3 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 4 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read 'A3'
2017.01.02 12:03:39 5: VCONTROL300: Received 5 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '8F'
2017.01.02 12:03:39 5: VCONTROL300: Received 6 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 7 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '2A'
2017.01.02 12:03:39 5: VCONTROL300: Received 8 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '65'
2017.01.02 12:03:39 5: VCONTROL300: Received 9 of 9 bytes
2017.01.02 12:03:39 5: VCONTROL300: Parsed 'Brennerleistung : 21'
2017.01.02 12:03:39 5: VCONTROL300: Update reading 'Brennerleistung : 21'
2017.01.02 12:03:39 5: VCONTROL300: Send 41050001A38F023A
2017.01.02 12:03:39 5: SW: 41050001a38f023a
2017.01.02 12:03:39 5: VCONTROL300: Read '06'
2017.01.02 12:03:39 5: VCONTROL300: Read '41'
2017.01.02 12:03:39 5: VCONTROL300: Read '07'
2017.01.02 12:03:39 5: VCONTROL300: Received 2 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 3 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 4 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read 'A3'
2017.01.02 12:03:39 5: VCONTROL300: Received 5 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '8F'
2017.01.02 12:03:39 5: VCONTROL300: Received 6 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '02'
2017.01.02 12:03:39 5: VCONTROL300: Received 7 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '2A'
2017.01.02 12:03:39 5: VCONTROL300: Received 8 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '01'
2017.01.02 12:03:39 5: VCONTROL300: Received 9 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Read '68'
2017.01.02 12:03:39 5: VCONTROL300: Received 10 of 10 bytes
2017.01.02 12:03:39 5: VCONTROL300: Parsed 'Brennerstatus : 42'
2017.01.02 12:03:39 5: VCONTROL300: Update reading 'Brennerstatus : 42'

srxp

Hi,
@mmi:
sollte nicht die Leistung den Addresstyp 2BytePercent haben und nicht der Status?

aber ich seh das problem schon.
melde mich wenn ichs behoben habe.

bezüglich deinem state problem....das ist nun behoben.
eigentlich ist es falsch hier state beim multiplicator zu setzen. die Werte die du schreiben willst sind ja kein state, der würde ja nur 0 oder 1 haben.
generell wird das aber jetzt ignoriert wenn der zu setzende werte direkt hinter der adresse steht bzw. einfach kein werte angegeben ist beim set.


@michaelr:
hab das Problem mit dem Betriebsmodus schon.
und zwar hab ich die Betriebsstati meiner WO1B angepasst, das ist nämlich so:
my @mode = ("Aus","Nur Warmwasser","Heizen und Warmwasser","","Reduziert","Normal","Abschaltbetrieb","Nur Kühlen");
Status 0=Aus, Status 1=Nur Warmwasser usw.
für Status 3 gibts aber nix bei mir...darum ist es in der Liste leer.
Bei KWx ist es aber wohl so:
my @mode = ("Nur Warmwasser","Reduziert","Normal","Heizen und Warmwasser","Heizen und Warmwasser FS","Abschaltbetrieb");
vielleicht müsste ich hier ein Attribut anlegen damit man das abhängig von der Vitotronic eintragen kann oder ich checke welche Vitotronic es ist und mach das dann automatisch im Code. Muss ich mir noch überlegen.

Wegen dem Datumsproblem hab ich den Fehler gefunden...sollte nun passen.
Leider kann ich es nicht testen da ich die zeit nicht auslesen kann....die dürfte bei mir anders kodiert sein und ich hab noch nicht rausgefunden wie.



Anbei die neue Version.

lg

michaelr

Hallo Stephan,

bestätigt, die Systemzeit geht jetzt.

Betriebsarten sind bei meiner Anlage wie bereits beschrieben: 0=WW, 3=HZ+WW und 5=Aus.
Nummer 1,2 und 4 habe ich nicht.

Auslesen, anzeigen und schreiben geht jetzt auch über die Nummern mit folgender Einstellung:
POLL, 3301, 1ByteU, 1, Betriebsart, -
SET,  3301, 1ByteU, 1, Betriebsart , - 

Evtl. lässt sich das über die Geräte Kennung ableiten. Die Gerätekennung (in meinem Fall 0x2098) könnte man aus Adresse 0x00F8 auslesen. Ich denke das ist bereits bekannt, bin mir aber nicht sicher, ob dies für alle Anlagen gilt.

Besteht noch die Möglichkeit 2 Bytes in Hex auszulesen (2ByteN oder native) um die Geräte Kennung mit dem Original HexCode darzustellen.

Vielen Dank noch mal.

Gruß,
Michael

srxp

Hi Michael,
ja über die Gerätekennung wäre es eine gute Lösung denke ich...sofern die Parameteradresse wirklich für alle Anlagen gleichen ist.

Als Adressentyp für die Gerätekennung einfach 2ByteH nehmen...dann bekommst den Wert direkt als Hexcode.

lg

stephan

mmi

#1159
Hi Stephan,

das mit dem Betriebszustand direkt schreiben klappt mit dem neuesten Update leider immer noch nicht:


2017.01.02 17:36:16 3: Opening Heizung device /dev/ttyUSB0
2017.01.02 17:36:16 3: Setting Heizung serial parameters to 4800,8,E,2
2017.01.02 17:36:16 3: Heizung device opened
2017.01.02 17:36:16 4: VCONTROL300: Start of update...
2017.01.02 17:36:16 4: VCONTROL300: Start of set values...
2017.01.02 17:36:16 4: VCONTROL300: Waiting for sync byte...
2017.01.02 17:36:16 5: SW: 04
2017.01.02 17:36:17 4: VCONTROL300: Waiting for sync byte...
2017.01.02 17:36:17 5: SW: 04
2017.01.02 17:36:18 4: VCONTROL300: Received sync byte!
2017.01.02 17:36:18 4: VCONTROL300: Waiting for init byte...
2017.01.02 17:36:18 5: SW: 160000
2017.01.02 17:36:18 4: VCONTROL300: Received init byte!
2017.01.02 17:36:18 4: VCONTROL300: Init status: 'ok'!
2017.01.02 17:36:18 4: VCONTROL300: Set value 410600022323014F
2017.01.02 17:36:18 5: VCONTROL300: Send 410600022323014F
2017.01.02 17:36:18 5: SW: 410600022323014f
2017.01.02 17:36:18 5: VCONTROL300: Read '15'
2017.01.02 17:36:18 2: VCONTROL300: Error while setting value for parameter 2323: Status 0x15!!!
2017.01.02 17:36:18 4: VCONTROL300: Set value 410600022323014F
2017.01.02 17:36:18 5: VCONTROL300: Send 410600022323014F
2017.01.02 17:36:18 5: SW: 410600022323014f


Ich hatte danach beim Multiplikator state durch 1 ersetzt, das hat keine Änderung gebracht.

Bislang lief das Modul soweit durch. Es gab 3x Probleme beim Auslesen. Leider hatte ich kein verbose Logging an - ich versuche jetzt, so einen Fehler nochmal genauer mitzuschneiden.

Update: Der Fehler trat eben wieder auf, anbei das Log. Sieht so aus, als wenn das Timing durcheinandergerät. Der Poll ist dabei schon kurz vor der Beendigung, der Grossteil der Werte wurde vorher abgefragt.

srxp

Hi,
hier nochmal ne neue Version.

@mmi:
hab den Fehler bezüglich Betriebszustand setzen gefunden und behoben. hoffe es klappt jetzt. :-)

wegen deinem Problem mit der Brennerleistung und dem Brennerstatus:
Es gibt nun 2 neue Address typen: 2ByteU_1stByte und 2ByteU_2ndByte. Das Erstere liefert wie der Name schon sagt das erste Byte eines 2Byte Wertes zurück und das Letztere das 2te Byte. Somit sollte dein Problem gelöst sein hoffe ich. Und es scheint mir eine saubere Lösung zu sein.

Dein Log vom vorigen Post muss ich mir erst anschaun.

@michael:
hab es jetzt so gelöst. es gibt nun ein attribut vitotronicType. da wählt man einfach seinen type aus und voila man bekommt die richtigen werte.
weiß jemand welche stati für die Vitrotronic HOxB korrekt sind? da hab ich derweil die gleich wie von der WO1x genommen.

lg

stephan

srxp

so und jetzt bin ichs  nochmal.
hab den Fehler schon gefunden mmi :-)
er kam tatsächlich durcheinander da die vitoronic oft mehr als 1 byte liefert mit einem read...das hatte ich im prinzip auch berücksichtig allerdings nicht beim acknoledgebyte 0x06.
ich hoffe es klappt nun.

lg

stephan

michaelr

Hallo Stephan,

habe Attribute vitotronicType ausprobiert und es funktioniert perfekt!!

Wie geht denn das eigentlich mit dem set?
Sollte ich ein "set Viessmann Betriebsart xxx" benutzen können? Was wäre dann xxx? Der lange Text mit Leerzeichen wäre da nicht so optimal? Wenn ich den langen Text "Nur Warmwasser" nehme, passiert allerdings nichts. Übrigens auch wenn ich "set Viessmann WW" (siehe Auszug Konfiguration) versuche passiert bei mir nichts. Habe ich das falsch definiert?

Ich kann nur mit "set Viessmann BetriebsartCode 0" aus Nur Warmwasser umschalten.

Auszug Konfiguration:
SET,  3301,  mode, 1, Betriebsart , - 
SET,  3301, 1ByteU, 1, BetriebsartCode , - 
SET,  330105, 1ByteU, 1, ABSCHALT , -
SET,  330100, 1ByteU, 1, WW , -
SET,  330103, 1ByteU, 1, H+WW , -

Gute Nacht,
Michael

ManfredC

#1163
Zitat von: srxp am 02 Januar 2017, 22:40:10

Weiß jemand welche stati für die Vitrotronic HOxB korrekt sind? da hab ich derweil die gleich wie von der WO1x genommen.

Bei mir ging Deine 89_VCONTROL.pm nicht, weil Du die Stati gegenüber der originalen Version geändert hast. Ich hab dann die alte Zeile wieder aktiviert und Deine auskommentiert:

my @mode = ("WW","RED","NORM","H+WW","H+WW FS","ABSCHALT");
#my @mode = ("Aus","Nur Warmwasser","Heizen und Warmwasser","","Reduziert","Normal","Abschaltbetrieb","Nur Kühlen");


Könnte man das vielleicht konfigurierbar machen? Sonst muss man bei jedem Update daran denken.


Das hab ich von der vito.rampro.de Webseite:

Identifier               E_BA2
Name                          Betriebsart
Datatype               enum
Type (vcontrold)       enum
Values                        0=Nur WW
                              1=Dauernd Reduziert
                              2=Dauernd Normal
                              3=Heizen und WW
                              4=Heizen und WW
                              5=Abschalt

Datenpunkt-Adressen mit dieser Umrechnung:
2301, 3301, 4301


Ich hab eine Vitotronic V200 KW1.

Grüße,

Manfred

ManfredC

Zitat von: ManfredC am 03 Januar 2017, 09:41:53

Könnte man das vielleicht konfigurierbar machen? Sonst muss man bei jedem Update daran denken.

Ups, erst richtig gucken, dann meckern :)

Ich hab mal in 89_VCONTROL300 geschaut, da ist es schon drin.


#States the Heater can be set to
#my @mode0 = ("WW","RED","NORM","H+WW","H+WW FS","ABSCHALT");
my @mode;
my @mode0 = ("Nur Warmwasser","Reduziert","Normal","Heizen und Warmwasser","Heizen und Warmwasser FS","Abschaltbetrieb");
my @mode1 = ("Aus","Nur Warmwasser","Heizen und Warmwasser","","Reduziert","Normal","Abschaltbetrieb","Nur Kühlen");


Muss ich doch langsam aber sicher auf diese Version umstellen  ;)

Grüße,

Manfred

mmi

Hi Stephan,

vielen, vielen Dank für die nächtlichen Updates. Die Änderungen sehen gut aus, bislang keine Fehler mehr beim Pollen. Wie immer: ich lass es durchlaufen und melde mich bei Auffälligkeiten.

Ich hab alle möglichen set Kommandos durchgetestet, auch hier ist alles in Ordnung. Direktes Setzen der Betriebsart geht nun, auch alle anderen Varianten die ich so benötige, funktionieren (Heizkurve, Warmwasser, Eco/Partymodus, Raumtemperatur etc.).

Das Auslesen von Timern klappt ebenfalls. Normalerweise hat das Device bei mir einen Verbose Level von 2, hier werden beim Timerlesen noch einige Debugs mitgeloggt. Ich hab das mal korrigiert (s.u.)

Beim Tageswechsel wurden die Werte für Brennerstart und -laufzeit in die eigenen Suffixe ordentlich umgetragen bzw. neu berechnet, hier am Beispiel der Brennerlaufzeit:


2017-01-02_23:58:30 Heizung Brennerlaufzeit: 498.95
2017-01-02_23:58:30 Heizung BrennerlaufzeitToday: 23.95

2017-01-03_00:00:00 Heizung Brennerlaufzeit: 498.97
2017-01-03_00:00:00 Heizung BrennerlaufzeitToday: 23.97
2017-01-03_00:00:00 Heizung BrennerlaufzeitLastDay: 23.97
2017-01-03_00:00:00 Heizung BrennerlaufzeitDayStart: 498.97

2017-01-03_00:01:30 Heizung Brennerlaufzeit: 499.00
2017-01-03_00:01:30 Heizung BrennerlaufzeitToday: 0.03


Die beiden neuen Adresstypen funktionieren auch, Brennerstatus und -leistung werden richtig ausgelesen. Es gab beim Start noch ein Problem, da die Adresstypen vom Modul als ungültig erkannt wurden, das habe ich ebenfalls korrigiert:

--- /tmp/89_VCONTROL300.pm 2017-01-03 10:49:50.600142411 +0100
+++ 89_VCONTROL300.pm 2017-01-03 11:32:27.371614656 +0100
@@ -1535,6 +1535,8 @@
                  && $cfgarray[2] ne "2ByteU"
                  && $cfgarray[2] ne "1ByteH"
                  && $cfgarray[2] ne "2ByteH"
+                 && $cfgarray[2] ne "2ByteU_1stByte"
+                 && $cfgarray[2] ne "2ByteU_2ndByte"
                  #&& $cfgarray[2] ne "2BytePercent"
                  && $cfgarray[2] ne "4Byte"
                  && $cfgarray[2] ne "mode"
@@ -1715,7 +1717,7 @@
{
   my $binvalue = shift;

-  Log3 undef, 2, "VCONTROL300: Timer $binvalue";
+  Log3 undef, 4, "VCONTROL300: Timer $binvalue";

   $binvalue = pack('H*', "$binvalue");

@@ -1740,7 +1742,7 @@

      #my $byte = $bytes[$a];

- Log3 undef, 2, "VCONTROL300: Timerbyte $byte";
+ Log3 undef, 4, "VCONTROL300: Timerbyte $byte";

      if ($byte == 0xff){
      $timer_str = $timer_str."--";

srxp

Hallo alle zusammen,
hier wieder mal eine neue Version.
hab ein paar Optimierungen vorgenommen:

  • Gibt man bei einem Set in der Multiplicator Spalte der Wert "mode" an, so bekommt man in der Set-Liste ein DropDown Feld mit den Betriebsstati. ACHTUNG: zuvor stand "mode" in der Addresstype-Spalte, dem ist jetzt nicht mehr so.
    dh. state und mode müssen immer in der Division bzw. Multiplicator Spalte stehen. Egal ob bei poll oder set. In der Addresstype Spalte gibts nun nur mehr die Byte-Angaben sowie timer und date.
    @michaelr: in deinem Fall müsste die Zeile "SET,  3301,  mode, 1, Betriebsart , -" bei dir nun so aussehen "SET,  3301,  1ByteU, mode, Betriebsart , -"

  • Gibt man "state" an, bekommt man beim Set nun auch eine DropDown Box mit "on" und "off" als Werte.
  • @mmi: yes danke :-)

  • Verwendung von Hashes anstatt Arrays

Hab ganze Nacht keinen einzigen Fehler mehr bekommen. :-) Wie schauts bei euch aus?
Ich hoffe jedenfalls das es nach diesem Update noch immer so ist. Derweil schauts jedenfalls gut aus. ;-)

lg

stephan

ManfredC

Moin,

Zitat von: srxp am 03 Januar 2017, 16:20:50
hab ein paar Optimierungen vorgenommen:

die läuft bei mir gar nicht. Es werden keine Daten gepollt, egal ob ser2net oder USB direkt. Und wenn ich in PGM2 auf die Heizungsseite gehe, stürzt FHEM ab mit der Meldung:

Can't use an undefined value as an ARRAY reference at ./FHEM/89_VCONTROL300.pm line 1402.


Anbei ein Logfile, zuerst die letzte Version und dann die von gestern Abend.


Grüße,

Manfred




srxp


srxp

#1169
Bzw kann es sein dass du keine Sets im cfg hast?

Update:
habs nochmal getestet mit dem KW Protokoll und bei mir geht es einwandfrei.
kommen bei dir beim 300er protokoll auch die fehler?