
RMSv1 Relay Control Perl Script
#!/usr/bin/perl
##############################################################################################################
# #
# Remote Monitoring System - (C)2001 - 2008 RemoteMonitoringSystems #
# Relay Control Perl Script version 1.0 #
# #
# #
# Copy this text and save it to a file called rmsrelay.pl #
# #
# Make sure this file is executable! (chmod 755 rmsrelay.pl) #
# #
# Usage: rmsrelay.pl [ip] [password] [relay number] [action] [delay] #
# #
# [ip] RMSv1 IP Address #
# [password] Password is limited to 10 characters #
# [relay number] 1, 2, or 3 #
# [action] ON or OFF; also determines toggle direction if [delay] is greater than 0 #
# [delay] 0 = No Toggle. Greater than 0 = toggle [delay] amount of seconds #
# #
##############################################################################################################
use IO::Socket;
use IO::Select;
use constant MAX_MSG_LEN => 505;
#########################################################
### EDIT AT YOUR OWN RISK !!! #
#########################################################
$ip = shift;
$mypasswd = shift;
$relay_number = shift;
$relay_action = shift;
$relay_delay = shift;
if ($ip eq "") {print "\n\n\nPlease specify the ip address\n\n";&useage;exit;}
$iplen = length($ip);
if ($iplen > 15){print "\n\n\n\nIP address too long !\n\n";&useage;exit;}
if ($mypasswd eq "") {print "\n\n\nPlease specify the password\n\n";&useage;exit;}
$pass = length($mypasswd);
if ($pass > 10){print "\n\n\n\nPassword too long !\n\n";&useage;exit;}
if ($relay_number eq "") {print "\n\n\n\nPlease specify the relay number '1', '2' or '3'\n\n";&useage;exit;}
$rn=sprintf("%d",$relay_number);
if ($rn > 3){print "n\n\nPlease specify a proper relay number '1', '2' or '3'\n\n";&useage;exit;}
if ($relay_action eq "") {print "\n\n\nPlease specify the Relay action: 'ON' or 'OFF'\n\n";&useage;exit;}
$relay_action = uc($relay_action);
if ($relay_delay eq "") {print "\n\n\nPlease specify the Toggle Delay time in seconds\n\n";&useage;exit;}
$rd=sprintf("%d",$relay_delay);
# Relay ON or OFF
if (($relay_number eq "1") && ($relay_action eq "ON") && ($rd ==0))
{
$bcommand = "&^BND20012$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "1") && ($relay_action eq "OFF") && ($rd ==0))
{
$bcommand = "&^BND20013$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "2") && ($relay_action eq "ON") && ($rd ==0))
{
$bcommand = "&^BND20015$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "2") && ($relay_action eq "OFF") && ($rd ==0))
{
$bcommand = "&^BND20016$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "3") && ($relay_action eq "ON") && ($rd ==0))
{
$bcommand = "&^BND20018$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "3") && ($relay_action eq "OFF") && ($rd ==0))
{
$bcommand = "&^BND20019$mypasswd*****************************************************";
&do_Relay;
exit;
}
# Relay Toggle OFF then ON with delay
if (($relay_number eq "1") && ($relay_action eq "OFF") && ($rd != 0))
{
$bcommand = "&^BND20013$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20012$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "2") && ($relay_action eq "OFF") && ($rd != 0))
{
$bcommand = "&^BND20016$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20015$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "3") && ($relay_action eq "OFF") && ($rd != 0))
{
$bcommand = "&^BND20019$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20018$mypasswd*****************************************************";
&do_Relay;
exit;
}
# Relay Toggle ON then OFF with delay
if (($relay_number eq "1") && ($relay_action eq "ON") && ($rd != 0))
{
$bcommand = "&^BND20012$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20013$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "2") && ($relay_action eq "ON") && ($rd != 0))
{
$bcommand = "&^BND20015$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20016$mypasswd*****************************************************";
&do_Relay;
exit;
}
if (($relay_number eq "3") && ($relay_action eq "ON") && ($rd != 0))
{
$bcommand = "&^BND20018$mypasswd*****************************************************";
&do_Relay;
sleep $rd;
$bcommand = "&^BND20019$mypasswd*****************************************************";
&do_Relay;
exit;
}
############################################################################
## Subroutines #############################################################
############################################################################
sub useage
{
print"********************************************************************\n";
print"* Usage *\n";
print"* *\n";
print"* rmsrelay.pl [IP] [PASSWORD] [RELAYNUMBER] [ACTION] [TOGGLEDELAY] *\n";
print"* *\n";
print"* [IP] RMSv1 ip address *\n";
print"* *\n";
print"* [PASSWORD] up to 10 characters only *\n";
print"* *\n";
print"* [RELAYNUMBER] can be 1, 2, or 3 *\n";
print"* *\n";
print"* [ACTION] can be either ON or OFF *\n";
print"* *\n";
print"* If [TOGGLEDELAY] > 0 then Relay toggles with delay. *\n";
print"* *\n";
print"********************************************************************\n";
}
############################################################################
sub do_Relay
{
&send_udp_packet;
##### Try up to 5 more times to get the info if no response.
if (length($msg_in) < 5) { &send_udp_packet; }
if (length($msg_in) < 5) { &send_udp_packet; }
if (length($msg_in) < 5) { &send_udp_packet; }
if (length($msg_in) < 5) { &send_udp_packet; }
if (length($msg_in) < 5) { &send_udp_packet; }
if (length($msg_in) < 5) { die "Could not retrieve info!!"; }
}
############################################################################
sub send_udp_packet
{
$sock = IO::Socket::INET->new(Proto=>'udp',PeerAddr=>"$ip:7",Timeout => "3") or die $@;
$sel = IO::Select->new;
$sel->add($sock);
$sock->send($bcommand) or die "send() failed: $!";
sleep 1;
while ($sel->can_read(0)) { $sock->recv($msg_in,MAX_MSG_LEN) or die "recv() failed: $!"; }
$CorrectPassword = ord(substr($msg_in,10,1));
if ($CorrectPassword ne "0")
{
print "Bad Password\n";
exit;
}
$sock->close;
}