From a7560c9d7abc50c6dd4054defe513e2b08e8d20f Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Fri, 3 Apr 2015 23:43:50 +0200 Subject: [PATCH 1/3] added parameter 'bin' to NumDisplay to binarize value --- FHEM/fhconverter.pm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/FHEM/fhconverter.pm b/FHEM/fhconverter.pm index 229811f..b73d59d 100644 --- a/FHEM/fhconverter.pm +++ b/FHEM/fhconverter.pm @@ -307,10 +307,19 @@ sub NumDisplay(@) { return "NumDisplay converter got [$event] from $device, $reading but cant interpret it as a number" unless $event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/; $event = $1; - my $format = (@args)?$args[0]:"%.1f"; $param->{gad} = $gad; - $param->{gadval} = sprintf($format, $1); - $param->{gads} = []; + + if (@args and ($args[0] eq 'bin')) + { + # binarize: only return 1 or 0 + $param->{gadval} = ($1 > 0) ? 1 : 0; + } + else + { + my $format = (@args)?$args[0]:"%.1f"; + $param->{gadval} = sprintf($format, $1); + } + $param->{gads} = []; return undef; } elsif ($param->{cmd} eq 'rcv') From c046436811b626e2f3f73dbaad2a9a511819001f Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 4 Apr 2015 11:27:24 +0200 Subject: [PATCH 2/3] Revert "added parameter 'bin' to NumDisplay to binarize value" This reverts commit a7560c9d7abc50c6dd4054defe513e2b08e8d20f. --- FHEM/fhconverter.pm | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/FHEM/fhconverter.pm b/FHEM/fhconverter.pm index b73d59d..229811f 100644 --- a/FHEM/fhconverter.pm +++ b/FHEM/fhconverter.pm @@ -307,19 +307,10 @@ sub NumDisplay(@) { return "NumDisplay converter got [$event] from $device, $reading but cant interpret it as a number" unless $event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/; $event = $1; + my $format = (@args)?$args[0]:"%.1f"; $param->{gad} = $gad; - - if (@args and ($args[0] eq 'bin')) - { - # binarize: only return 1 or 0 - $param->{gadval} = ($1 > 0) ? 1 : 0; - } - else - { - my $format = (@args)?$args[0]:"%.1f"; - $param->{gadval} = sprintf($format, $1); - } - $param->{gads} = []; + $param->{gadval} = sprintf($format, $1); + $param->{gads} = []; return undef; } elsif ($param->{cmd} eq 'rcv') From a06eb5c71709f4670fd11d1e326c765e80e23969 Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 4 Apr 2015 11:30:31 +0200 Subject: [PATCH 3/3] moved binarization to separate converter "BoolDisplay" --- FHEM/fhconverter.pm | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/FHEM/fhconverter.pm b/FHEM/fhconverter.pm index 229811f..826beaf 100644 --- a/FHEM/fhconverter.pm +++ b/FHEM/fhconverter.pm @@ -324,6 +324,59 @@ sub NumDisplay(@) return undef; } +############################################################################### +# +# converts reading to bool (1|0), one way fhem->fronthem +# +############################################################################### +sub BoolDisplay(@) +{ + my ($param) = @_; + my $cmd = $param->{cmd}; + my $gad = $param->{gad}; + my $gadval = $param->{gadval}; + + my $device = $param->{device}; + my $reading = $param->{reading}; + my $event = $param->{event}; + + my @args = @{$param->{args}}; + + if ($param->{cmd} eq 'get') + { + $event = ($reading eq 'state') ? main::Value($device) : main::ReadingsVal($device, $reading, '0'); + $param->{cmd} = 'send'; + } + + if ($param->{cmd} eq 'send') + { + if ($event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/) + { + # numeric: greater than thresh -> 1, less or equal -> 0 + $event = $1; + my $thresh = (@args) ? $args[0] : 0; + $param->{gadval} = ($event > $thresh) ? 1 : 0; + } + else + { + # string: we convert on/off to 1/0 + $param->{gadval} = ($event eq "off") ? 0 : 1; + } + $param->{gad} = $gad; + $param->{gads} = []; + return undef; + } + elsif ($param->{cmd} eq 'rcv') + { + return 'done'; # only a display, no set + } + elsif ($param->{cmd} eq '?') + { + return 'usage: TBD!!!'; + } + return undef; +} + ############################################################################### # # RGB device, param: gad_r, gad_g, gad_b