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