Modul zur Anbindung Viessmann Heizung (Vitotronic 200 KW1)

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

Vorheriges Thema - Nächstes Thema

amenomade

@Gunther & kvo1: sorry guys, hatte ein paar Tage Urlaub. Ich werde versuchen, in den kommenden Tagen, was hochzuladen.

Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

crispyduck

Anbei das letzte Modul von Stephan mit meinen Änderungen. Habe es oben in die Signatur mal so eingefügt:

# Based on:
# $Id: 89_VCONTROL.pm 11776 2016-07-10 13:57:22Z adamwit $
# modified to work also with configdb by Crispyduck (17.04.2017)

Geändert habe ich folgende zwei Abschnitte:

Ab Zeile 164
  #check existence of config_file
  if($a[3]){
     $command_config_file = $a[3];
         
     if(-e $command_config_file){
        Log3 $name, 3, "VCONTROL: Define open DATEI '$command_config_file'";
        VCONTROL_CmdConfig($command_config_file);
     }
     else {
        my $msg = "config file $command_config_file does not exist";
      Log3 undef, 2, $msg;
      return $msg;
    }
  }

zu
  #load config_file
  if($a[3]){
     $command_config_file = $a[3];
     VCONTROL_CmdConfig($command_config_file);
  }


Ab Zeile 965
#####################################
#####################################
## Load Config
#####################################
#####################################
sub VCONTROL_CmdConfig($)
{
 
  my $cmd_config_file = shift;                     
 
  my ($sec,$min,$hour,$mday,$mon,$year) = localtime;
  my $write_idx=0;
  Log3 undef, 3, "VCONTROL: open DATEI '$cmd_config_file'";
  open(CMDDATEI,"<$cmd_config_file") || die "problem opening $cmd_config_file\n" ;

  undef @poll_cmd_list;
  undef @write_cmd_list;
  undef @timer_cmd_list;
#  undef @timer_ww_cmd_list;
 
  $viess_protocol = PROTOCOL_KW;
 
  while(<CMDDATEI>){
.
.
.
.
.
  };

close (CMDDATEI);
Log3 undef, 3, "VCONTROL: DATEI '$cmd_config_file' refreshed";
}

zu
#####################################
#####################################
## Load Config
#####################################
#####################################
sub VCONTROL_CmdConfig($)
{
 
  my $cmd_config_file = shift;                     
 
  my ($sec,$min,$hour,$mday,$mon,$year) = localtime;
  my $write_idx=0;

  Log3 undef, 3, "VCONTROL: open DATEI '$cmd_config_file'";
  my ($error, @vcontrolfilecontent) = FileRead($cmd_config_file);

  undef @poll_cmd_list;
  undef @write_cmd_list;
  undef @timer_cmd_list;
#  undef @timer_ww_cmd_list;
 
  $viess_protocol = PROTOCOL_KW;
 
  if ($error eq '')  {
      foreach (@vcontrolfilecontent)  {
.
.
.
.
.
};
      Log3 undef, 3, "VCONTROL: DATEI '$cmd_config_file' refreshed";
  }
  else {
     Log3 undef, 2, "VCONTROL ERROR: '$error'";
  }


Den check ob das File existiert habe ich also raus genommen und nur die Sub aufgerufen.

In der Sub lade ich den Inhalt des Files mit FileRead($cmd_config_file) in das @vcontrolfilecontent welches dann wenn $error='' mit foreach (@vcontrolfilecontent) statt der while Schleife weiter verarbeitet wird.


Vielleicht kann es ja Adam fix mit rein nehmen. Wie gesagt funktioniert die Änderung mit als auch ohne configdb. Wenn mit configdb muss das config File auch mit "configdb fileimport" in die DB importiert werden. Ich bevorzuge es alles in DBs zu speichern da diese erstens schon mal auf der NAS mit RAID laufen und zusätzlich leichter zu sichern sind. RPi mit FHEM läuft bei mir außerdem mit RO Filesystem und ist eigentlich recht dumm da sie sich die config erst aus der DB holt.

Lg,
Crispyduck

kvo1

Zitat von: amenomade am 18 April 2017, 13:01:07
@Gunther & kvo1: sorry guys, hatte ein paar Tage Urlaub. Ich werde versuchen, in den kommenden Tagen, was hochzuladen.

Gruß

ja , mach Dir keinen Streß.
Danke schon mal vorab !
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

amenomade

Hier meine Konfiguration:

fhem.cfg:
define wp_WW weekprofile
attr wp_WW tempOFF 10
attr wp_WW tempON 10.5
define nt_wpWW notify wp_WW { WpToVito("Vito300","wp_WW","default")}
define Vito300 VCONTROL300 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 V200KW1_300.cfg 180 kw
attr Vito300 event-on-change-reading .*(stat.*|Urlaub.*|TIMER.*).*
attr Vito300 event-on-update-reading .*(Brenn.*|Temp.*|Oel.*|pump.*).*
attr Vito300 userReadings Brennerstunden_Seit_Last_Tanken { sprintf("%.1f",ReadingsVal("Vito300", "BrennerStunden","") - ReadingsVal("Vito300", "Brennerstunden_Last_Tanken",""))}, Oelverbrauch_Seit_Last_Tanken { sprintf("%.1f", ReadingsVal("Vito300", "Oelverbrauch","") - ReadingsVal("Vito300", "Oelverbrauch_Last_Tanken",""))}
attr Vito300 vitotronicType 200_KWx
define FileLog_Vito300 FileLog ./log/Vito300-%Y.log Vito300
attr FileLog_Vito300 logtype text
define FileLog_Vito300_Oel FileLog ./log/Vito300_Oel-%Y.log Vito300.*Oel.*
attr FileLog_Vito300_Oel logtype text
define FileLog_Vito300_Temp FileLog ./log/Vito300_Temp-%Y.log Vito300.*Temp.*
attr FileLog_Vito300_Temp logtype text
define FileLog_Vito300_Brenner FileLog ./log/Vito300_Brenner-%Y.log Vito300.*(Brenner.*|Zirkulationspumpe.*).*
attr FileLog_Vito300_Brenner logtype text
define FileLog_Vito300_Oel_Day FileLog ./log/Vito300_Oel-Day-%Y.log Vito300.*Yesterday.*
attr FileLog_Vito300_Oel_Day logtype text
define wp_Hz weekprofile
attr wp_Hz tempOFF 10
attr wp_Hz tempON 10.5
define nt_wpHz notify wp_Hz { WpToVito("Vito300","wp_Hz","default")}


99_myUtils:
sub
WpToVito($$$)
{
     my ($vito,$wp,$profile) = @_;
     my $json = fhem ("get $wp profile_data $profile");
     my $result = decode_json( $json );
     my $day;
     my $wert;
     my %output;
     my %weekday = ( 'Mon' => '_2_MO',
                     'Tue' => '_3_DI',
                     'Wed' => '_4_MI',
                     'Thu' => '_5_DO',
                     'Fri' => '_6_FR',
                     'Sat' => '_0_SA',
                     'Sun' => '_1_SO');
    while ( ($day,$wert) = each($result) ) {
        my @timetable = @{@{$wert}{"time"}};
        my @temptable = @{@{$wert}{"temp"}};
        my $l = scalar @timetable;
        my $nbtimes=0;
$output{$day} = "TIMER";
if ($wp eq "wp_WW") { $output{$day} .= "_WW"; };
$output{$day} .= $weekday{$day}." ";

        foreach my $i (0..$l-1)  {
            if ($temptable[$i] eq "on") {
                if ($i == 0) {
$output{$day} .= "00:00,$timetable[0]";
$nbtimes = 1;
}
elsif ($nbtimes < 4) {
if ($nbtimes > 0) { $output{$day} .= ","; };
$output{$day} .= "$timetable[$i-1],$timetable[$i]";
$nbtimes += 1;
};
};
};
foreach my $j ($nbtimes+1..4) {
if ($nbtimes > 0) { $output{$day} .= ","; };
$output{$day} .= "--,--";
$nbtimes += 1;
};
   
    };
    my $bef = "set ".$vito." ".$output{'Mon'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Tue'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Wed'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Thu'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Fri'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Sat'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

    $bef = "set ".$vito." ".$output{'Sun'};
    fhem( "$bef" );
    Log 1,"WpToVito $wp $profile: $bef\n";

}     


+ 2 Dateien im Anhang: tabletUI html Seite, und Vito300 config Datei.
+ 2 SVGPlots
Bei der Konfig, lese ich nicht permanent alle "konfig" Werte, die sich nicht ändern. Deswegen kommentiert.

Noch zu tun:
- im Moment ist das Status Heizung/Warmwasser auf Readonly. Plan: das auch mit "set"einstellen können.
- die Weekprofiles für WW und Heizung haben ein "bug": wenn man die abruft, werden alle Werte auf "off" gezeigt. Man soll die wieder ändern, bevor man speichert!
- Urlaub, Party und Spar -programme
- ein Knopf, für das Tanken, um automatisch die userReadings fürs Oelverbrauch zu setzen.

Gruß

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Heuberg

Hallo,

seit kurzem kann ich auch meine Vitotronic 200 KW1 ID 2094 auslesen (Danke PeMue).
Was bedeuten denn diese SET Commands?

SET, K26       
SET, URL-ON   
SET, URL-OFF

Viele Grüße
Rainer 
HM, MAX, MySensors, Fronius, Conbee II, ZigBee, VCONTROL, Modbus, RPi, AVM

PeMue

Hallo,

Zitat von: Heuberg am 18 April 2017, 22:35:38
Was bedeuten denn diese SET Commands?
SET, K26       
SET, URL-ON   
SET, URL-OFF
URL  ist der Urlaubs-Modus (an, aus), K26 ist die Verbrauchsanzeige (Codieradresse 26, siehe Vitotronic 200 KW 1 Serviceanleitung).

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Heuberg

Hi,

da kommt man vor laut Arbeit nicht mehr dazu normal zu denken :-)
URL=Uniform Resource Locator

Ich versuche es jetzt mal mit Urlaub, dann gehts wieder  ;).

Viele Grüße
Rainer
HM, MAX, MySensors, Fronius, Conbee II, ZigBee, VCONTROL, Modbus, RPi, AVM

crispyduck

Hallo,

habe meine Anpassungen am Modul damit es sowohl mit configdb als auch fhem.cfg funktioniert noch einmal überarbeitet.

FileRead wird jetzt vor dem Aufruf der Sub aufgerufen und bei einem Fehler das Modul mit return beendet.

Habe die Änderungen schon eine Weile mit dem 89_VCONTROL300.pm Modul laufen und da alles funktioniert diese jetzt auch für das 89_VCONTROL.pm gemacht.

Anbei das geänderte Modul welches nun auch mit cfg File in der configdb funktioniert.

Vielleicht kann Adam ja mal die Änderungen auch in das Modul mit aufnehmen.

Lg,
Crispyduck

jfhem

Hallo zusammen!

Ich habe eine V200WO1C Steuerung, welche ich auch bereits mit eurer Hilfe erfolgreich auslesen kann - vielen Dank an dieser Stelle für die dafür investierte Zeit!

Gerne würde ich das Auslesen um die Jahresarbeitszahlen (JAZ) sowie die COP-Werte erweitern. In einem Viessmann-Dokument mit dem Namen "Datenpunkte Vitogate 200 EIB bei Verwendung Vitotronic 200 W01C.pdf" konnte ich auch die dafür benötigen Adressen finden:

COP-Heizbetrieb (2 Byte): 0x1690
COP-Warmwasser (2 Byte): 0x1691
JAZ-Heizbetrieb (2 Byte): 0x1681
JAZ-Warmwasser (2 Byte): 0x1682
JAZ (2 Byte): 0x1680

Daraus habe ich die folgenden Einträge erstellt (in derselben Reihenfolge; andere 2Byte-Einstellungen habe ich auch bereits getestet)

POLL, 01F7168002, 2Byte, 10,             JAZ                                             , -
POLL, 01F7168102, 2Byte, 10,             JAZ_Heizen                                , -
POLL, 01F7168202, 2Byte, 10,             JAZ_WW                                    , -
POLL, 01F7169002, 2Byte, 10,             COP_Heizen                              , -
POLL, 01F7169102, 2Byte, 10,             COP_WW                                  , -

Leider passt bis jetzt lediglich der COP_WW. Was mache ich falsch? Über Hilfe wäre ich sehr dankbar.

crispyduck

Hallo jfhem,

Soweit ich das in Erfahrung bringen konnte dürften nicht alle Optolink Addressen mit jenen von Vitogate übereinstimmen.

Welche Heizung hast du zu der Steuerung? Split Gerät Wärmemengenzähler vorhanden?

Ich hatte selbes vor, aber nachdem mir meine Heizung einen COP von 8,2 lieferte rief ich bei Vissmann an und ein Techniker kam vorbei.

Im Endeffekt kam dann dabei raus das ich bei meiner Anlage, einem Vitocal 200 Split Gerät die Energiebillanz, COP und JAZ ohnehin vergessen kann wenn ich keinen Wärmemengenzähler einbaue.

Hab es daher dann auch bleiben lassen die Adressen heraus zu bekommen.

Lg
Crispyduck

jfhem

Hallo crispyduck,

vielen Dank für deine Nachricht. Als Heizung betreibe ich eine Vitocal 300-G. Die JAZ-Warmwasser, JAZ-Heizen sowie die Gesamt-JAZ kann ich im Menü der ablesen. Wie ich zuvor erwähnt habe, stimmt dir JAZ_WW auch in FHEM mit dem Wert aus dem Viessmann-Bedienteil überein.

crispyduck

#1331
Hi,

würde eventuell einmal andere Adressen versuchen. Mir hat mal jemand in der Vissmann Community den Tip gegeben folgende Adressen mal durch zu probieren:

ZitatProbier mal  die Adressen 0x1640+0x1641 und 45 + 46 und 50 + 51 und 60 + 61 und 65 + 66 und 70 + 71 sowie 80 + 81 + 82 + 83 + 84 und 90 + 91.

Generell findest du bis 0x16C0 noch ein paar interesannte Adressen. Wie die zu interpretieren sind musst du aber selbst herrausfinden. Smiley (zwinkernd)

Hab es bis jetzt aus Zeitründen einfach immer noch nicht geschafft zu schauen was noch alles abfragbar ist.

Hast du dir selbst ein cfg File zusammen gebaut? Könntest du dieses vielleicht auch hier anhängen,?

Lg,
Crispyduck

jfhem

Danke!

Das eerde ich einmal testen.

Ich verwende bis jetzt die Standard-V200WO1B.cfg - ergänzt um die Außentemperatur (wie im Forum beschrieben).

reibuehl

Wie interpretiert man eigentlich die beiden Brenner-Laufzeit Werte (01F708A704 - BrennerStunden und 01F708AB04 - BrennerStunden2) bei den Viessmann Ölheizungen? Der Brenner in meiner Heizung hat laut Heizungsbauer eine Zweistufige Düse, daher gehe ich davon aus, das die beiden Werte dazu gehören. Was mir aber nicht klar ist, ist ob bei Brennerstufe 2 auch Stufe 1 "mitläuft". Ich würde gerne Anhand der Brennerstunden den Ölverbrauch hochrechnen. Kennt jemand den Zusammenhang näher?
Reiner.

PeMue

Hallo Reiner,

ich verwende die Brennerstunden1, die Brennerstunden2 habe ich auf Null gesetzt und die sind auch nicht weiter hochgezählt worden.
Allerdings habe ich nur eine Düse.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser