Guest User

mq to RRD

a guest
Aug 27th, 2020
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use FileHandle;
  4. use Email::MIME;
  5. use MIME::Base64;
  6. use Authen::SASL;
  7. use Email::Sender::Simple qw(sendmail);
  8. use Email::Sender::Transport::SMTP ();
  9. use Email::Simple ();
  10. use Email::Simple::Creator ();
  11. use Email::Send::SMTP::Gmail;
  12. use DateTime;
  13. use Switch;
  14. use Data::Dumper qw(Dumper);
  15. $ENV{TZ} = ':/usr/share/zoneinfo/Canada/Pacific';
  16. my $subclient = "/usr/bin/mosquitto_sub -v -t sensor/#";
  17. my $sensor_type;
  18. my $sensor_value;
  19. my $sensor_name;
  20. my $sttime=0;
  21. my $entime;
  22. my $elapse;
  23. open(SUB, "$subclient|");
  24.  
  25. SUB->autoflush(1);
  26.  
  27. while (my $line = <SUB>) {
  28. print $line;
  29. my $str = $line;
  30. #my @words = split / /, $str;
  31. #print Dumper \@words;
  32. #print Dumper['sensor/moisture'];
  33. ($sensor_name, $sensor_type) = split '/', $line;
  34. ($sensor_type, $sensor_value) = split ' ', $sensor_type;
  35. $sttime++;
  36. print "Sensor type is" . $sensor_type;
  37. print "Sensor value is" . $sensor_value;
  38. print "rrdtool update /var/www/html/$sensor_type.rrd N:$sensor_value";
  39. if (($sensor_type eq 'temperature_indoor') && ($sensor_value>34) ||($sensor_type eq 'water') && ($sensor_value<1))
  40.  
  41. {
  42. print "Sending email...triggered";
  43. my $smtpserver = 's.com';
  44. my $smtpport = 587;
  45. my $smtpuser = '[email protected]';
  46. my $smtppassword = 's';
  47.  
  48. my $transport = Email::Sender::Transport::SMTP->new({
  49. host => $smtpserver,
  50. port => $smtpport,
  51. sasl_username => $smtpuser,
  52. sasl_password => $smtppassword,
  53. });
  54.  
  55. my $email = Email::Simple->create(
  56. header => [
  57. To => 'myemail',
  58. From => 'myemail',
  59. Subject => 'Sensor alert!',
  60. ],
  61. body => $sensor_type . " Sensor reported:" . $ sensor_value,
  62. );
  63. if ($sttime > 6000) {
  64. $sttime = 0;
  65. sendmail($email, { transport => $transport });
  66. print "Email sent";
  67.  
  68. }
  69. }
  70.  
  71. system("rrdtool update /var/www/html/$sensor_type.rrd N:$sensor_value");
  72. }
  73.  
Add Comment
Please, Sign In to add comment