#!/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(time); 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) = localtime(time); 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"); } 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;