98_dummy.pm 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. ##############################################
  2. # $Id: 98_dummy.pm 16965 2018-07-09 07:59:58Z rudolfkoenig $
  3. package main;
  4. use strict;
  5. use warnings;
  6. use SetExtensions;
  7. sub
  8. dummy_Initialize($)
  9. {
  10. my ($hash) = @_;
  11. $hash->{SetFn} = "dummy_Set";
  12. $hash->{DefFn} = "dummy_Define";
  13. $hash->{AttrList} = "readingList setList useSetExtensions " .
  14. "disable disabledForIntervals ".
  15. $readingFnAttributes;
  16. }
  17. ###################################
  18. sub
  19. dummy_Set($@)
  20. {
  21. my ($hash, @a) = @_;
  22. my $name = shift @a;
  23. return "no set value specified" if(int(@a) < 1);
  24. my $setList = AttrVal($name, "setList", " ");
  25. $setList =~ s/\n/ /g;
  26. if(AttrVal($name,"useSetExtensions",undef)) {
  27. my $a0 = $a[0]; $a0 =~ s/([.?*])/\\$1/g;
  28. if($setList !~ m/\b$a0\b/) {
  29. unshift @a, $name;
  30. return SetExtensions($hash, $setList, @a)
  31. }
  32. SetExtensionsCancel($hash);
  33. } else {
  34. return "Unknown argument ?, choose one of $setList" if($a[0] eq "?");
  35. }
  36. return undef
  37. if($attr{$name} && # Avoid checking it if only STATE is inactive
  38. ($attr{$name}{disable} || $attr{$name}{disabledForIntervals}) &&
  39. IsDisabled($name));
  40. my @rl = split(" ", AttrVal($name, "readingList", ""));
  41. my $doRet;
  42. eval {
  43. if(@rl && grep /\b$a[0]\b/, @rl) {
  44. my $v = shift @a;
  45. readingsSingleUpdate($hash, $v, join(" ",@a), 1);
  46. $doRet = 1;
  47. }
  48. };
  49. return if($doRet);
  50. my $v = join(" ", @a);
  51. Log3 $name, 4, "dummy set $name $v";
  52. readingsSingleUpdate($hash,"state",$v,1);
  53. return undef;
  54. }
  55. sub
  56. dummy_Define($$)
  57. {
  58. my ($hash, $def) = @_;
  59. my @a = split("[ \t][ \t]*", $def);
  60. return "Wrong syntax: use define <name> dummy" if(int(@a) != 2);
  61. return undef;
  62. }
  63. 1;
  64. =pod
  65. =item helper
  66. =item summary dummy device
  67. =item summary_DE dummy Ger&auml;t
  68. =begin html
  69. <a name="dummy"></a>
  70. <h3>dummy</h3>
  71. <ul>
  72. Define a dummy. A dummy can take via <a href="#set">set</a> any values.
  73. Used for programming.
  74. <br><br>
  75. <a name="dummydefine"></a>
  76. <b>Define</b>
  77. <ul>
  78. <code>define &lt;name&gt; dummy</code>
  79. <br><br>
  80. Example:
  81. <ul>
  82. <code>define myvar dummy</code><br>
  83. <code>set myvar 7</code><br>
  84. </ul>
  85. </ul>
  86. <br>
  87. <a name="dummyset"></a>
  88. <b>Set</b>
  89. <ul>
  90. <code>set &lt;name&gt; &lt;value&gt</code><br>
  91. Set any value.
  92. </ul>
  93. <br>
  94. <a name="dummyget"></a>
  95. <b>Get</b> <ul>N/A</ul><br>
  96. <a name="dummyattr"></a>
  97. <b>Attributes</b>
  98. <ul>
  99. <li><a href="#disable">disable</a></li>
  100. <li><a href="#disabledForIntervals">disabledForIntervals</a></li>
  101. <li><a name="readingList">readingList</a><br>
  102. Space separated list of readings, which will be set, if the first
  103. argument of the set command matches one of them.</li>
  104. <li><a name="setList">setList</a><br>
  105. Space separated list of commands, which will be returned upon "set name
  106. ?", so the FHEMWEB frontend can construct a dropdown and offer on/off
  107. switches. Example: attr dummyName setList on off </li>
  108. <li><a name="useSetExtensions">useSetExtensions</a><br>
  109. If set, and setList contains on and off, then the
  110. <a href="#setExtensions">set extensions</a> are supported.
  111. In this case no arbitrary set commands are accepted, only the setList and
  112. the set exensions commands.</li>
  113. <li><a href="#readingFnAttributes">readingFnAttributes</a></li>
  114. </ul>
  115. <br>
  116. </ul>
  117. =end html
  118. =begin html_DE
  119. <a name="dummy"></a>
  120. <h3>dummy</h3>
  121. <ul>
  122. Definiert eine Pseudovariable, der mit <a href="#set">set</a> jeder beliebige
  123. Wert zugewiesen werden kann. Sinnvoll zum Programmieren.
  124. <br><br>
  125. <a name="dummydefine"></a>
  126. <b>Define</b>
  127. <ul>
  128. <code>define &lt;name&gt; dummy</code>
  129. <br><br>
  130. Beispiel:
  131. <ul>
  132. <code>define myvar dummy</code><br>
  133. <code>set myvar 7</code><br>
  134. </ul>
  135. </ul>
  136. <br>
  137. <a name="dummyset"></a>
  138. <b>Set</b>
  139. <ul>
  140. <code>set &lt;name&gt; &lt;value&gt</code><br>
  141. Weist einen Wert zu.
  142. </ul>
  143. <br>
  144. <a name="dummyget"></a>
  145. <b>Get</b> <ul>N/A</ul><br>
  146. <a name="dummyattr"></a>
  147. <b>Attributes</b>
  148. <ul>
  149. <li><a href="#disable">disable</a></li>
  150. <li><a href="#disabledForIntervals">disabledForIntervals</a></li>
  151. <li><a name="readingList">readingList</a><br>
  152. Leerzeichen getrennte Liste mit Readings, die mit "set" gesetzt werden
  153. k&ouml;nnen.</li>
  154. <li><a name="setList">setList</a><br>
  155. Liste mit Werten durch Leerzeichen getrennt. Diese Liste wird mit "set
  156. name ?" ausgegeben. Damit kann das FHEMWEB-Frontend Auswahl-Men&uuml;s
  157. oder Schalter erzeugen.<br> Beispiel: attr dummyName setList on off </li>
  158. <li><a name="useSetExtensions">useSetExtensions</a><br>
  159. Falls gesetzt, und setList enth&auml;lt on und off, dann die <a
  160. href="#setExtensions">set extensions</a> Befehle sind auch aktiv. In
  161. diesem Fall werden nur die Befehle aus setList und die set exensions
  162. akzeptiert.</li>
  163. <li><a href="#readingFnAttributes">readingFnAttributes</a></li>
  164. </ul>
  165. <br>
  166. </ul>
  167. =end html_DE
  168. =cut