Here is the program without email info.
#!/usr/bin/perl -w
use strict;
use IO::Socket;
use MIME::Lite;
use Time::Out qw(timeout);
$SIG{PIPE} = "IGNORE";
$| = 1;
my $nb_secs = 10;
my $buf = "";
my $file;
my $sock = new IO::Socket::INET (PeerAddr => '192.168.173.9',
PeerPort => 4002,
Proto => 'tcp',
Type => SOCK_STREAM,
);
die "cannot open socket" unless ($sock);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(t
+ime);
my $hrmin = sprintf ("%02d%02d",$hour,$min);
my $ymd = sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$
+hour,$min,$sec);
my $filename = "/tmp/$ymd.txt";
print $filename, "\n";
open $file, ">$filename" || die("Couldn't open $file");
Email startup message
my $msg = MIME::Lite->new(
From =>
To =>
Subject =>
Type =>'TEXT',
Data => 'Started.' ,
);
$msg->send();
while (my $line = <$sock>) {
# Close existing $file and reopen a new one at midnight.
if($hrmin eq 0000) {
sleep 1;
close $file;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localti
+me(time);
my $hrmin = sprintf ("%02d%02d",$hour,$min);
my $ymd = sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$md
+ay,$hour,$min,$sec);
my $filename = "/tmp/$ymd.txt";
print $filename, "\n";
open $file, ">$filename" || die("Couldn't open $file");
}
if ($line =~ m/^(ALARM: )/) {
timeout $nb_secs => sub {
my $count = 0;
until ($count == 5 ) #Read the next xx lines
{
$buf .= $sock->getline();
$sock->flush();
$count++;
}
};
if ($@){
my $msg = MIME::Lite->new(
From =>
To =>
Cc =>
Subject =>'ALARM message from house',
Type =>'TEXT',
Data =>$buf ,
);
$msg->send();
#print $line;
#print $buf;
$line = "";
$buf = "";
}
}
if ($line =~ m/^(INFO: )/) {
timeout $nb_secs => sub {
my $count = 0;
until ($count == 5 ) #Read the next xx lines
{
$buf .= $sock->getline();
$sock->flush();
$count++;
}
};
if ($@){
my $msg = MIME::Lite->new(
From =>
To =>
Cc =>
Subject =>'INFO message from house',
Type =>'TEXT',
Data =>$buf ,
);
$msg->send();
#print $line;
#print $buf;
$line = "";
$buf = "";
}
}
if ($line =~ m/^HISTORY: /) {
timeout $nb_secs => sub {
my $count = 0;
until ($count == 40 ) #Read the next xx lines
{
$buf .= $sock->getline();
$count++;
}
};
if ($@){
my $msg = MIME::Lite->new(
From =>
To =>
Subject =>'History Page',
Type =>'TEXT',
Data =>$buf ,
);
$msg->send();
#print $line;
#print $buf;
$line = "";
$buf = "";
}
}
if ($line =~ m/^ALARM-JONN: /) {
timeout $nb_secs => sub {
my $count = 0;
until ($count == 40 ) #Read the next xx lines
{
$buf .= $sock->getline();
$count++;
}
};
if ($@){
my $msg = MIME::Lite->new(
From =>
To =>
Subject =>
Type =>'TEXT',
Data =>$buf ,
);
$msg->send();
#print $line;
#print $buf;
$line = "";
$buf = "";
}
}
$SIG{TERM} = sub {
my $msg = MIME::Lite->new(
From =>
To =>
Subject =>
Type =>'TEXT',
Data => 'Terminated.' ,
);
$msg->send();
die "\nKilling program.\n";
close $sock or die "close: $!";
};
$SIG{INT} = sub {
my $msg = MIME::Lite->new(
From =>
To =>
Subject =>
Type =>'TEXT',
Data => 'Terminated.' ,
);
$msg->send();#
die "\nKilling program.\n";
close $sock or die "close: $!";
};
#Print current line to open $file.
print $file $line;
}
sleep 10; # allow sometime to exit
close $file;
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.