18_CUL_HOERMANN.pm 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. ##############################################
  2. # $Id: 18_CUL_HOERMANN.pm 15510 2017-11-27 16:52:44Z rudolfkoenig $
  3. package main;
  4. use strict;
  5. use warnings;
  6. sub
  7. CUL_HOERMANN_Initialize($)
  8. {
  9. my ($hash) = @_;
  10. $hash->{Match} = "^R..........\$";
  11. $hash->{DefFn} = "CUL_HOERMANN_Define";
  12. $hash->{ParseFn} = "CUL_HOERMANN_Parse";
  13. $hash->{SetFn} = "CUL_HOERMANN_Set";
  14. $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:1,0 ".
  15. "disable:0,1 disabledForIntervals ";
  16. }
  17. #############################
  18. sub
  19. CUL_HOERMANN_Define($$)
  20. {
  21. my ($hash, $def) = @_;
  22. my @a = split("[ \t][ \t]*", $def);
  23. my $u = "wrong syntax: define <name> CUL_HOERMANN housecode " .
  24. "addr [fg addr] [lm addr] [gm FF]";
  25. return "wrong syntax: define <name> CUL_HOERMANN 10-digit-hex-code"
  26. if(int(@a) != 3 || $a[2] !~ m/^[a-f0-9]{10}$/i);
  27. $modules{CUL_HOERMANN}{defptr}{$a[2]} = $hash;
  28. $hash->{STATE} = "Defined";
  29. AssignIoPort($hash);
  30. return undef;
  31. }
  32. sub
  33. CUL_HOERMANN_Parse($$)
  34. {
  35. my ($hash, $msg) = @_;
  36. # Msg format: R0123456789
  37. my $cde = substr($msg, 1, 10);
  38. my $def = $modules{CUL_HOERMANN}{defptr}{$cde};
  39. if($def) {
  40. my $name = $def->{NAME};
  41. $def->{CHANGED}[0] = "toggle";
  42. $def->{READINGS}{state}{TIME} = TimeNow();
  43. $def->{READINGS}{state}{VAL} = "toggle";
  44. Log3 $name, 4, "CUL_HOERMANN $name toggle";
  45. return $name;
  46. } else {
  47. Log3 $hash, 3, "CUL_HOERMANN Unknown device $cde, please define it";
  48. return "UNDEFINED CUL_HOERMANN_$cde CUL_HOERMANN $cde";
  49. }
  50. }
  51. sub
  52. CUL_HOERMANN_Set($@)
  53. {
  54. my ($hash, @a) = @_;
  55. return "no set argument specified" if(int(@a) < 2);
  56. return "Unknown argument $a[1], choose one of toggle:noArg"
  57. if($a[1] ne "toggle");
  58. return if(IsDisabled($hash->{NAME}));
  59. IOWrite($hash, "", "hn".$hash->{DEF})
  60. }
  61. 1;
  62. =pod
  63. =item summary Hoermann Garage door opener
  64. =item summary_DE Hoermann Garagenfernbedienung
  65. =begin html
  66. <a name="CUL_HOERMANN"></a>
  67. <h3>CUL_HOERMANN</h3>
  68. <ul>
  69. The CUL_HOERMANN module registers the 868MHz Hoermann Garage-Door-Opener
  70. signals received by the CUL. <b>Note</b>: As the structure of this signal is
  71. not understood, no checksum is verified, so it is likely to receive bogus
  72. messages.
  73. <br><br>
  74. <a name="CUL_HOERMANNdefine"></a>
  75. <b>Define</b>
  76. <ul>
  77. <code>define &lt;name&gt; CUL_HOERMANN &lt;10-digit-hex-code&gt;</code>
  78. <br>
  79. </ul>
  80. <br>
  81. <a name="CUL_HOERMANNset"></a>
  82. <b>Set</b>
  83. <ul>
  84. <li>toggle<br>
  85. Send a signal, which, depending on the status of the door, opens it,
  86. closes it or stops the current movement. NOTE: needs culfw 1.67+
  87. </li>
  88. </ul><br>
  89. <a name="CUL_HOERMANNget"></a>
  90. <b>Get</b> <ul>N/A</ul><br>
  91. <a name="CUL_HOERMANNattr"></a>
  92. <b>Attributes</b>
  93. <ul>
  94. <li><a href="#do_not_notify">do_not_notify</a></li>
  95. <li><a href="#showtime">showtime</a></li>
  96. <li><a href="#IODev">IODev</a></li>
  97. <li><a href="#disable">disable</a></li>
  98. <li><a href="#disabledForIntervals">disabledForIntervals</a></li>
  99. </ul>
  100. <br>
  101. </ul>
  102. =end html
  103. =cut