家電の電源をネットワーク越しに操作できるようにした(主なソース・コード)

http://cancoffee2.at.webry.info/200808/article_64.html
↑「家電の電源をネットワーク越しに操作できるようにした」の主なソース・コード.
試しに書いた,ごみコード入り(^^;).


-------------
index.cgi

#!/usr/bin/perl

use CGI;
require 'knlib.pl';
require 'xport.pl';


#======
# Main
#======
my $form = new CGI;
$cmd = $form->param('cmd');
$on_off[0] = $form->param('on_off0');
$on_off[1] = $form->param('on_off1');
$on_off[2] = $form->param('on_off2');

@item_name= (
"明かり",
"クーラー",
"こたつ"
);

$htmldata = "";

$htmldata .= knlib::get_html("Header_np.html");

# 出力/入力設定を "出力" に設定
if (xport::get_direction(0) != 0x07) {
$htmldata .= "set dir: " . xport::set_direction(0, 0x07) . "
\n";
}

# "On" にしたときに,ロジック "H" になるように設定
if (xport::get_activeHL(0) != 0x07) {
$htmldata .= "set HL: " . xport::get_activeHL(0, 0x07) . "
\n";
}


# コマンド実行
if ($cmd eq "exec"){
for (my $i=0; $i < 3; $i++){
if ($on_off[$i] eq "on"){
if (xport::get_on_off_stat($i+1, 0) == 0x00) {
xport::set_on_off_stat($i+1, 1);
}
}else{
if (xport::get_on_off_stat($i+1, 0) != 0x00) {
xport::set_on_off_stat($i+1, 0);
}
}
}
}



# 現在状態を表示

# 現在時刻
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$nowtime = sprintf("%04d-%02d-%02d %02d:%02d:%02d",
$year+1900, $mon+1, $mday, $hour, $min, $sec);
$htmldata .= $nowtime . "
\n";


$htmldata .= "
";
$htmldata .= "\n";

for (my $i=0; $i < 3; $i++){
$htmldata .= "\n";
$htmldata .= " \n";
$htmldata .= " ";
$htmldata .= "\n";
}

$htmldata .= "
$item_name[$i]";
$on_off_stat[$i] = xport::get_on_off_stat($i+1, 0);
$ackey = $i*3+1;
if ($on_off_stat[$i] != 0){
$htmldata .= "[$ackey]On \n";
$ackey += 2;
$htmldata .= "[$ackey]Off\n";
}else{
$htmldata .= "[$ackey]On \n";
$ackey += 2;
$htmldata .= "[$ackey]Off \n";
}
$htmldata .= "
\n";


$htmldata .= "";
$htmldata .= "\n";


$htmldata .= "
";

$htmldata .= knlib::get_html("Footer.html");


# HTTP ヘッダを付加して HTML を出力する
print "Content-type: text/html; charset=utf-8\n";
# print "Content-type: text/html; charset=EUC-JP\n\n";
print "Content-length: ", length($htmldata), "\n";
# print "Content-length: ", 1504, "\n";
print "\n"; # 改行 2 個は,HTTP ヘッダの終わりで必須

print $htmldata;

1;



-------------
xport.pl

#!/usr/bin/perl

package xport;

use strict;
use warnings;
use IO::Socket;


# my @ds0 = (0x11, 0x07,0x00,0x00,0x00, 0x02,0x00,0x00,0x00);
# my $sRes = con(@ds0);
# my @ds0;


# print &get_direction(0) . "\n";
# print &set_direction(0, 0x07) . "\n";
# print &get_activeHL(0) . "\n";
# print &get_on_off_stat(0) . "\n";
# print &set_on_off_stat(1, 1) . "\n";
# print &get_on_off_stat(0) . "\n";
# print &set_on_off_stat(0, 0) . "\n";

# exit;


sub exec_cmd {
(my $cmd, my $port, my $stat) = @_ ;

my $cmd_port = $port;
my $cmd_stat = $stat;
if ($port == 0) {
$cmd_port = 0x07;
}elsif ($port == 1) {
$cmd_port = 0x01;
}elsif ($port == 2) {
$cmd_port = 0x02;
}elsif ($port == 3) {
$cmd_port = 0x04;
}else{
$cmd_port = 0x00;
}

if ($stat != 0) {
$cmd_stat = $cmd_port;
}

my $sRes = con(($cmd, $cmd_port,0x00,0x00,0x00, $cmd_stat,0x00,0x00,0x00));

# return unpack("H*", $sRes);
# return unpack("x1H2", $sRes);

$stat = unpack("x1H2", $sRes);


if ($port != 0){
if ($stat & $cmd_port) {
return 1;
}else{
return 0;
}
}else{
return $stat;
}

}


sub get_direction {
(my $port) = @_ ;

return xport::exec_cmd(0x11, $port, 0x00);
}


sub set_direction {
(my $port, my $stat) = @_ ;

return xport::exec_cmd(0x19, $port, $stat);
}



sub get_activeHL {
(my $port) = @_ ;

return xport::exec_cmd(0x12, $port, 0x00);
}

sub set_activeHL {
(my $port, my $stat) = @_ ;

return xport::exec_cmd(0x1a, $port, $stat);
}



sub get_on_off_stat {
(my $port) = @_ ;

return xport::exec_cmd(0x13, $port, 0x00);
}


sub set_on_off_stat {
(my $port, my $stat) = @_ ;

return xport::exec_cmd(0x1b, $port, $stat);
}


# 送受信
sub con
{
my $sock = IO::Socket::INET->new(
PeerAddr => '192.168.0.13',
PeerPort => '30704',
Proto => 'tcp');
$sock->send(pack('C*', @_));
$sock->flush();

my $res;
read($sock, $res, 5);
$sock->close();
return $res;
}

1;


--

あー,やっぱり <code> で囲むだけだと,インデントが悲惨なことになるなぁ.
タブが無効になって,空白文字は有効なのかな?
あと,コード中のいくつかの HTML タグが HTML タグとして働いちゃうので,それの影響もあるなぁ.
<pre> が使えれば,もうちょっとマシなんだけどなぁ.

google-code-prettify を,仕込めるものなら仕込みたいなぁ.

==

ColdFire で,これをやるとしたら
http://cancoffee2.at.webry.info/200808/article_65.html

家電の電源をネットワーク越しに操作できるようにした
http://cancoffee2.at.webry.info/200808/article_64.html

google-code-prettify
http://cancoffee2.at.webry.info/200808/article_61.html

"家電の電源をネットワーク越しに操作できるようにした(主なソース・コード)" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント

※ブログオーナーが承認したコメントのみ表示されます。