2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 06:39:11 +00:00

Vallox: Changed way readings are updated. Added efficiency calculation and readings for HRC.

git-svn-id: https://svn.fhem.de/fhem/trunk@14210 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Skjall 2017-05-07 17:27:32 +00:00
parent b0ede0c950
commit 95e8914681
2 changed files with 84 additions and 5 deletions

View File

@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- change: 36_Vallox: Changed way readings are updated.
Added efficiency calculation and readings for HRC.
- change: 71_YAMAHA_AVR: changing values of reading values conform
to FHEM AV guidelines ("stopped", "playing" or "paused")
- bugfix 73_km200.pm: Errorlist unsorted timestamp part 3

View File

@ -5,6 +5,7 @@
#
# @Author Skjall
# @Created 21.07.2016 10:18:23
# @Version 1.2.0
#
# The modul reads and writes parameters via RS485 from and to a Vallox
# ventilation bus.
@ -845,11 +846,87 @@ sub Vallox_Read($)
if($Vallox_datatypes{$rawReadingType}) {
if ($singlereading == 1) {
if (ReadingsVal($name,$Vallox_datatypes{$rawReadingType},"unknown") ne $fineReadingValue) {
Log3 ($name, 5, "Vallox: Update Reading: $fineReadingValue");
readingsSingleUpdate($hash,$Vallox_datatypes{$rawReadingType}, $fineReadingValue, 1) ;
} else {
Log3 ($name, 5, "Vallox: Reading not changed: $fineReadingValue - Doing nothing.");
Log3 ($name, 5, "Vallox: Update Reading: $fineReadingValue");
readingsSingleUpdate($hash,$Vallox_datatypes{$rawReadingType}, $fineReadingValue, 1);
# Efficiency Calculation
#Is this Reading a Temp?
if (substr($Vallox_datatypes{$rawReadingType},0,4) eq "Temp") {
# If HRC is in Bypass - Efficiency is 0
if (ReadingsVal($name,"DamperMotorPosition",0) == 1) {
readingsSingleUpdate($hash,"EfficiencyIn", 0, 1);
readingsSingleUpdate($hash,"EfficiencyOut", 0, 1);
readingsSingleUpdate($hash,"EfficiencyAverage", 0, 1);
Log3 ($name, 5, "Vallox: Efficiency Override: HRC Bypass");
} else {
my ($EfficiencyIn,$EfficiencyOut,$TempIncoming,$TempOutside,$TempInside,$TempExhaust) = 0;
# Efficiency on Keep Temp Inside
# Do we have all nessecary Readings?
if (ReadingsVal($name,"TempIncoming","unknown") ne "unknown" &&
ReadingsVal($name,"TempOutside","unknown") ne "unknown" &&
ReadingsVal($name,"TempInside","unknown") ne "unknown") {
$TempIncoming = ReadingsVal($name,"TempIncoming",-100);
$TempOutside = ReadingsVal($name,"TempOutside",-100);
$TempInside = ReadingsVal($name,"TempInside",-100);
# Prevent DIV/0 (if Inside=Outside the HRC does nothing = 100% Efficient)
if ($TempInside-$TempOutside != 0) {
$EfficiencyIn = ($TempIncoming-$TempOutside)/($TempInside-$TempOutside)*100;
$EfficiencyIn = 100 if ($EfficiencyIn > 100);
Log3 ($name, 5, "Vallox: Efficiency Inside: (".$TempIncoming."-".$TempIncoming.")/(".$TempInside."-".$TempOutside.")*100 = ".$EfficiencyIn);
readingsSingleUpdate($hash,"EfficiencyIn", $EfficiencyIn, 1);
} else {
Log3 ($name, 5, "Vallox: Efficiency Inside (DIV/0 Prevention): (".$TempIncoming."-".$TempIncoming.")/(".$TempInside."-".$TempOutside.")*100 = 100");
readingsSingleUpdate($hash,"EfficiencyIn", 100, 1);
}
}
# Efficiency on Keep Temp Outside
# Do we have all nessecary Readings?
if (ReadingsVal($name,"TempOutside","unknown") ne "unknown" &&
ReadingsVal($name,"TempIncoming","unknown") ne "unknown" &&
ReadingsVal($name,"TempExhaust","unknown") ne "unknown") {
$TempOutside = ReadingsVal($name,"TempOutside",-100);
$TempIncoming = ReadingsVal($name,"TempIncoming",-100);
$TempExhaust = ReadingsVal($name,"TempExhaust",-100);
# Prevent DIV/0 (if Inside=Outside the HRC does nothing = 100% Efficient)
if ($TempOutside-$TempIncoming != 0) {
$EfficiencyOut = ($TempExhaust-$TempIncoming)/($TempOutside-$TempIncoming)*100;
$EfficiencyOut = 100 if ($EfficiencyOut > 100);
Log3 ($name, 5, "Vallox: Efficiency Outside: (".$TempExhaust."-".$TempIncoming.")/(".$TempOutside."-".$TempIncoming.")*100 = ".$EfficiencyOut);
readingsSingleUpdate($hash,"EfficiencyOut", $EfficiencyOut, 1);
} else {
Log3 ($name, 5, "Vallox: Efficiency Outside (DIV/0 Protection): (".$TempExhaust."-".$TempIncoming.")/(".$TempOutside."-".$TempIncoming.")*100 = 100");
readingsSingleUpdate($hash,"EfficiencyOut", 100, 1);
}
}
# Average Efficiency
if (ReadingsVal($name,"EfficiencyIn","unknown") ne "unknown" &&
ReadingsVal($name,"EfficiencyOut","unknown") ne "unknown") {
$EfficiencyIn = ReadingsVal($name,"EfficiencyIn",-100);
$EfficiencyOut = ReadingsVal($name,"EfficiencyOut",-100);
my $EfficiencyAverage = ($EfficiencyIn+$EfficiencyOut) / 2;
Log3 ($name, 5, "Vallox: Efficiency Average: (".$EfficiencyIn."+".$EfficiencyOut.")/2 = ".$EfficiencyAverage);
readingsSingleUpdate($hash,"EfficiencyAverage", $EfficiencyAverage, 1);
} else {
Log3 ($name, 5, "Vallox: Efficiency Average unknown: (".ReadingsVal($name,"EfficiencyIn","unknown")."+".ReadingsVal($name,"EfficiencyOut","unknown").")/2");
}
}
}
}