spiderp2351
21.12.08, 18:42
Kann über Linux und eidb usw. einen Zimmertemparatur wert wie folgt auslesen:
0C29 = 21.3 Grad laut http://www.tapko.de/index.php/Tools/31/0/
Habe im Misterhouse folgende Funktion gefunden für die Umrechung von 2 byte hex auf dec
Datei EIB_Items.pm
sub decode {
my ($self, @data) = @_;
my $res;
unless ($#data == 2) {
&main: print_log("Not EIS type 5 data received for $self->{groupaddr}: \[@data\]") if $main::config_parms{eib_errata} >= 2;
return;
}
my $sign = $data[1] & 0x80;
my $exp = ($data[1] & 0x78) >> 3;
my $mant = (($data[1] & 0x7) << 8) | $data[2];
$mant = -(~($mant - 1) & 0x7ff) if $sign != 0;
$res = (1 << $exp) * 0.01 * $mant;
return $res;
}
Meine Frage was steht denn in $data[1] und $data[2] in Bezug auf meinen Wert 0C29 oder kann ich das garn nicht so rechnen ? Ich nehme an, wenn die @data richtig befüllt wurde steht dann in $res = 21.3 oder ?
Habe schon alles möglich probiert aber dieser Wert kommt bei mir überhaupt nicht raus...
Bitte um kurze Hilfe.
Danke
0C29 = 21.3 Grad laut http://www.tapko.de/index.php/Tools/31/0/
Habe im Misterhouse folgende Funktion gefunden für die Umrechung von 2 byte hex auf dec
Datei EIB_Items.pm
sub decode {
my ($self, @data) = @_;
my $res;
unless ($#data == 2) {
&main: print_log("Not EIS type 5 data received for $self->{groupaddr}: \[@data\]") if $main::config_parms{eib_errata} >= 2;
return;
}
my $sign = $data[1] & 0x80;
my $exp = ($data[1] & 0x78) >> 3;
my $mant = (($data[1] & 0x7) << 8) | $data[2];
$mant = -(~($mant - 1) & 0x7ff) if $sign != 0;
$res = (1 << $exp) * 0.01 * $mant;
return $res;
}
Meine Frage was steht denn in $data[1] und $data[2] in Bezug auf meinen Wert 0C29 oder kann ich das garn nicht so rechnen ? Ich nehme an, wenn die @data richtig befüllt wurde steht dann in $res = 21.3 oder ?
Habe schon alles möglich probiert aber dieser Wert kommt bei mir überhaupt nicht raus...
Bitte um kurze Hilfe.
Danke