| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- ########################################################################################
- #
- # Vaillant_routines.pl ===> Insert into 99_myUtils.pm
- #
- # Collection of various routines for Vaillant heating systems
- #
- # KEEP THE NAME AND COPYRIGHT
- #
- # Prof. Dr. Peter A. Henning
- #
- # $Id: 99_myUtils.pm 2014-12 - pahenning $
- #
- ########################################################################################
- #
- # This programm is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # The GNU General Public License can be found at
- # http://www.gnu.org/copyleft/gpl.html.
- # A copy is found in the textfile GPL.txt and important notices to the license
- # from the author is found in LICENSE.txt distributed with these scripts.
- #
- # This script is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- ########################################################################################
- ###############################################################################
- #
- # Vaillant_HWC_mode_postproc
- #
- # postprocessing of
- # "get HWC OperatingMode\n\000get HWC Param1"
- # "read HWC Status2\n\000read SOL Status2"
- #
- ###############################################################################
- sub Vaillant_HWC_mode_postproc($$){
- my ($name,$str)=@_;
- my $hash = $defs{"$name"};
- my (@values,$day,$night,$off,$min,$max,$mode,$zval);
- if( $str =~ /.*;.*/){
- # target;mode target;0;0;0;131;22;0;min;max;0
- @values = split(/[; \n]/,$str);
- $day = sprintf("%4.1f",$values[0]);
- $mode = $values[1];
- $night = sprintf("%4.1f",$values[6]);
- $off = sprintf("%4.1f",$values[7]);
- $min = sprintf("%4.1f",$values[9]);
- $max = sprintf("%4.1f",$values[10]);
- } else {
- @values = split(' ',$str);
- $day = sprintf("%4.1f",$values[0]);
- $night = sprintf("%4.1f",$values[4]);
- $off = sprintf("%4.1f",$values[5]);
- $min = sprintf("%4.1f",$values[6]);
- $max = sprintf("%4.1f",$values[7]);
- if( $values[1]==0 ){
- $mode="disabled"
- }elsif( $values[1]==1 ){
- $mode="on"
- }elsif( $values[1]==2 ){
- $mode="off"
- }elsif( $values[1]==3 ){
- $mode="auto"
- }elsif( $values[1]==4 ){
- $mode="eco"
- }elsif( $values[1]==5 ){
- $mode="low"
- }
- }
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsBulkUpdate($hash, "mode", $mode);
- readingsBulkUpdate($hash, "Storage.day", $day);
- readingsBulkUpdate($hash, "Storage.min", $min);
- readingsBulkUpdate($hash, "Storage.max", $max);
- readingsEndUpdate($hash,1);
- $mode;
- }
- ###############################################################################
- #
- # Vaillant_HWC_state_postproc
- #
- # postprocessing of
- # "get HWC Status2\n\000get SOL Status2"
- # "read HWC Status2\n\000read SOL Status2"
- #
- ###############################################################################
- sub Vaillant_HWC_state_postproc($$){
- my ($name,$str)=@_;
- my $hash = $defs{"$name"};
- my (@values,$rval,$tval,$bval,$pval,$xval,$zval,$sp2,$sp3);
- if( $str =~ /.*;.*/){
- # status;ladung;SP1;target SP1;SP2;SP3
- @values = split(/[; \n]/,$str);
- $rval = sprintf("%5.2f",$values[2]);
- $tval = sprintf("%4.1f",$values[3]);
- $bval = ($values[0] == 80) ? "ON (WW)" : "OFF";
- $pval = ($values[1] == 1) ? "ON" : "OFF";
- $xval = sprintf("%5.2f %5.2f %5.2f %d %d", $values[2],0.0,$values[3],$values[0],$values[1]);
- $zval = sprintf("SP1.T %5.2f °C, %s", $values[2],$pval);
- $sp2 = sprintf("%5.2f",$values[5]);
- $sp3 = sprintf("%5.2f",$values[6]);
- }else{
- # SP1 target status ladung SP1 SP2 SP3
- @values = split(' ',$str);
- $rval = sprintf("%5.2f",$values[0]);
- $tval = sprintf("%4.1f",$values[1]);
- $bval = ($values[2] == 80) ? "ON (WW)" : "OFF";
- $pval = ($values[3] == 1) ? "ON" : "OFF";
- $xval = sprintf("%5.2f %5.2f %5.2f %d %d", $values[0],0.0,$values[1],$values[2],$values[3]);
- $zval = sprintf("SP1.T %5.2f °C, %s", $values[0],$pval);
- $sp2 = sprintf("%5.2f",$values[5]);
- $sp3 = sprintf("%5.2f",$values[6]);
- }
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsBulkUpdate($hash, "Storage.SP1.T", $rval);
- readingsBulkUpdate($hash, "Storage.SP2.T", $sp2);
- readingsBulkUpdate($hash, "Storage.SP3.T", $sp3);
- readingsBulkUpdate($hash, "Storage.target", $tval);
- readingsBulkUpdate($hash, "Burner", $bval);
- readingsBulkUpdate($hash, "Pump", $pval);
- readingsBulkUpdate($hash, "reading", $xval);
- readingsEndUpdate($hash,1);
- $zval;
- }
-
- ###############################################################################
- #
- # Vaillant_HWC_broadcast_postproc
- #
- # postprocessing of
- # "get cyc broad StatusHWC\n"
- # "read broad StatusHWC
- #
- ###############################################################################
- sub Vaillant_HWC_broadcast_postproc($$){
- my ($name,$str)=@_;
- my $hash = $defs{"$name"};
- my (@values,$rval,$tval,$bval,$pval,$xval,$zval);
- if( ($str eq "")||($str eq "no data stored") ){
- $rval = "err";
- $tval = "err";
- $bval = "err";
- $pval = "err";
- $xval = "err";
- $zval = "err";
- } elsif( $str =~ /.*;.*/){
- # status;ladung;SP1;target
- @values = split(';',$str);
- $rval = sprintf("%5.2f",$values[2]);
- $tval = sprintf("%4.1f",$values[3]);
- $bval = ($values[0] == 80) ? "ON (WW)" : "OFF";
- $pval = ($values[1] == 1) ? "ON" : "OFF";
- $xval = sprintf("%5.2f %5.2f %5.2f %d %d", $values[2],0.0,$values[3],$values[0],$values[1]);
- $zval = sprintf("SP1.T %5.2f °C, %s", $values[2],$pval);
- } else {
- @values=split(' ',$str);
- if( $values[1] < 15 ){
- $rval = "err";
- $tval = "err";
- $bval = "err";
- $pval = "err";
- $xval = "err";
- $zval = "err";
- }else {
- $rval = sprintf("%5.2f",$values[0]);
- $tval = sprintf("%4.1f",$values[1]);
- $bval = ($values[2] == 80) ? "ON (WW)" : "OFF";
- $pval = ($values[3] == 1) ? "ON" : "OFF";
- $xval = sprintf("%5.2f %5.2f %5.2f %d %d",$values[0],0.0,$values[1],$values[2],$values[3]);
- $zval = sprintf("SP1.T %5.2f °C, %s",$values[0],$pval);
- }
- }
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsBulkUpdate($hash, "Storage.SP1.T", $rval);
- readingsBulkUpdate($hash, "Storage.target", $tval);
- readingsBulkUpdate($hash, "Burner", $bval);
- readingsBulkUpdate($hash, "Pump", $pval);
- readingsBulkUpdate($hash, "reading", $xval);
- readingsEndUpdate($hash,1);
- $zval;
- }
- ###############################################################################
- #
- # Vaillant_HC_mode_postproc
- #
- # postprocessing of
- # "get HC OperatingMode\n\000get HC Param1\n\000get vrs620 NameHC"
- # "read HC OperatingMode\n\000read HC Param1\n\000read vrs620 NameHC"
- #
- ###############################################################################
- sub Vaillant_HC_mode_postproc($$$){
- my ($name,$str,$circuit)=@_;
- my $hash = $defs{"$name"};
- my (@values,$room,$night,$off,$add,$min,$max,$pre,$cname,$mode);
-
- $circuit=""
- if ( $circuit == 1);
- if( $str =~ /.*;.*/){
- # room;mode room;night;off;add;min;max;pre cname
- @values = split(/[; \n]/,$str);
- $room = sprintf("%4.1f",$values[0]);
- $mode = $values[1];
- $night = sprintf("%4.1f",$values[3]);
- $off = sprintf("%4.1f",$values[4]);
- $add = sprintf("%4.1f",$values[5]);
- $min = sprintf("%4.1f",$values[6]);
- $max = sprintf("%4.1f",$values[7]);
- $pre = sprintf("%4.1f",$values[8]);
- $cname = sprintf("%s",$values[9]);
- } else {
- @values = split(' ',$str);
- $room = sprintf("%4.1f",$values[0]);
- $night = sprintf("%4.1f",$values[4]);
- $off = sprintf("%4.1f",$values[5]);
- $add = sprintf("%4.1f",$values[6]);
- $min = sprintf("%4.1f",$values[7]);
- $max = sprintf("%4.1f",$values[8]);
- $pre = sprintf("%4.1f",$values[9]);
- $cname = sprintf("%s",$values[10]);
- if( $values[1]==0 ){
- $mode="disabled"
- }elsif( $values[1]==1 ){
- $mode="on"
- }elsif( $values[1]==2 ){
- $mode="off"
- }elsif( $values[1]==3 ){
- $mode="auto"
- }elsif( $values[1]==4 ){
- $mode="eco"
- }elsif( $values[1]==5 ){
- $mode="low"
- }
- }
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsBulkUpdate($hash, "mode".$circuit, $mode);
- readingsBulkUpdate($hash, "mode".$circuit.".off", $off);
- readingsBulkUpdate($hash, "Room".$circuit.".T", $room);
- readingsBulkUpdate($hash, "Room".$circuit.".night", $night);
- readingsBulkUpdate($hash, "Room".$circuit.".add", $add);
- readingsBulkUpdate($hash, "VL".$circuit.".T.min", $min);
- readingsBulkUpdate($hash, "VL".$circuit.".T.max", $max);
- readingsBulkUpdate($hash, "name".$circuit, $cname);
- readingsEndUpdate($hash,1);
- $mode;
- }
- ###############################################################################
- #
- # Vaillant_HC_mode_postproc
- #
- # postprocessing of
- # "read HC Status1\n\000read HC Status2a\n\000read broad StatusHC"
- #
- #
- ###############################################################################
- sub Vaillant_HC_state_postproc($$){
- my ($name,$str)=@_;
- my $hash = $defs{"$name"};
- my (@values,$vval,$rval,$bval,$pval, $qval,$xval,$zval);
- if( ($str eq "")||($str eq "no data stored") ){
- $vval = "err";
- $rval = "err";
- $bval = "err";
- $pval = "err";
- $qval = "err";
- $xval = "err";
- $zval = "err";
- }elsif( $str =~ /.*;.*/){
- #
- @values = split(/[; \n]/,$str);
- $vval = sprintf("%4.1f",$values[10]);
- $rval = sprintf("%4.1f",$values[11]);
- if( $values[14] == 0 ){
- $pval = "OFF";
- $qval = "0 0";
- }elsif( $values[14] == 1 ){
- $pval = "ON (HK)";
- $qval = "80 0";
- }elsif( $values[14] == 2 ){
- $pval = "ON (WW)";
- $qval = "0 80";
- }else{
- $pval = "unknown";
- $qval = "err";
- }
- }else{
- #
- @values = split(' ',$str);
- $vval = sprintf("%4.1f",$values[5]);
- $rval = sprintf("%4.1f",$values[6]);
- if( $values[2] == 0 ){
- $pval = "OFF";
- $qval = "0 0";
- }elsif( $values[2] == 1 ){
- $pval = "ON (HK)";
- $qval = "80 0";
- }elsif( $values[2] == 2 ){
- $pval = "ON (WW)";
- $qval = "0 80";
- }else{
- $pval = "unknown";
- $qval = "err";
- }
- }
-
- $bval = HzBedarf();
- $xval = sprintf("%5.2f %5.2f %s %5.2f",$vval,$rval,$qval,$bval);
- $zval = sprintf("VL.T %5.2f °C, RL.T %5.2f °C, %s",$vval,$rval,$pval);
-
- if( ($vval < 5) ){
- $vval = "err";
- $rval = "err";
- $bval = "err";
- $pval = "err";
- $qval = "err";
- $xval = "";
- $zval = "err";
- }
-
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsBulkUpdate($hash, "VL.T", $vval);
- readingsBulkUpdate($hash, "RL.T", $rval);
- readingsBulkUpdate($hash, "pump", $pval);
- readingsBulkUpdate($hash, "pump.P", $qval);
- readingsBulkUpdate($hash, "consumption", $bval);
- readingsBulkUpdate($hash, "reading", $xval)
- if( $xval ne "" );
- readingsEndUpdate($hash,1);
- $zval
- }
-
- ###############################################################################
- #
- # Vaillant_SOL_mode_postproc
- #
- # postprocessing of
- # "get HC OperatingMode\n\000get HC Param1\n\000get vrs620 NameHC"
- # "read HC OperatingMode\n\000read HC Param1\n\000read vrs620 NameHC"
- #
- ###############################################################################
- sub Vaillant_SOL_state_postproc($$){
- my ($name,$str)=@_;
- my $hash = $defs{"$name"};
- readingsBeginUpdate($hash);
- readingsBulkUpdate($hash, "postproc", $str);
- readingsEndUpdate($hash,1);
- }
-
-
- ###############################################################################
- #
- # Vaillant_Timer
- #
- ###############################################################################
- sub Vaillant_Timer($)
- {
- my @values=split(/[; ]/,$_);
- #-- suppress leading zero ?
- for(my $i=0;$i<6;$i++){
- $values[$i]=~s/^0//;
- }
- my $sval=sprintf("%s-%s",$values[0],$values[1]);
- $sval .=sprintf(", %s-%s",$values[2],$values[3])
- if($values[2] ne $values[3]);
- $sval .=sprintf(", %s-%s",$values[4],$values[5])
- if($values[4] ne $values[5]);
- return $sval;
- }
|