mirror of
https://github.com/fhem/fhem-mirror.git
synced 2024-11-22 09:49:50 +00:00
f4125b04f3
git-svn-id: https://svn.fhem.de/fhem/trunk@7392 2b470e98-0d58-463d-a4d8-8e2adae1ed80
242 lines
7.6 KiB
Perl
242 lines
7.6 KiB
Perl
package main;
|
|
|
|
use utf8;
|
|
|
|
sub
|
|
fs20_zdr_Initialize($)
|
|
{
|
|
my ($hash) = @_;
|
|
$hash->{DefFn} = "fs20_zdr_Define";
|
|
$hash->{SetFn} = "fs20_set";
|
|
$hash->{AttrList} = "loglevel:0,1,2,3,4,5 powerDev volumeDev leftRightDev sleepMSDev 1_2_dev 3_4_dev 5_6_dev 7_8_dev";
|
|
}
|
|
|
|
sub
|
|
fs20_set {
|
|
my ($hash, @a) = @_;
|
|
my $v = @a[1];
|
|
|
|
my $name = $hash->{NAME};
|
|
my $powerDev = AttrVal($name, "powerDev", "");
|
|
my $volumeDev = AttrVal($name, "volumeDev", "");
|
|
my $leftRightDev = AttrVal($name, "leftRightDev", "");
|
|
my $sleepMSDev = AttrVal($name, "sleepMSDev", "");
|
|
my $prog_1_2dev = AttrVal($name, "1_2_dev", "");
|
|
my $prog_3_4dev = AttrVal($name, "3_4_dev", "");
|
|
my $prog_5_6dev = AttrVal($name, "5_6_dev", "");
|
|
my $prog_7_8dev = AttrVal($name, "7_8_dev", "");
|
|
|
|
my $isToggle = 0;
|
|
if ($v eq "toggle") {
|
|
$isToggle = 1;
|
|
my $state = Value($powerDev);
|
|
|
|
my $name = $hash->{NAME};
|
|
fhem("setstate $name $state");
|
|
|
|
if ($state eq "off") {
|
|
$v = "on";
|
|
} else {
|
|
$v = "off";
|
|
}
|
|
}
|
|
|
|
if ($v eq "on") {
|
|
return "no power device set" if $powerDev eq "";
|
|
fhem("set $powerDev on");
|
|
} elsif ($v eq "off") {
|
|
return "no power device set" if $powerDev eq "";
|
|
fhem("set $powerDev off");
|
|
} elsif ($v eq "volume_up") {
|
|
return "no volume device set" if $volumeDev eq "";
|
|
fhem("set $volumeDev on");
|
|
} elsif ($v eq "volume_down") {
|
|
return "no volume device set" if $volumeDev eq "";
|
|
fhem("set $volumeDev off");
|
|
} elsif ($v eq "left") {
|
|
return "no leftRight device set" if $leftRightDev eq "";
|
|
fhem("set $leftRightDev off");
|
|
} elsif ($v eq "right") {
|
|
return "no leftRight device set" if $leftRightDev eq "";
|
|
fhem("set $leftRightDev on");
|
|
} elsif ($v eq "sleep") {
|
|
return "no sleepMS device set" if $sleepMSDev eq "";
|
|
fhem("set $sleepMSDev off");
|
|
} elsif ($v eq "ms") {
|
|
return "no leftRight device set" if $sleepMSDev eq "";
|
|
fhem("set $sleepMSDev on");
|
|
} elsif ($v eq "1") {
|
|
return "no 1_2 device set" if $prog_1_2dev eq "";
|
|
fhem("set $prog_1_2dev off");
|
|
} elsif ($v eq "2") {
|
|
return "no 1_2 device set" if $prog_1_2dev eq "";
|
|
fhem("set $prog_1_2dev on");
|
|
} elsif ($v eq "3") {
|
|
return "no 3_4 device set" if $prog_3_4dev eq "";
|
|
fhem("set $prog_3_4dev off");
|
|
} elsif ($v eq "4") {
|
|
return "no 3_4 device set" if $prog_3_4dev eq "";
|
|
fhem("set $prog_3_4dev on");
|
|
} elsif ($v eq "5") {
|
|
return "no 5_6 device set" if $prog_5_6dev eq "";
|
|
fhem("set $prog_5_6dev off");
|
|
} elsif ($v eq "6") {
|
|
return "no 5_6 device set" if $prog_5_6dev eq "";
|
|
fhem("set $prog_5_6dev on");
|
|
} elsif ($v eq "7") {
|
|
return "no 7_8 device set" if $prog_7_8dev eq "";
|
|
fhem("set $prog_7_8dev off");
|
|
} elsif ($v eq "8") {
|
|
return "no 7_8 device set" if $prog_7_8dev eq "";
|
|
fhem("set $prog_7_8dev on");
|
|
} elsif ($v eq "program_1") {
|
|
return "no 1_2 device set" if $prog_1_2dev eq "";
|
|
fs20_zdr_program($prog_1_2dev, "dimdown");
|
|
} elsif ($v eq "program_2") {
|
|
return "no 1_2 device set" if $prog_1_2dev eq "";
|
|
fs20_zdr_program($prog_1_2dev, "dimup");
|
|
} elsif ($v eq "program_3") {
|
|
return "no 3_4 device set" if $prog_3_4dev eq "";
|
|
fs20_zdr_program($prog_3_4dev, "dimdown");
|
|
} elsif ($v eq "program_4") {
|
|
return "no 3_4 device set" if $prog_3_4dev eq "";
|
|
fs20_zdr_program($prog_3_4dev, "dimup");
|
|
} elsif ($v eq "program_5") {
|
|
return "no 5_6 device set" if $prog_5_6dev eq "";
|
|
fs20_zdr_program($prog_5_6dev, "dimdown");
|
|
} elsif ($v eq "program_6") {
|
|
return "no 5_6 device set" if $prog_5_6dev eq "";
|
|
fs20_zdr_program($prog_5_6dev, "dimup");
|
|
} elsif ($v eq "program_7") {
|
|
return "no 7_8 device set" if $prog_7_8dev eq "";
|
|
fs20_zdr_program($prog_7_8dev, "dimdown");
|
|
} elsif ($v eq "program_8") {
|
|
return "no 7_8 device set" if $prog_7_8dev eq "";
|
|
fs20_zdr_program($prog_7_8dev, "dimup");
|
|
} else {
|
|
return "unknown set value, choose one of on off toggle volume_up volume_down left right sleep ms 1 2 3 4 5 6 7 8 program_1 program_2 program_3 program_4 program_5 program_6 program_7 program_8";
|
|
}
|
|
|
|
if ($v eq "on" || $v eq "off") {
|
|
$hash->{READINGS}{state}{VAL} = $v;
|
|
$hash->{READINGS}{state}{TIME} = TimeNow();
|
|
|
|
my $name = $hash->{NAME};
|
|
|
|
if ($isToggle == 0) {
|
|
$hash->{STATE} = $v;
|
|
}
|
|
}
|
|
return undef;
|
|
}
|
|
|
|
sub
|
|
fs20_zdr_program($$)
|
|
{
|
|
my ($deviceName, $command) = @_;
|
|
my $toSend = "";
|
|
for (my $i=0; $i<30; $i++) {
|
|
fhem("sleep 0.15");
|
|
fhem("set $deviceName $command");
|
|
}
|
|
return undef;
|
|
}
|
|
|
|
sub
|
|
fs20_zdr_Define($$)
|
|
{
|
|
my ($hash, $def) = @_;
|
|
|
|
my @args = split("[ \t]+", $def);
|
|
|
|
if (int(@args) < 1)
|
|
{
|
|
return "fs20_zdr__Define: too many arguments. Usage:\n" .
|
|
"define <name> FS20_zdr";
|
|
}
|
|
return "Invalid arguments. Usage: \n define <name> FS20_ZDR" if(int(@a) != 0);
|
|
|
|
$hash->{STATE} = '??';
|
|
|
|
return undef;
|
|
}
|
|
|
|
1;
|
|
|
|
=pod
|
|
=begin html
|
|
|
|
<a name="FS20_ZDR"></a>
|
|
<h3>FS20_ZDR</h3>
|
|
<ul>
|
|
Creates a container device holding the sub devices for a FS20 ZDR device.
|
|
|
|
<br><br>
|
|
|
|
<a name="FS20_ZDRdefine"></a>
|
|
<h4>Define</h4>
|
|
<ul>
|
|
<code>define <name> FS20_ZDR</code>
|
|
<br><br>
|
|
|
|
Defines a FS20_ZDR device.<br><br>
|
|
|
|
Example:
|
|
<ul>
|
|
<code>define radio FS20_ZDR</code><br>
|
|
</ul>
|
|
</ul>
|
|
|
|
<a name="FS20_ZDRSet"></a>
|
|
<h4>Set </h4>
|
|
<ul>
|
|
<code>set <name> <value></code>
|
|
<br><br>
|
|
where <code>value</code> is one of:<br>
|
|
<pre>
|
|
on # turn device on
|
|
off # turn device off
|
|
volume_up # volume up
|
|
volume_down # volume down
|
|
left # channel down
|
|
right # channel up
|
|
sleep # sleep
|
|
ms # M/S command
|
|
1 2 3 4 5 6 7 8 # radio channels
|
|
</pre>
|
|
|
|
Examples:
|
|
<ul>
|
|
<code>set radio volume_up</code><br>
|
|
</ul>
|
|
</ul>
|
|
|
|
powerDev volumeDev leftRightDev sleepMSDev 1_2_dev 3_4_dev 5_6_dev 7_8_dev
|
|
<a name="FS20_ZDRAttr"></a>
|
|
<h4>Attributes</h4>
|
|
<ul>
|
|
<li><a name="FS20_ZDR_powerDev"><code>attr <name> powerDev <deviceName></code></a>
|
|
<br />Name of the device representing the power button</li>
|
|
<li><a name="FS20_ZDR_volumeDev"><code>attr <name> volumeDev <deviceName></code></a>
|
|
<br />Name of the device representing the volume button</li>
|
|
<li><a name="FS20_ZDR_leftRightDev"><code>attr <name> leftRightDev <deviceName></code></a>
|
|
<br />Name of the device representing the channel up/down (left/right) button</li>
|
|
<li><a name="FS20_ZDR_sleepMSDev"><code>attr <name> sleepMSDev <deviceName></code></a>
|
|
<br />Name of the device representing the channel sleep / M/S button</li>
|
|
<li><a name="FS20_ZDR_1_2_dev"><code>attr <name> 1_2_dev <deviceName></code></a>
|
|
<br />Name of the device representing channels 1 and 2/li>
|
|
<li><a name="FS20_ZDR_3_4_dev"><code>attr <name> 3_4_dev <deviceName></code></a>
|
|
<br />Name of the device representing channels 3 and 4/li>
|
|
<li><a name="FS20_ZDR_5_6_dev"><code>attr <name> 5_6_dev <deviceName></code></a>
|
|
<br />Name of the device representing channels 5 and 6/li>
|
|
<li><a name="FS20_ZDR_7_8_dev"><code>attr <name> 7_8_dev <deviceName></code></a>
|
|
<br />Name of the device representing channels 7 and 8/li>
|
|
</ul>
|
|
|
|
</ul>
|
|
|
|
=end html
|
|
=cut
|
|
|
|
|