Web拍手:
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 .= 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
--
【コンピュータの最新記事】
- このブログ「とり茶」を,Seesaaブログから自宅サーバーの WordPress..
- メロディを入力することで楽譜を検索できるシステム,「musiconn.score..
- いつのまにか,MuseScore のモバイルアプリが Freemiumモデルに移..
- 「blogramサービス終了のお知らせ」 どこが運営しているブログシステムかを問..
- noike.info サイトの内容を WordPress で管理することにしまし..
- A 様から,「SMF to MP3 with ぼーか郎」に Amazon ギフト..
- noike.info ドメインの有効期限を 1年延長した.去年と変わらず 160..
- MuseScore の 2.3.2 がリリースされたそうです.
- 「MusicXML to MP3 with ぼーか郎」で,拡張子が .music..
- MuseScore の 2.3.1 がリリースされました.同梱されている言語ファ..
- Windows 用の MuseScore 2.3 で,ストレージ(ディスク)に十..
- MuseScore の 2.3 が公式にリリースされました.個人的には,新機能の..
- MEI, MusicXML, PAE(RISM) のデータを WordPress..
- 池添 彰 様から,noike.info のサービスに Amazon ギフト券での..
- 先日の Windows Update 適用後から Emacs(NTEmacs) ..
- 「東芝コミュニケーションAI「RECAIUS」(リカイアス)の音声合成技術」「音..
- TVアニメ版の「紅殻のパンドラ」を観終えた.全 12 話.「攻殻機動隊」の世界観..
- Android タブレットを PC のマルチディスプレイのひとつにすることを思い..
- MuseScore が 2.2.1 にアップデートされました.2.2 のリリース..
- MuseScore の 2.2 がリリースされました.いままでと同様に無料で使え..