diff --git a/fhem/CHANGED b/fhem/CHANGED index 877f33227..7bf6d350a 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: ZWave: Fibaro_FGRM222 MANUFACTURER_PROPRIETARY class - feature: sequence: reportEvents attribtue added - feature: SYSMON: RAM and SWAP Readings on OSX - change: 34_NUT: removed calculation of values. Use userReadings instead. diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index 299bdf8ce..173c68450 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -18,7 +18,9 @@ use vars qw(%zw_func_id); use vars qw(%zw_type6); my @zwave_models = qw( - Everspring_AN1582 Everspring_AN1583 + Everspring_AN1582 + Everspring_AN1583 + Fibaro_FGRM222 ); my %zwave_id2class; @@ -244,7 +246,7 @@ my %zwave_class = ( MULTI_CHANNEL_ASSOCIATION=> { id => '8e', }, # aka MULTI_INSTANCE_ASSOCIATION MULTI_CMD => { id => '8f', }, # Handled in Parse ENERGY_PRODUCTION => { id => '90', }, - MANUFACTURER_PROPRIETARY => { id => '91', }, + MANUFACTURER_PROPRIETARY => { id => '91', }, # see manuf_proprietary below SCREEN_MD => { id => '92', }, SCREEN_ATTRIBUTES => { id => '93', }, SIMPLE_AV_CONTROL => { id => '94', }, @@ -271,6 +273,14 @@ my %zwave_cmdArgs = ( indicatorDim => "slider,0,1,99", ); +my %manuf_proprietary = ( # MANUFACTURER_PROPRIETARY ist model dependent + Fibaro_FGRM222 => { + set => { positionSlat=>"010f26010100%02x", + positionBlinds=>"010f260102%02x00",}, + get => { position=>"010f2602020000", }, + parse => { "010f260303(..)(..)" => 'sprintf("position:Blinds %d Slat %d",'. + 'hex($1),hex($2))', }, }, +); sub ZWave_Initialize($) @@ -352,8 +362,14 @@ ZWave_Cmd($$@) my %cmdList; my $classes = AttrVal($name, "classes", ""); foreach my $cl (split(" ", $classes)) { - my $ptr = $zwave_class{$cl}{$type} if($zwave_class{$cl}{$type}); + my $ptr = $zwave_class{$cl}{$type} + if($zwave_class{$cl} && $zwave_class{$cl}{$type}); + if($cl eq "MANUFACTURER_PROPRIETARY") { + my $p = $manuf_proprietary{AttrVal($name, "model", "")}; + $ptr = $p->{$type} if($p && $p->{$type}); + } next if(!$ptr); + foreach my $k (keys %{$ptr}) { if(!$cmdList{$k}) { $cmdList{$k}{fmt} = $ptr->{$k}; @@ -730,6 +746,7 @@ ZWave_Parse($$@) } + my $name = $hash->{NAME}; my @event; my @args = ($arg); # MULTI_CMD handling @@ -753,8 +770,13 @@ ZWave_Parse($$@) my $ptr = $zwave_class{$className}{parse} if($zwave_class{$className}{parse}); + if($className eq "MANUFACTURER_PROPRIETARY") { + my $p = $manuf_proprietary{AttrVal($name, "model", "")}; + $ptr = $p->{parse} if($p && $p->{parse}) + } + if(!$ptr) { - Log3 $hash, 4, "$hash->{NAME}: Unknown message ($className $arg)"; + Log3 $hash, 4, "$name: Unknown message ($className $arg)"; next; } @@ -765,7 +787,7 @@ ZWave_Parse($$@) push @event, $val; } } - Log3 $hash, 4, "$hash->{NAME}: $className $arg generated no event" + Log3 $hash, 4, "$name: $className $arg generated no event" if(!@event); } @@ -788,7 +810,7 @@ ZWave_Parse($$@) if($vn eq "state"); # different from set } readingsEndUpdate($hash, 1); - return $hash->{NAME}; + return $name; } ##################################### @@ -897,6 +919,12 @@ s2Hex($) takes values from 1 to 99. If the indicator does not support dimming. It is interpreted as on. +

Class MANUFACTURER_PROPRIETARY +
  • positionBlinds
    + drive blinds to position %
  • +
  • positionSlat
    + drive slat to position %
  • +

    Class PROTECTION
  • protectionOff
    device is unprotected
  • @@ -1006,7 +1034,13 @@ s2Hex($)

    Class INDICATOR
  • indicatorStatus
    - return the indicator status of the node, as indState:on, indState:off or indState:dim value. + return the indicator status of the node, as indState:on, indState:off or + indState:dim value. +
  • + +

    Class MANUFACTURER_PROPRIETARY +
  • position
    + Fibaro FGRM-222: return the blinds position and slat angle.


  • Class MANUFACTURER_SPECIFIC @@ -1171,6 +1205,9 @@ s2Hex($)

    Class INDICATOR
  • indState:[on|off|dim value]
  • +

    Class MANUFACTURER_PROPRIETARY +
  • position:Blinds [%] Slat [%]
  • +

    Class MANUFACTURER_SPECIFIC
  • mfs:hexValue hexValue hexValue