14_SD_RSL.PM: support for setExtensions added

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@20671 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
sidey79 2019-12-06 20:43:40 +00:00
parent 75bcac9842
commit a38553ecef
2 changed files with 35 additions and 43 deletions

View File

@ -1,5 +1,6 @@
# 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: 14_SD_RSL.PM: support for setExtensions added
- change: 59_Weather: delete table options in commandref - change: 59_Weather: delete table options in commandref
- bugfix: 73_AutoShuttersControl: fix Commandref, skip ExternalTrigger Drive - bugfix: 73_AutoShuttersControl: fix Commandref, skip ExternalTrigger Drive
from adv check from adv check

View File

@ -7,15 +7,19 @@
# 2019 - Ralf9 & Sidey79 # 2019 - Ralf9 & Sidey79
# #
# Supports following devices: # Supports following devices:
# - Conrad RSL # - Conrad RSL
##################################################################### #####################################################################
package main; package main;
use strict; use strict;
use warnings; use warnings;
use SetExtensions;
my %sets = ( "on:noArg" => "", "off:noArg" => ""); my %sets = (
"on" => sub { return $_[0]->{OnCode}; },
"off" => sub { return $_[0]->{OffCode}; }
);
my @RSLCodes; my @RSLCodes;
@ -113,35 +117,25 @@ sub SD_RSL_Define($$) {
########################################################## ##########################################################
sub SD_RSL_Set($@) { sub SD_RSL_Set($@) {
my ($hash, $name, @a) = @_; my ($hash, $name, @a) = @_;
my $ioHash = $hash->{IODev}; my $cmd = $a[0];
my $ioName = $ioHash->{NAME}; return "\"set $name\" needs at least one argument" unless(defined($cmd));
my $cmd = $a[0];
my $c;
my $message;
my $device = substr($hash->{DEF},0,6);
return join(" ", sort keys %sets) if((@a < 1) || ($cmd eq "?")); my $cmdList= join(" ", map { "$_:noArg" } sort keys %sets);
if (exists($sets{$cmd})) {
$c = $hash->{OnCode} if ($cmd eq "on") ; my $ioHash = $hash->{IODev};
$c = $hash->{OffCode} if ($cmd eq "off"); my $ioName = $ioHash->{NAME};
my $device = substr($hash->{DEF},0,6);
return "Unknown argument $cmd, choose on or off" if(!$c); my $c= $sets{$cmd}->($hash,@a);
my $message = 'P1#0x' . $c . $device . '#R' . AttrVal($name, "RSLrepetition", 6);
## Send Message to IODev using IOWrite Log3 $name, 3, "$ioName RSL_set: $name $cmd -> sendMsg: $message";
$message = 'P1#0x' . $c . $device . '#R' . AttrVal($name, "RSLrepetition", 6); IOWrite($hash, 'sendMsg', $message);
Log3 $name, 3, "$ioName RSL_set: $name $cmd -> sendMsg: $message"; readingsSingleUpdate($hash,"state",$cmd,1);
IOWrite($hash, 'sendMsg', $message); } else {
#my $ret = IOWrite($hash, 'sendMsg', $c."_".AttrVal($name, "RSLrepetition", 6)); return SetExtensions($hash, $cmdList, $name, @a)
#Log3 $hash, 5, "$name Set return : $ret"; }
#if (($cmd eq "on") && ($hash->{STATE} eq "off")){$cmd = "stop";} return undef;
#if (($cmd eq "off") && ($hash->{STATE} eq "on")) {$cmd = "stop";}
#$hash->{CHANGED}[0] = $cmd;
#$hash->{STATE} = $cmd;
readingsSingleUpdate($hash,"state",$cmd,1);
return undef;
} }
################################################################### ###################################################################
@ -207,7 +201,7 @@ sub SD_RSL_Parse($$) {
Log3 $hash, 4, "$name: SD_RSL_Parse - Device: $deviceCode Action: $action"; Log3 $hash, 4, "$name: SD_RSL_Parse - Device: $deviceCode Action: $action";
$modules{SD_RSL}{defptr}{ioname} = $name; $modules{SD_RSL}{defptr}{ioname} = $name;
my $def = $modules{SD_RSL}{defptr}{$hash->{NAME} . "." . $deviceCode}; my $def = $modules{SD_RSL}{defptr}{$hash->{NAME} . "." . $deviceCode};
$def = $modules{SD_RSL}{defptr}{$deviceCode} if(!$def); $def = $modules{SD_RSL}{defptr}{$deviceCode} if(!$def);
@ -243,6 +237,7 @@ sub SD_RSL_Parse($$) {
######################################################## ########################################################
sub SD_RSL_Undef($$) { sub SD_RSL_Undef($$) {
my ($hash, $name) = @_; my ($hash, $name) = @_;
SetExtensionsCancel($hash);
delete($modules{SD_RSL}{defptr}{$hash->{DEF}}) if($hash && $hash->{DEF}); delete($modules{SD_RSL}{defptr}{$hash->{DEF}}) if($hash && $hash->{DEF});
return undef; return undef;
} }
@ -296,13 +291,11 @@ If autocreate is used, a device &quot;&lt;code&gt;_ALL&quot; like RSL_74A400_ALL
<a name="SD_RSL_Set"></a> <a name="SD_RSL_Set"></a>
<b>Set</b> <b>Set</b>
<ul> <ul>
<code>set &lt;name&gt; &lt;value&gt;</code> <code>set <name> &lt;[on|off|toggle]&gt;</code><br>
Switches the device on or off.<br><br>
<code>set <name> &lt;[on-for-timer|off-for-timer|on-till|off-till|blink|intervals]&gt;</code><br>
Switches the socket for a specified duration. For Details see <a href="#setExtensions">set extensions</a>.<br><br>
<br /><br /> <br /><br />
<code>&lt;value&gt;</code> can be one of the following values:<br>
<pre>
off
on
</pre>
</ul> </ul>
<a name="SD_RSL_Get"></a> <a name="SD_RSL_Get"></a>
<b>Get</b> <b>Get</b>
@ -350,13 +343,11 @@ Beim Verwendung von Autocreate wird bei der Taste All anstatt channel und button
<a name="SD_RSL_Set"></a> <a name="SD_RSL_Set"></a>
<b>Set</b> <b>Set</b>
<ul> <ul>
<code>set &lt;name&gt; &lt;value&gt;</code> <code>set <name> &lt;[on|off|toggle]&gt;</code><br
Schaltet das Ger&auml;t ein oder aus.<br><br>
<code>set <name> &lt;[on-for-timer|off-for-timer|on-till|off-till|blink|intervals]&gt;</code><br>
Schaltet das Ger&auml;t f&uuml;r einen bestimmten Zeitraum. Weitere Infos hierzu unter <a href="#setExtensions">set extensions</a>.<br><br>
<br /><br /> <br /><br />
<code>&lt;value&gt;</code> kann einer der folgenden Werte sein:<br>
<pre>
off
on
</pre>
</ul> </ul>
<a name="SD_RSL_Get"></a> <a name="SD_RSL_Get"></a>
<b>Get</b> <b>Get</b>