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;
|