From c72414b4744a6d61130a18f8ca7affd46cc88796 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sun, 4 Aug 2019 20:35:52 +0000 Subject: [PATCH] fhemweb.js: add bitmask to bitfield, fix ZWave bitfield help (Forum #102579); git-svn-id: https://svn.fhem.de/fhem/trunk@19951 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 13 ++++++++----- fhem/www/pgm2/fhemweb.js | 21 +++++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 025571557..79171310a 100644 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -2707,6 +2707,7 @@ ZWave_configParseModel($;$) $h{min} = $1 if($line =~ m/min="([^"]*)"/i); $h{max} = $1 if($line =~ m/max="([^"]*)"/i); $h{value} = $1 if($line =~ m/value="([^"]*)"/i); + $h{bitmask}= $1 if($line =~ m/bitmask="([^"]*)"/i); $h{index} = $1 if($line =~ m/index="([^"]*)"/i); # 1, 2, etc $h{read_only} = $1 if($line =~ m/read_only="([^"]*)"/i); # true,false $h{write_only} = $1 if($line =~ m/write_only="([^"]*)"/i); # true,false @@ -2724,7 +2725,7 @@ ZWave_configParseModel($;$) $bsHelp = ""; $partial = ""; } - if($line =~ m,,) { + if($line =~ m,,) { $bsHelp = "Bit $1: "; next; } @@ -2734,15 +2735,15 @@ ZWave_configParseModel($;$) } if($partial) { if($line =~ m,,) { - $line = $bsHelp.$partial.$line; + $line = $partial.$line; $line =~ s/[\r\n]//gs; $partial = ""; - $bsHelp=""; } else { $partial .= $line; next; } } + if($line =~ m+(.*)+s) { $hash{$cmdName}{Help} .= "$bsHelp$1
"; $bsHelp=""; @@ -2770,8 +2771,10 @@ ZWave_configParseModel($;$) my $caName = "$cfg$cmd"; $zwave_cmdArgs{set}{$caName} = join(",", keys %{$h->{Item}}) if($h->{Item}); $zwave_cmdArgs{set}{$caName} = "noArg" if($h->{type} eq "button"); - $zwave_cmdArgs{set}{$caName} = "bitfield,".$h->{size}*8 - if($h->{type} eq "bitset"); + if($h->{type} eq "bitset") { + $zwave_cmdArgs{set}{$caName} = + "bitfield,".($h->{size}*8).($h->{bitmask} ? ",$h->{bitmask}":""); + } $zwave_cmdArgs{get}{$caName} = "noArg"; } diff --git a/fhem/www/pgm2/fhemweb.js b/fhem/www/pgm2/fhemweb.js index abc2df79d..144bf7f44 100644 --- a/fhem/www/pgm2/fhemweb.js +++ b/fhem/www/pgm2/fhemweb.js @@ -1834,7 +1834,8 @@ FW_createBitfield(elName, devName, vArr, currVal, set, params, cmd) if(vArr[0] != "bitfield") return undef; elName = elName.replace(/[^A-Z0-9_]/ig, '_'); - var fieldSize = (vArr.length == 1 ? 8 : parseInt(vArr[1])); + var fieldSize = (vArr.length > 1 ? parseInt(vArr[1]) : 8); + var bitMask = (vArr.length > 2 ? parseInt(vArr[2]) : 4294967295); var html = '
'+ ''+ ''; @@ -1848,6 +1849,13 @@ FW_createBitfield(elName, devName, vArr, currVal, set, params, cmd) var newEl = $(html).get(0); newEl.activateFn = function() { + var bm = bitMask; + for(var i1=1; i1<=fieldSize; i1++) { + $('#'+elName+'_bitfield input[value='+i1+']') + .prop("disabled", (bm%2 == 0)); + bm = parseInt(bm/2); + } + $("#"+elName+"_bitfield input").change(function(){ var total = 0; $("#"+elName+"_bitfield input").each(function(){ @@ -2025,8 +2033,8 @@ FW_getSVG(emb) exponent, e.g. 0.0625.
  • select,<val1>,<val2>,... - show a dropdown with all values. NOTE: this is also the fallback, if no modifier is found.
  • -
  • bitfield,<size> - show a table of checkboxes (8 per line) - to set single bits. Default for size is 8.
  • +
  • bitfield,<size><mask> - show a table of checkboxes (8 per + line) to set single bits. Default for size is 8 and for mask 2^32-1
  • =end html @@ -2057,9 +2065,10 @@ FW_getSVG(emb)
  • select,<val1>,<val2>,... - zeigt ein HTML select mit allen Werten. Achtung: so ein Widget wird auch dann angezeigt, falls kein passender Modifier gefunden wurde.
  • -
  • bitfield,<size> - zeigt eine Tabelle von Kontrollkästchen (8 - pro Zeile), um einzelne Bits setzen zu koennen. Die Voreinstellung fuer - size ist 8.
  • +
  • bitfield,<size>,<mask> - zeigt eine Tabelle von + Kontrollkästchen (8 pro Zeile), um einzelne Bits setzen zu koennen. + Die Voreinstellung fuer size ist 8 und fuer mask 2^32-1.
  • + =end html_DE