Modul zur Anbindung Viessmann Heizung (Vitotronic 200 KW1)

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

Vorheriges Thema - Nächstes Thema

Adam

Hi Klaus,

ich war dann doch nochmal im Keller  ;)

Habe mir mal direkt an meiner Vitotronic die Werte angeschaut.
Das was mit den 2Bytes als Brennerstarts per Modul ermittelt wird, stimmt bei mir überein.

Ich habe mir mal 4 Byte zurück liefern lassen im Modul, da kommt ein anderer Wert raus!

Also ich tendiere zu 2 Byte!!

kvo1

Hallo Adam,

ich quassi zeitgleich  ;)  und muß Dir Recht geben.
Man soll halt nicht immer alles glauben was da wo steht. Ich habe getestet
### "01F7088A02", "2Byte", 1,
2014.03.05 19:42:11 5: VCONTROL_READ
2014.03.05 19:42:11 5: VCONTROL: VCONTROL_Read '05'
2014.03.05 19:42:11 5: VCONTROL: send '01F7088A02'
2014.03.05 19:42:11 5: SW: ÷Š
2014.03.05 19:42:11 5: VCONTROL_READ
2014.03.05 19:42:11 5: VCONTROL: VCONTROL_Read 'd6'
2014.03.05 19:42:11 5: VCONTROL: VCONTROL_Read receive_len < 4, d6
2014.03.05 19:42:11 5: VCONTROL_READ
2014.03.05 19:42:11 5: VCONTROL: VCONTROL_Read '80'
2014.03.05 19:42:11 5: VCONTROL: receive 'BrennerStarts : 32982'

### "01F7088A04", "4Byte", 1,
2014.03.05 19:43:43 5: VCONTROL_READ
2014.03.05 19:43:43 5: VCONTROL: VCONTROL_Read '05'
2014.03.05 19:43:43 5: VCONTROL: send '01F7088A04'
2014.03.05 19:43:43 5: SW: ÷Š
2014.03.05 19:43:43 5: VCONTROL_READ
2014.03.05 19:43:43 5: VCONTROL: VCONTROL_Read 'd6'
2014.03.05 19:43:43 5: VCONTROL: VCONTROL_Read receive_len < 8, d6
2014.03.05 19:43:43 5: VCONTROL_READ
2014.03.05 19:43:43 5: VCONTROL: VCONTROL_Read '800000'
2014.03.05 19:43:43 5: VCONTROL: receive 'Brenner4Byte : 32982'
2014.03.05 19:43:43 5: Triggering Vito200 (1 changes)
2014.03.05 19:43:43 5: Notify loop for Vito200 Brenner4Byte: 32982

Bei 4 Byte kommen da halt 4 Nullen , was aber dann nicht paßt.
D6 und 80 wird ja dann vertauscht , also 80D6  === 32982 Starts


Nix für ungut , sorry !
klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Adam

Ist ja kein Problem, habe diesen Thread ja hier gestartet, damit wir gemeinsam raus finden was unsere Heizungen so treiben   ;)

Bin auch schon kurz vor dem release des allgemeineren Moduls  ;D
Dann kann man solche Tests mit dem Umstellen der Adressen oder Anzahl Bytes einfach konfigurieren
und muss nicht das Modul ändern und auch noch fhem durchstarten!!

Werde jetzt mal ne Doku beim Länderspiel zusammen schreiben und es dann hier gleich mal posten!!

Bis später

Bastelbernd

Hallo
bei mir stimmen die Werte mit 2Byte auch. Reicht ja auch, geht ja bis FFFF gleich 65535 Starts
werden ja sehen was dann passiert.

@Adam Bei der letzten Version hast du 1ByteParse geändert wegen der minus Werte, hat bei mir dazugeführt
das bei Brennerleistung öfters minus Werte standen was ja nicht sein kann. Habe ich bei mir wieder geändert.
Müßte eigentlich nur bei 2ByteParse für Temperatur Werte geändert werden.

Die andere Version für IP bin ich beim Testen.Da ich erst mal nur virtuell probiert habe kann ich erstmal sagen,
das auf jedenfalls eine Verbindung hergestellt wird. Mit den echten Optolink zu Testen ist erst mal schwierig da
beim entfernen sich jedesmal FHEM aufhängt.Ist aber bei der IP Verbindung auch so. Müsste vielleicht im Modul
noch etwas geändert werden ?
Bleibe aber dran.

Gruß Bernd
FHEM auf Server mit Mainboard ASRock J3160B,Gehause Mini ITX E-3002+ SSD
Viessmann(optolink) HM-CFG-USB(HMLAN), PoKeys57E
Jeelik(Arduino)+LaCrosse, Nextion
Firmata+Arduino+1Wire+2xDS2423+IN+OUT
Electrolama zig-a-zig-ah!,Zigbee2MQTT

kvo1

Zitat@Adam Bei der letzten Version hast du 1ByteParse geändert wegen der minus Werte, hat bei mir dazugeführt
das bei Brennerleistung öfters minus Werte standen was ja nicht sein kann. Habe ich bei mir wieder geändert.
Müßte eigentlich nur bei 2ByteParse für Temperatur Werte geändert werden.

Ja ist mir auch aufgefallen , meine Brennerleistung ist aktuell -35  ???
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Adam

Ja ihr habt recht, muss bei 2ByteParse rein!
Danke für den Hinweis!

Adam

#96
Hallo zusammen,

da das Modul hier so gut angenommen wurde, aber schnell klar war,
dass es nicht allgemein genug ist, war ich motiviert es nochmal etwas umzuschreiben
und zu verallgemeinern.  ;D

Ich habe nun ein zusätzliches Konfigfile erfunden, in dem die Adressen, Readingnamen
und vorhandenen Parse Methoden konfiguriert werden können.

Somit können alle das gleiche Modul nutzen und sich Heizungsspezifisch festlegen was ausgelesen werden soll.
Ich hoffe, dass so Konfigurationsfiles für die verschiedenen Heizungen zustande kommen,
die zukünftigen Usern das Aktivieren des Moduls wesentlich vereinfacht.

Ich habe die experimentelle Geschichte mit der LAN Anbindung erstmal raus gelassen,
kann man später noch hinzufügen, wenn es mal funktioniert !

Also das angehängte Modul wird dann wie folgt genutzt
(mein Konfigfile ebenfalls als Beispiel angehängt!):

Define:
define <name> VCONTROL <serial-device> <configfile> [<intervall>]

Beispiele:
#serielle Schnittstelle über com4
#alle 3 Minuten wird gepollt
#configfile heisst 99_VCONTROL.cfg und liegt im fhem root Verzeichnis

define Heizung VCONTROL com4 99_VCONTROL.cfg 180

#auf Linux muss das dann wohl so aussehen
define Heizung  VCONTROL /dev/ttyUSB3 99_VCONTROL.cfg 180

Details:
<serial-device>    USB Port (z.B. com4, /dev/ttyUSB3)
<intervall>          Anzahl Sekunden wie oft die Heizung ausgelesen werden soll
                          (default 180)
<configfile>         Pfad wo die Konfigurationsdatei für das Modul zu finden ist


Im configfile hat man nun folgende Möglichkeiten:

- Zeilen die mit # beginnen sind Kommentar!
- Polling Commandos haben den folgenden Aufbau:

POLL, ADDRESSE, PARSEMETHODE, DIVISOR, READING-NAME, KUMULATION

Beispiel:
POLL, 01F7080402, 2Byte, 10    , Temp-WarmWasser-Ist , -
POLL, 01F7088A02, 2Byte, 1     , BrennerStarts               , day

Bei den Polling Commandos mit dem Wert day bei der KUMULATION werden Tageswerte Kumuliert
und wird dann jeweils nach 00:00 Uhr die Werte des letzten Tages ebenfalls als Readings im Device eingetragen,
so dass man die Werte pro Tag auch plotten oder auswerten kann.
Beim Readingnamen wird dann jeweils: DayStart,Today und LastDay angehangen!

- Andere Konfigurationskommandos sind dann äquivalent konfiguriert,
wobei hier eventuell eine Adressänderug bisher nur Sinn macht:
GETTIMER,GETWWTIMER,SET,SETTIMERHZ,SETTIMERWW

Folgende Werte können per "GET" ausglesen werden:

1)
Die Timer-Werte der Heizung wann sie anspringen soll oder ausgehen soll,
bzw. wann Warm Wasser aufbereitet werden soll werden nicht gepollt.
Diese Werte kann man über get in die Readings schreiben lassen:

get <name des devices> HZTIMER

oder

get <name des devices> WWTIMER

2)
Konfigurationsdatei <configfile> neu einlesen mit:

get <name des devices> CONFIG


Folgende Werte können per "SET" gesetzt werden:

1)
Timer Werte setzen:

set <DeviceName> TIMER <mode>,<day>,<times>

<mode> HZ oder WW
    HZ Timer für Heizung an aus
    WW Timer für Warm Wasseraufbereitung

<day>  MO,DI,MI,DO,FR,SA,SO

<times> 8 Uhrzeiten mit Komma getrennt.  (AN1,AUS1,AN2,AUS2,AN3,AUS3,AN4,AUS4)
       Keine Uhrzeit muss als -- angegeben werden.
       Minuten der Uhrzeiten dürfen nur 00,10,20,30,40 oder 50 sein

2)
Betriebsart setzen:

set <DeviceName> <mode>

mode ist dann einer der Werte: WW ,  RED , NORM , H+WW ,  H+WW FS , ABSCHALT


Ich hoffe zum einen, dass Ihr diese Umstellung akzeptiert und auch für sinnvoll erachtet
und zum anderen, dass ich nicht zu viele neue Fehler hineinprogrammiert habe  ;)

Über erfolgreiche Tests, Fragen und Feedback würde ich mich freuen!

Adam

Update:Werde die aktuelle Version immer im ersten Post zur Verfügung stellen.

Bastelbernd

Hallo Adam
du bist ja super schnell.Werde ich gleich Morgen ausprobieren.
Bei der Version mit der LAN Anbindung glaube ich, das zwar eine Verbindung aufgebaut wird
aber es werden von dem Modul keine Daten empfangen.
Kannst du aber auch selber testen. Google mal nach "tibbo device server toolkit".
Damit kannst du das simulieren.

Gruß Bernd
FHEM auf Server mit Mainboard ASRock J3160B,Gehause Mini ITX E-3002+ SSD
Viessmann(optolink) HM-CFG-USB(HMLAN), PoKeys57E
Jeelik(Arduino)+LaCrosse, Nextion
Firmata+Arduino+1Wire+2xDS2423+IN+OUT
Electrolama zig-a-zig-ah!,Zigbee2MQTT

Adam

Hi Bernd,

muss mal schauen ob ich die nächsten Tage dazu Zeit habe,
das neue Modul hat viel Zeit gekostet und wie bei uns allen gibt es noch ETWAS neben FHEM  ::)

Aber vielleicht hat ja mal ein anderer Lust sich da reinzuwühlen ;)
Meistens muss man nur in anderen Modulen nachschauen wie das so gemacht wird.
Dann kann ich das gern übernehmen!

Aber wie gesagt, wenn Zeit da ist schaue ich mir das auch an,
hatte gehofft, das es unkomplizierter wäre

fischle

Hallo Adam,
na das sieht doch super aus, werde ich die nächsten Tage testen - gerade macht mein FHEM sein Update...
RPi,
- USB RS485 Adapter für Stromzähler DRS155M und SDM630M-DC (B+G E-Tech)
- Viesmann KO2B Heizung mit selbstbau Optolink Adapter
- Mi-Light WiFi-Bridge V4, WW/CW LED-Birne

kvo1

nur mal zur Info...

Hatte mich heute gewundert, das meine Werte nicht mehr automatisch aktualisiert werden... bis den Fehler gefunden hatte.

( "getBrennerStarts"   , "01F7088A0", "2Byte", 1,    "BrennerStarts");
anstatt
( "getBrennerStarts"   , "01F7088A02", "2Byte", 1,    "BrennerStarts");

Könnte man sowas irgendwie abfangen ? (ja schon klar , iss meine eigene Dummheit  ;D  )
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Bastelbernd

Hallo Adam,
habe dein letztes Modul getestet.
Das Define muß wohl bei Linux so aussehen "define Viessmann VCONTROL /dev/ttyUSB1 99_VCONTROL.cfg 180"
-BrennerStundenDayStart 2548.66083333333  :-\ wieder zu viele Stellen
_2ByteParse habe ich bei mir wieder so geändert
return unpack('s', pack('S',hex(substr($hexvalue,2,2).substr($hexvalue,0,2))))/$divisor;
sonst gab es nur falsche Werte.

get  HZTIMER geht leider auch nicht mehr.
2014.03.06 11:23:59 5: VCONTROL_READ
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read '30b0'
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read receive_len < 16, 30b0
2014.03.06 11:23:59 5: VCONTROL_READ
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read 'ffff'
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read receive_len < 16, 30b0ffff
2014.03.06 11:23:59 5: VCONTROL_READ
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read 'ffff'
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read receive_len < 16, 30b0ffffffff
2014.03.06 11:23:59 5: VCONTROL_READ
2014.03.06 11:23:59 5: VCONTROL: VCONTROL_Read 'ffff'
2014.03.06 11:23:59 5: VCONTROL: receive 'TIMER_1_SO : '
2014.03.06 11:24:02 5: VCONTROL_READ
2014.03.06 11:24:02 5: VCONTROL: VCONTROL_Read '05'

vielleicht kannst du da noch was ändern.

Bitte das alles nicht als Kritik ansehen.
Tolle Arbeit  :)
Das mit der cfg ist eine gute Lösung.

Gruß Bernd


   

FHEM auf Server mit Mainboard ASRock J3160B,Gehause Mini ITX E-3002+ SSD
Viessmann(optolink) HM-CFG-USB(HMLAN), PoKeys57E
Jeelik(Arduino)+LaCrosse, Nextion
Firmata+Arduino+1Wire+2xDS2423+IN+OUT
Electrolama zig-a-zig-ah!,Zigbee2MQTT

Adam

oh oh  ::)
hab ich mir schon fast gedacht, neues Modul neue Fehler.
Bin zeitlich im Moment recht knapp, Ihr könnt ja mal weiter sammeln  ;)
Ich schaue mir die Dinge spätestens am Wochenende an!!!

Adam

So nach dem mein Termin heute abend geplatzt ist konnte ich doch wieder die Finger nicht davon lassen   ::)

Folgende Dinge habe ich noch korrigiert:


  • alle Readings sollten nur noch max. 2 Stellen hinter dem Komma haben (alte aus der fhem.save oder bereits kumulierte noch nicht direkt)

  • 2ByteParse sollte nun auch vernünftig mit negativen Temps klar kommen und bei Readings die die 2ByteParse mit Divisor 1 nutzen also ohne negative Werte (z.B. Brennerstunden) auch
  • das Auslesen der Timer Werte funktioniert jetzt auch mit der neuen Version

  • ein SET oder GET während des Pollens wird nun auch nach Ende des Pollvorgangs ausgeführt (das war was Komplizierter  :o )

  • beim Einlesen der Konfigdatei wird nun bei den POLL - Commandos geprüft, das die Adresse mit "01F7" beginnt und mindestens 10 Zeichen hat,
    sonst wird sie nicht mit in die Liste aufgenommen

Na dann mal viel Spaß beim Testen  ;D

Gunther

Ich bin gerne beim Testen dabei.

Habe das Modul nun installiert. Da ich eine Vitosolic 300 KW3 habe, muss ich vermutlich noch etwas anpassen. Die ID habe ich in Deinem Konfig-File leider nicht gefunden. Kannst Du dazu bitte noch etwas sagen.

Meine Readings sehen nun so aus:
Brenner

off

2014-03-06 23:01:38
BrennerStarts

37060

2014-03-06 23:01:41
BrennerStartsDayStart

37060

2014-03-06 23:01:41
BrennerStartsToday

0

2014-03-06 23:01:41
BrennerStunden

4772.43

2014-03-06 23:01:59
BrennerStundenDayStart

4772.43

2014-03-06 23:01:59
BrennerStundenToday

0

2014-03-06 23:01:59
Oelverbrauch

0.00

2014-03-06 23:01:44
OelverbrauchDayStart

0.00

2014-03-06 23:01:44
OelverbrauchToday

0

2014-03-06 23:01:44
Temp-Aussen

11.2

2014-03-06 23:00:16
Temp-Kessel-Ist

0

2014-03-06 23:01:31
Temp-Kessel-Soll

91.6

2014-03-06 23:01:35
Temp-Raum-Soll

20

2014-03-06 23:03:56
Temp-WarmWasser-Ist

0

2014-03-06 23:00:19
Temp-WarmWasser-Soll

46

2014-03-06 23:00:41
UpdateTime

2014-02-06_23:03:56

2014-03-06 23:03:56
Zirkulationspumpe

off

2014-03-06 23:01:47
state

H+WW

2014-03-06 23:01:50
state_party

off

2014-03-06 23:01:53
state_spar

off

2014-03-06 23:01:56


Was mich irritiert sind folgende Werte:
Oelverbrauch = 0
Temp-Kessel-Ist = 0
Temp-Kessel-Soll = 91,6
Temp-WarmWasser-Ist = 0

Irgendwo habe ich gelesen, dass ich für die Ölverbrauchsanzeige noch etwas an der Vitosolic einstellen und den Düsenwert von meinem Heizungstechniker eerfragen/ eintragen muss, korrekt?

Bin schon begeistert, dass ich Brennerstunden sehen kann. Die Kummulation erfolgt vermutlich nach Mitternacht. Da warte ich mal geduldig ab.
Danke schonmal für die tolle Arbeit!
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden