Hallo,
habe mal 4Byte float EIS9 für Misterhouse geschrieben. 2Byte hatte mir doch zuviele Rundungsfehler bei größeren Werten.
Hier der code für die Eib_Items.pm
Gruß
Martin
habe mal 4Byte float EIS9 für Misterhouse geschrieben. 2Byte hatte mir doch zuviele Rundungsfehler bei größeren Werten.
Hier der code für die Eib_Items.pm
Code:
# EIB9_Item: 32-bit float
package EIB9_Item;
@EIB9_Item::ISA = ('EIB_Item');
sub eis_type {
return '9';
}
sub decode {
my ($self, @data) = @_;
my $res;
unless ($#data == 4) {
&main::print_log("Not EIS type 9 data received for $self->{groupaddr}: \[@data\]") if $main::config_parms{eib_errata} >= 2;
return;
}
my $res = unpack "f", pack "L", (($data[1] << 24 ) | ($data[2] << 16 ) | ($data[3] << 8 ) | $data[4]);
# &main::print_log("EIS9 for $self->{groupaddr}: >$res<");
return $res;
}
sub encode {
my ($self, $state) = @_;
my $res;
$res = unpack "L", pack "f", $state;
#&main::print_log("Res: $res State: $state \n");
return([0, ($res & 0xff000000) >> 24, ($res & 0xff0000) >> 16, ($res & 0xff00) >> 8, $res & 0xff]);
}
Martin

