PQI Air Card その3

その2からの続き


ここで紹介されているのは「ホットスポット接続し、IPアドレスを twitter で通知」、というものだが。

twitter はほとんど使っていないので、何か別の方法がいいなー

インターネット繋がってないと通知来ないし。。。
そもそも、ただ同一ネットワーク上の PC かスマホにメッセージを送ればいいわけで。

例えば、 IP メッセンジャーとかwww


というわけで、コマンドラインから IP メッセンジャーにメッセージを送る方法を探してみると

IPメッセンジャーへメッセージを送る Perl版

というのを見つけた。さっそく試してみよう。
上記ページを見ると、 Encode.pm 版 (perl 5.8 以降) と NKF.pm 版 (5.8 より前) があったが
ソースを見ると、日本語のエンコードに encode()/decode() を使うか nkf() を使うかが違うだけぽい。

まあ、別に IP アドレスと接続完了のメッセージが送れればいいので…


別に日本語使わんでいーわヽ( ´ー`)ノ。

てなわけで、エンコード系の処理を削除して使うことにする。
改良後のソースコードはこんなんなった。

#!/usr/bin/perl -w
#
# ipmsg.pl <host to send> <your name> <message>
#
# ipmsg.pl <host to send> <your name> ... input message from STDIN
#
use Socket;
use Sys::Hostname;
## to info
my $tohost = gethostbyname($ARGV[0]);
my $toport = 2425;
## from info
my $myname = $ARGV[1];
my $myhost = "PQI Air Card";
## net info
my $proto = getprotobyname('udp');
my $ihost = gethostbyname(hostname());
my $ipaddr = sockaddr_in(0, $ihost); # 0 means let kernel pick
my $hispaddr = sockaddr_in($toport, $tohost);
my $sendtext;
if (@ARGV >= 3)
{
$sendtext = $ARGV[2];
}
else
{
$sendtext = <STDIN>;
}
$sendtext = sprintf('1:%d:%s:%s:32:%s', int(rand(100))+1, $myname, $myhost, $sendtext);
socket(SOCKET, PF_INET, SOCK_DGRAM, $proto);
bind(SOCKET, $ipaddr);
send(SOCKET, $sendtext, 0, $hispaddr);

とりあえず、 PC 上でスクリプトを動かして動作確認。ちゃんと動いた。
ではこれを、 SD カードにコピーして。
さて、動かしてみよう!!
# /mnt/sd/ipmsg.pl localhost ozawa hogCan't locate Socket.pm in @INC (@INC contains: /usr/local/lib/perl5/5.14 /usr/local/lib/perl5/5.14 .) at /mnt/sd/ipmsg.pl line 8.BEGIN failed--compilation aborted at /mnt/sd/ipmsg.pl line 8.

くっ…orz

どうやら、 Socket.pm がないんですね…

しかたない、さっきのページからリンクを辿り、 PQI Air Card 用にコンパイルされた busyboxここからダウンロード。
解凍して、 SD カードのルートに .linux というディレクトリを作ってその下に入れる。
で、シンボリックリンクをはり直して…

# rm /usr/bin/perl
# ln -s /mnt/sd/.linux/122_TREK/busybox /usr/bin/perl
# perl --version
perl: applet not found

(  ゜ ▽ ゜ ;)エッ!!…


もしかして…もしかしてだけど… perl 含まれてない!?


OTZ orz .,

コメント

人気の投稿