Irgendwie hat mich der Ergeiz erwischt...
Falls noch Interesse besteht,so könnte ein userreading ausschauen:
attr <device> userReadings status1:getG1.* {
my $value = ReadingsNum("$NAME",'getG1',0);
my $txt = '';
$txt = 'Heating' if (($value & 0x0180) == 0x0100); #HeatCoolMode= 1,Heating disabled = 0
$txt = 'Cooling' if (($value & 0x0900) == 0x0000); #HeatCoolMode= 0,Cooling disabled = 0
$txt = 'Idle' if (($value & 0x0880) == 0x0880); #Heating disabled,Cooling disabled
$txt = 'Fault' if (($value & 0x0001) > 0);
$txt = 'Error' if ($txt eq '');
return $txt;
},
status2:getG1.* {
my $value = ReadingsNum("$NAME",'getG1',0);
my $mask = 0x01;
my @text_arr = qw/Fault StatusEcoH TempFlowLimit TempReturnLimit StatusMorningBoostH
StatusStartOptim StatusStopOptim HeatingDisabled HeatCoolMode StatusEcoC
StatusPreCool CoolingDisabled DewPointStatus FrostAlarm OverheatAlarm reserved/;
my $txt = '';
for (my $i = 0; $i<=15; $i++) {
if ($i == 0 || $i == 7 || $i == 8 || $i == 11) { #already decoded before
#already decoded before
} else {
$txt .= "$text_arr[$i]-" if (($value & $mask) > 0);
}
$mask = $mask<<1;
}
$txt =~ s/-$//x;
return $txt;
}
..basierend auf einer dpt7 definition, die bei mir so ausschaut:
define dpt22test KNX 11/2/3:dpt7:get
es werden 2 neue readings generiert:
status1: Zustände: Fault/Cooling/Heating/Idle
status2: alle anderen, wo die jeweiligen bits 1 sind - im wesentlichen Alarme.
Binärdarstellung wär auf dieser Basis auch möglich, ich find die Texte aber aussagekräftiger.
gib einfach Bescheid ob das Sinn ergibt, ich hab keine solche Heizung, kann das nicht beurteilen.
falls ja, könnte das die Basis einer dpt22 Implementation werden.
l.g. erwin