86_FS10.pm 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. ##############################################
  2. package main;
  3. use strict;
  4. use warnings;
  5. use Device::SerialPort;
  6. use IO::Socket::INET;
  7. my $fs10data = "";
  8. my $pcwsdsocket;
  9. #####################################
  10. sub
  11. FS10_Initialize($)
  12. {
  13. my ($hash) = @_;
  14. # Consumer
  15. $hash->{DefFn} = "FS10_Define";
  16. $hash->{AttrList}= "model:FS10 loglevel:0,1,2,3,4,5,6";
  17. }
  18. #####################################
  19. sub
  20. FS10_Define($$)
  21. {
  22. my ($hash, $def) = @_;
  23. my @a = split("[ \t][ \t]*", $def);
  24. Log 3, "FS10 Define: $a[0] $a[1] $a[2] $a[3]";
  25. return "Define the host and portnr as a parameter i.e. 127.0.0.1 4711"
  26. if(@a != 4);
  27. $hash->{Timer} = 600;
  28. $hash->{Host} = $a[2];
  29. $hash->{Port} = $a[3];
  30. $hash->{STATE} = "Initialized";
  31. my $dev = $a[2];
  32. Log 1, "FS10 device is none, commands will be echoed only"
  33. if($dev eq "none");
  34. $hash->{DeviceName} = $dev;
  35. FS10_GetStatus($hash);
  36. return undef;
  37. }
  38. #####################################
  39. sub
  40. FS10_GetStatus($)
  41. {
  42. my ($hash) = @_;
  43. my $buf;
  44. #my $banner;
  45. my $reqcmd;
  46. my $fs10time;
  47. my $dt;
  48. my $x;
  49. my $result = "";
  50. Log 3, "FS10_GetStatus";
  51. # Call us in 5 minutes again.
  52. InternalTimer(gettimeofday()+300, "FS10_GetStatus", $hash, 0);
  53. my $dnr = $hash->{DEVNR};
  54. my $name = $hash->{NAME};
  55. my $host = $hash->{Host};
  56. my $port = $hash->{Port};
  57. my %vals;
  58. my $pcwsd ="$host:$port";
  59. my $pcwsdsocket = IO::Socket::INET->new( $pcwsd )
  60. or return "FS10 Can't bind to pcwsd" if(!$pcwsdsocket);
  61. my $banner = $pcwsdsocket->getline();
  62. my @x = split(" ", $banner);
  63. my @y;
  64. my $fs10name;
  65. for(my $i = 0; $i < 8; $i++) #Outdoor
  66. {
  67. $fs10name ="Ta$i";
  68. $reqcmd = "get od2temp $i\r\n";
  69. $pcwsdsocket->print($reqcmd);
  70. $buf = $pcwsdsocket->getline();
  71. $result = "$result $buf";
  72. @x = split(" ", $buf);
  73. $fs10time = FmtDateTime($x[1]);
  74. $hash->{CHANGED}[$i] = "Ta$i: $x[0]";
  75. $hash->{READINGS}{$fs10name}{TIME} = $fs10time;
  76. $hash->{READINGS}{$fs10name}{VAL} = $x[0];
  77. }
  78. $fs10name="Ti";
  79. $reqcmd = "get idtemp 7\r\n";
  80. $pcwsdsocket->print($reqcmd);
  81. $buf = $pcwsdsocket->getline();
  82. @x = split(" ", $buf);
  83. $fs10time = FmtDateTime($x[1]);
  84. $hash->{CHANGED}[8] = "Ti: $x[0]";
  85. $hash->{READINGS}{$fs10name}{TIME} = $fs10time;
  86. $hash->{READINGS}{$fs10name}{VAL} = $x[0];
  87. $fs10name="Rain";
  88. $reqcmd = "get rain 7\r\n";
  89. $pcwsdsocket->print($reqcmd);
  90. $buf = $pcwsdsocket->getline();
  91. @x = split(" ", $buf);
  92. $fs10time = FmtDateTime($x[1]);
  93. $hash->{CHANGED}[9] = "Rain: $x[0]";
  94. $hash->{READINGS}{$fs10name}{TIME} = $fs10time;
  95. $hash->{READINGS}{$fs10name}{VAL} = $x[0];
  96. $fs10name="Sun";
  97. $reqcmd = "get bright 7\r\n";
  98. $pcwsdsocket->print($reqcmd);
  99. $buf = $pcwsdsocket->getline();
  100. @x = split(" ", $buf);
  101. $fs10time = FmtDateTime($x[1]);
  102. $hash->{CHANGED}[10] = "Sun: $x[0]";
  103. $hash->{READINGS}{$fs10name}{TIME} = $fs10time;
  104. $hash->{READINGS}{$fs10name}{VAL} = $x[0];
  105. $fs10name="Windspeed";
  106. $reqcmd = "get wspd 7\r\n";
  107. $pcwsdsocket->print($reqcmd);
  108. $buf = $pcwsdsocket->getline();
  109. @x = split(" ", $buf);
  110. $fs10time = FmtDateTime($x[1]);
  111. $hash->{CHANGED}[11] = "Windspeed: $x[0]";
  112. $hash->{READINGS}{$fs10name}{TIME} = $fs10time;
  113. $hash->{READINGS}{$fs10name}{VAL} = $x[0];
  114. close($pcwsdsocket);
  115. $result =~ s/[\r\n]//g;
  116. DoTrigger($name, undef) if($init_done);
  117. $hash->{STATE} = "$result";
  118. Log 3,"FS10 Result: $result";
  119. return $hash->{STATE};
  120. }
  121. #####################################
  122. sub
  123. FS10Log($$)
  124. {
  125. my ($a1, $a2) = @_;
  126. #define n31 notify fs10 {FS10Log("@", "%")}
  127. #define here notify action
  128. Log 2,"FS10 $a1 = $a2 old: $oldvalue{$a1}{TIME}=> $oldvalue{$a1}{VAL});";
  129. }
  130. 1;