From e99298e2ebc835da0f952bcfe0a2d5a75984e166 Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Tue, 16 May 2017 17:46:44 +0200 Subject: [PATCH] Power switch modules can now be accessed remotely, i.e. if they are connected to another machine. --- web/htdocs/tools/pwr/pwr_remote.pl | 3 +- web/htdocs/tools/pwr/pwr_switch.pl | 44 +++++-------- web/htdocs/tools/pwr/pwr_switch_remote.pl | 80 +++++++++++++++++++++++ 3 files changed, 100 insertions(+), 27 deletions(-) create mode 100644 web/htdocs/tools/pwr/pwr_switch_remote.pl diff --git a/web/htdocs/tools/pwr/pwr_remote.pl b/web/htdocs/tools/pwr/pwr_remote.pl index 8ca8dcd..472283e 100644 --- a/web/htdocs/tools/pwr/pwr_remote.pl +++ b/web/htdocs/tools/pwr/pwr_remote.pl @@ -131,4 +131,5 @@ sub receive_answer { usleep 5E4; # 50 ms delay } } -} \ No newline at end of file +} + diff --git a/web/htdocs/tools/pwr/pwr_switch.pl b/web/htdocs/tools/pwr/pwr_switch.pl index 9296361..c305ee1 100755 --- a/web/htdocs/tools/pwr/pwr_switch.pl +++ b/web/htdocs/tools/pwr/pwr_switch.pl @@ -23,16 +23,10 @@ my @new_command = split('&',$envstring); my $ser_dev = shift(@new_command); $ser_dev = "/dev/ttyUSB0" unless defined $ser_dev; -# my $ser_type = shift(@new_command); -# $ser_type = "PSP" unless defined $ser_type; -# -# my $ser_speed = shift(@new_command); #speed or port number -# $ser_speed = "2400" unless defined $ser_speed; - my $port; # my $isIP = 0; -# my $isRemote = undef; +my $isRemote = undef; # # if($ser_dev =~ /^IP(.*)/) { # $ser_dev = $1; @@ -40,12 +34,13 @@ my $port; # $port = IO::Socket::INET->new(PeerAddr => $ser_dev, PeerPort => $ser_speed, Proto => "tcp", Type => SOCK_STREAM) # or die "ERROR: Cannot connect: $@"; # } -# elsif($ser_dev =~ /^SER(.*)/) { -# my $str = $1; -# ($isRemote,$ser_dev) = split('/',$str,2); -# $ser_dev = '/'.$ser_dev; -# } -# else { +# els +if($ser_dev =~ /^SER(.*)/) { + my $str = $1; + ($isRemote,$ser_dev) = split('/',$str,2); + $ser_dev = '/'.$ser_dev; + } +else { $port = new Device::SerialPort($ser_dev); unless ($port) { @@ -62,24 +57,22 @@ my $port; $port->read_char_time(0); $port->read_const_time(50); $port->write_settings; - +} # debug output #print "attempting to communicate with power supply connected to interface:\n$ser_dev\n\n"; -# if(defined $isRemote) { -# my $env = $ENV{'QUERY_STRING'}; -# # $env =~ s/%20/ /g; -# $env =~ s/&/!/g; -# my $cmd = "bash -c \"ssh $isRemote 'QUERY_STRING=".$env." perl'\" user_msg('ON'); + $port->baudrate(57600); + $port->parity("none"); + $port->databits(8); + $port->stopbits(1); + $port->handshake("none"); + $port->read_char_time(0); + $port->read_const_time(50); + $port->write_settings; + + print receive_answer(); + + +sub Cmd { + my ($c) = @_; + for my $i (0..2) { + $port->write($c."\n"); + my $a = ""; + for my $j (0..8) { + my ($l,$s) = $port->read(5); + $a .= $l; + if ($l < 5) {next;} + if ($s =~ /^\w[a-f0-9]{3}/) {return hex(substr($s,1,3)).'&';} + if ($s =~ /^\w[a-f0-9]{2}/) {return hex(substr($s,1,2)).'&';} + usleep(10000); + } + usleep(50000); + #print '.'; + } + } + + + + +sub receive_answer { + print strftime("%H:%M:%S &", localtime()); + my $ret =""; + while ( my $command = shift(@new_command) ) { + my $r = Cmd($command); + print $r if($command =~ /\?/); + } + return $ret; + } + + + +print "\n"; + +exit 1; -- 2.43.0