2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

31HUEDevice: added configList attribute

added optional setsensor|configsensor param to set json


git-svn-id: https://svn.fhem.de/fhem/trunk@19652 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2019-06-19 19:01:18 +00:00
parent c3a133a9bc
commit 2e96d6afd6
2 changed files with 46 additions and 7 deletions

View File

@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # 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. # Do not insert empty lines here, update check depends on it.
- feature: 31HUEDevice: added configList attribute
added optional setsensor|configsensor param to set json
- bugfix: 73_AMADCommBridge: fix $version bug - bugfix: 73_AMADCommBridge: fix $version bug
- update: 95_Astro: v2.0.0 - update: 95_Astro: v2.0.0
device attributes for language, timezone and locale settings device attributes for language, timezone and locale settings

View File

@ -178,6 +178,7 @@ sub HUEDevice_Initialize($)
"transitiontime ". "transitiontime ".
"model:".join(",", sort map { $_ =~ s/ /#/g ;$_} keys %hueModels)." ". "model:".join(",", sort map { $_ =~ s/ /#/g ;$_} keys %hueModels)." ".
"setList:textField-long ". "setList:textField-long ".
"configList:textField-long ".
"subType:extcolordimmer,colordimmer,ctdimmer,dimmer,switch ". "subType:extcolordimmer,colordimmer,ctdimmer,dimmer,switch ".
$readingFnAttributes; $readingFnAttributes;
@ -701,7 +702,12 @@ HUEDevice_Set($@)
return undef; return undef;
} elsif( $cmd eq 'json' ) { } elsif( $cmd eq 'json' ) {
return HUEBridge_Set( $shash, $shash->{NAME}, 'setsensor', $id, @args ); return "usage: json [setsensor|configsensor] <json>" if( !@args );
my $type = 'setsensor';
if( $args[0] eq 'setsensor' || $args[0] eq 'configsensor' ) {
$type = shift @args;
}
return HUEBridge_Set( $shash, $shash->{NAME}, $type, $id, @args );
return undef; return undef;
@ -722,6 +728,24 @@ HUEDevice_Set($@)
} }
} }
} elsif( my @match = grep { $cmd eq $_ } keys %{($hash->{helper}{configList}{cmds}?$hash->{helper}{configList}{cmds}:{})} ) {
return HUEBridge_Set( $shash, $shash->{NAME}, 'configsensor', $id, $hash->{helper}{configList}{cmds}{$match[0]} );
} elsif( my $entries = $hash->{helper}{configList}{regex} ) {
foreach my $entry (@{$entries}) {
if( join(' ', @aa) =~ /$entry->{regex}/ ) {
my $VALUE1 = $1;
my $VALUE2 = $2;
my $VALUE3 = $3;
my $json = $entry->{json};
$json =~ s/\$1/$VALUE1/;
$json =~ s/\$2/$VALUE2/;
$json =~ s/\$3/$VALUE3/;
return HUEBridge_Set( $shash, $shash->{NAME}, 'configsensor', $id, $json );
}
}
} }
my $list = 'statusRequest:noArg'; my $list = 'statusRequest:noArg';
@ -734,6 +758,14 @@ HUEDevice_Set($@)
$list .= (split( ' ', $entry->{regex} ))[0]; $list .= (split( ' ', $entry->{regex} ))[0];
} }
} }
$list .= ' '. join( ':noArg ', keys %{$hash->{helper}{configList}{cmds}} ) if( $hash->{helper}{configList}{cmds} );
$list .= ':noArg' if( $hash->{helper}{configList}{cmds} );
if( my $entries = $hash->{helper}{configList}{regex} ) {
foreach my $entry (@{$entries}) {
$list .= ' ';
$list .= (split( ' ', $entry->{regex} ))[0];
}
}
return SetExtensions($hash, $list, $name, @aa); return SetExtensions($hash, $list, $name, @aa);
} }
@ -1584,20 +1616,20 @@ HUEDevice_Attr($$$;$)
{ {
my ($cmd, $name, $attrName, $attrVal) = @_; my ($cmd, $name, $attrName, $attrVal) = @_;
if( $attrName eq "setList" ) { if( $attrName eq 'setList' || $attrName eq 'configList' ) {
my $hash = $defs{$name}; my $hash = $defs{$name};
delete $hash->{helper}{setList}; delete $hash->{helper}{$attrName};
return "$name is not a sensor device" if( $hash->{helper}->{devtype} ne 'S' ); return "$name is not a sensor device" if( $hash->{helper}->{devtype} ne 'S' );
return "$name is not a CLIP sensor device" if( $hash->{type} && $hash->{type} !~ m/^CLIP/ ); #return "$name is not a CLIP sensor device" if( $hash->{type} && $hash->{type} !~ m/^CLIP/ );
if( $cmd eq "set" && $attrVal ) { if( $cmd eq "set" && $attrVal ) {
foreach my $line ( split( "\n", $attrVal ) ) { foreach my $line ( split( "\n", $attrVal ) ) {
my($cmd,$json) = split( ":", $line,2 ); my($cmd,$json) = split( ":", $line,2 );
if( $cmd =~ m'^/(.*)/$' ) { if( $cmd =~ m'^/(.*)/$' ) {
my $regex = $1; my $regex = $1;
$hash->{helper}{setList}{'regex'} = [] if( !$hash->{helper}{setList}{':regex'} ); $hash->{helper}{$attrName}{'regex'} = [] if( !$hash->{helper}{$attrName}{'regex'} );
push @{$hash->{helper}{setList}{'regex'}}, { regex => $regex, json => $json }; push @{$hash->{helper}{$attrName}{'regex'}}, { regex => $regex, json => $json };
} else { } else {
$hash->{helper}{setList}{cmds}{$cmd} = $json; $hash->{helper}{$attrName}{cmds}{$cmd} = $json;
} }
} }
} }
@ -1724,6 +1756,8 @@ HUEDevice_Attr($$$;$)
The lights are given as a comma sparated list of fhem device names or bridge light numbers.</li> The lights are given as a comma sparated list of fhem device names or bridge light numbers.</li>
<li>rename &lt;new name&gt;<br> <li>rename &lt;new name&gt;<br>
Renames the device in the bridge and changes the fhem alias.</li> Renames the device in the bridge and changes the fhem alias.</li>
<li>json [setsensor|configsensor] &lt;json&gt;<br>
send &lt;json&gt; to the state or config endpoints for this device.</li>
<br> <br>
<li><a href="#setExtensions"> set extensions</a> are supported.</li> <li><a href="#setExtensions"> set extensions</a> are supported.</li>
<br> <br>
@ -1764,6 +1798,9 @@ HUEDevice_Attr($$$;$)
The list of know set commands for sensor type devices. one command per line, eg.: <code><br> The list of know set commands for sensor type devices. one command per line, eg.: <code><br>
attr mySensor setList present:{&lt;json&gt;}\<br> attr mySensor setList present:{&lt;json&gt;}\<br>
absent:{&lt;json&gt;}</code></li> absent:{&lt;json&gt;}</code></li>
<li>configList<br>
The list of know config commands for sensor type devices. one command per line, eg.: <code><br>
mode:{&lt;json&gt;}</code></li>
<li>subType<br> <li>subType<br>
extcolordimmer -> device has rgb and color temperatur control<br> extcolordimmer -> device has rgb and color temperatur control<br>
colordimmer -> device has rgb controll<br> colordimmer -> device has rgb controll<br>