| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- 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
|