| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- ##############################################
- # $Id: 98_dummy.pm 12700 2016-12-02 16:49:42Z rudolfkoenig $
- package main;
- use strict;
- use warnings;
- use SetExtensions;
- sub
- dummy_Initialize($)
- {
- my ($hash) = @_;
- $hash->{SetFn} = "dummy_Set";
- $hash->{DefFn} = "dummy_Define";
- $hash->{AttrList} = "readingList setList useSetExtensions " .
- "disable disabledForIntervals ".
- $readingFnAttributes;
- }
- ###################################
- sub
- dummy_Set($@)
- {
- my ($hash, @a) = @_;
- my $name = shift @a;
- return "no set value specified" if(int(@a) < 1);
- my $setList = AttrVal($name, "setList", " ");
- $setList =~ s/\n/ /g;
- if(AttrVal($name,"useSetExtensions",undef)) {
- my $a0 = $a[0]; $a0 =~ s/([.?*])/\\$1/g;
- if($setList !~ m/\b$a0\b/) {
- unshift @a, $name;
- return SetExtensions($hash, $setList, @a)
- }
- SetExtensionsCancel($hash);
- } else {
- return "Unknown argument ?, choose one of $setList" if($a[0] eq "?");
- }
- return undef
- if($attr{$name} && # Avoid checking it if only STATE is inactive
- ($attr{$name}{disable} || $attr{$name}{disabledForIntervals}) &&
- IsDisabled($name));
- my @rl = split(" ", AttrVal($name, "readingList", ""));
- my $doRet;
- eval {
- if(@rl && grep /\b$a[0]\b/, @rl) {
- my $v = shift @a;
- readingsSingleUpdate($hash, $v, join(" ",@a), 1);
- $doRet = 1;
- }
- };
- return if($doRet);
-
- my $v = join(" ", @a);
- Log3 $name, 4, "dummy set $name $v";
- readingsSingleUpdate($hash,"state",$v,1);
- return undef;
- }
- sub
- dummy_Define($$)
- {
- my ($hash, $def) = @_;
- my @a = split("[ \t][ \t]*", $def);
- return "Wrong syntax: use define <name> dummy" if(int(@a) != 2);
- return undef;
- }
- 1;
- =pod
- =item helper
- =item summary dummy device
- =item summary_DE dummy Gerät
- =begin html
- <a name="dummy"></a>
- <h3>dummy</h3>
- <ul>
- Define a dummy. A dummy can take via <a href="#set">set</a> any values.
- Used for programming.
- <br><br>
- <a name="dummydefine"></a>
- <b>Define</b>
- <ul>
- <code>define <name> dummy</code>
- <br><br>
- Example:
- <ul>
- <code>define myvar dummy</code><br>
- <code>set myvar 7</code><br>
- </ul>
- </ul>
- <br>
- <a name="dummyset"></a>
- <b>Set</b>
- <ul>
- <code>set <name> <value></code><br>
- Set any value.
- </ul>
- <br>
- <a name="dummyget"></a>
- <b>Get</b> <ul>N/A</ul><br>
- <a name="dummyattr"></a>
- <b>Attributes</b>
- <ul>
- <li><a href="#disable">disable</a></li>
- <li><a href="#disabledForIntervals">disabledForIntervals</a></li>
- <li><a name="readingList">readingList</a><br>
- Space separated list of readings, which will be set, if the first
- argument of the set command matches one of them.</li>
- <li><a name="setList">setList</a><br>
- Space separated list of commands, which will be returned upon "set name
- ?", so the FHEMWEB frontend can construct a dropdown and offer on/off
- switches. Example: attr dummyName setList on off </li>
- <li><a name="useSetExtensions">useSetExtensions</a><br>
- If set, and setList contains on and off, then the
- <a href="#setExtensions">set extensions</a> are supported.
- In this case no arbitrary set commands are accepted, only the setList and
- the set exensions commands.</li>
- <li><a href="#readingFnAttributes">readingFnAttributes</a></li>
- </ul>
- <br>
- </ul>
- =end html
- =begin html_DE
- <a name="dummy"></a>
- <h3>dummy</h3>
- <ul>
- Definiert eine Pseudovariable, der mit <a href="#set">set</a> jeder beliebige
- Wert zugewiesen werden kann. Sinnvoll zum Programmieren.
- <br><br>
- <a name="dummydefine"></a>
- <b>Define</b>
- <ul>
- <code>define <name> dummy</code>
- <br><br>
- Beispiel:
- <ul>
- <code>define myvar dummy</code><br>
- <code>set myvar 7</code><br>
- </ul>
- </ul>
- <br>
- <a name="dummyset"></a>
- <b>Set</b>
- <ul>
- <code>set <name> <value></code><br>
- Weist einen Wert zu.
- </ul>
- <br>
- <a name="dummyget"></a>
- <b>Get</b> <ul>N/A</ul><br>
- <a name="dummyattr"></a>
- <b>Attributes</b>
- <ul>
- <li><a href="#disable">disable</a></li>
- <li><a href="#disabledForIntervals">disabledForIntervals</a></li>
- <li><a name="readingList">readingList</a><br>
- Leerzeichen getrennte Liste mit Readings, die mit "set" gesetzt werden
- können.</li>
- <li><a name="setList">setList</a><br>
- Liste mit Werten durch Leerzeichen getrennt. Diese Liste wird mit "set
- name ?" ausgegeben. Damit kann das FHEMWEB-Frontend Auswahl-Menüs
- oder Schalter erzeugen.<br> Beispiel: attr dummyName setList on off </li>
- <li><a name="useSetExtensions">useSetExtensions</a><br>
- Falls gesetzt, und setList enthält on und off, dann die <a
- href="#setExtensions">set extensions</a> Befehle sind auch aktiv. In
- diesem Fall werden nur die Befehle aus setList und die set exensions
- akzeptiert.</li>
- <li><a href="#readingFnAttributes">readingFnAttributes</a></li>
- </ul>
- <br>
- </ul>
- =end html_DE
- =cut
|