
私がこのブログを書いているのは、自分自身の備忘録としての機能と、ひょっとして世間のどなたかに多少なりとも有用な情報を提供することができるかもしれないから、と2つの理由があります。
今日の記事は、どうも前者のみになりそうです。
私の職場はWANを使っていますが、ネットワークの管理は本社の管理下にあるので、自分の職場のネットワークに関して勝手なことはできません。そのため、せっかくPanasonicのライブカメラがありますが、カメラにもプライベートIPアドレスが割り振られ、外部からコントロールできるという機能が発揮出来ないという問題がありました。画像は静止画を外部のサーバーにFTPで送ります。外部からWAN内には入れないようにしてあるわけです。
内部からならば仕様通り自由にコントロールできるのでその点は問題ありませんが、誰かがカメラの向きやズームを変えてしまうと、外部から防犯などのために設定をしておいた角度やズームの状態に戻せません。
カメラの仕様として、一定時間後にある設定状態に戻すという機能はありません。(新しいカメラならあるかも知れませんが、私の職場で使っているものにはないのです。)
そこで、簡易的な対処方法を考えてみました。
ブラウザからカメラをコントロールする命令を送れるのだから、HTMLファイル中にその命令を書いておいて、一定時間毎にデフォルト状態に戻せれば、誰かが戻し忘れても、防犯に役立ちます。
冒頭の、閲覧・コントロールパネルの画面で、Dの8つのボタンに向きや角度、ズームなどをプリセットしておけます。このボタンの1つをクリックすると次のようなリクエスト(というのでしょうか?)がブラウザに対して行われます。(aa.bbb.cc.ddはライブカメラのプライベートIPアドレス。)
http://aa.bbb.cc.dd/nphControlCamera?Direction=Preset&PresetOperation=Move&Data=7&Mode=Motion&Resolution=640x480&Quality=Clarity&Interval=10&Size=STD&Language=1"
最初、これをHTMLファイルの冒頭に
<META HTTP-EQUIV="Refresh" CONTENT="600;URL=http://aa.bbb.cc.dd/nphControlCamera?....">
という記述で入れました。
でもその考え方は、半分正しくて、半分は間違っていました。
これを含むHTMLファイルをブラウザで開くと600秒後に「URL=」で書かれたURLをブラウザは開こうとします。従って、ライブカメラにそのリクエストが送られます。そして、他のブラウザで開くと、今まで別の向きを向いていたり、一部しか見えないようなズーム状態だったものが、決められたプリセット(ここでは、Data=7で示される)7のボタンを押した状態になります。
こまでは成功でした。
しかし…それで終わってしまうのです。
考えてみれば、
<META HTTP-EQUIV="Refresh" ・・・
は、他のページにジャンプするか、あるいは自分自身(HTMLファイル)を再度読み込むのが目的ですから、このような記述では、リクエストが実行されるものの、そのページが開かれるわけでもなく、また自分自身が再度読み込まれるわけでもないので、1回だけ実行されて終わってしまうのです。
そこでしばし考えました。
1 他のページを読み込むような振りをして、ライブカメラへリクエストを送る。
2 自分自身を再度読み込み、決められた一定時間が経過したら、またリクエストを送らせる。
の2つを同時に実現する簡単な(笑)方法はないものか・・・。
思いつきました。フレームを使うのです。久しぶりのフレームです。

(↑かなり雑な図になってしまいました。)
この図で、上のピンクのフレームでは、ライブカメラのリクエストが書かれています。本来は、HTMLファイルを書くべきなのですが、実態のないページ=リクエストが書かれています。
下のフレームはダミーです。ライブカメラへのリクエスト以外に読み込む必要はないので、ダミーページを読み込ませる事にしました。今考えて見ると、フレームの中に1つのHTMLだけでも良かったかも知れません。
さて、それら2つを含む外側のフレーム(水色)には、
が書かれていますから、自分自身を600秒ごとに読み込むことになります。そして、上のフレームでそのたびにライブカメラへのリクエスト(=プリセット7に戻す)が行われます。
先に書くのを忘れていましたが、このHTMLファイルはWAN内にあって常に起動しているパソコンに置いてあります。
さて結果ですが、意図したとおりになりました。防犯に使われないといいのですが・・・。(笑)
----
追記
一応、フレーム指定ファイルの内容をここに書いておくことにします。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<META HTTP-EQUIV="Refresh" CONTENT="600">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>ライブカメラ・リフレッシュ</title>
</head>
<frameset rows="80,*" frameborder="no" border="0" framespacing="0">
<frame
src="http://aa.bbb.cc.dd/nphControlCamera?Direction=Preset&PresetOperation=Move&Data=7&Mode=Motion&Resolution=640x480&Quality=Clarity&Interval=10&Size=STD&Language=1"
name="topFrame" scrolling="No" noresize="noresize" id="topFrame"
title="topFrame" />
<frame src="dummy.html" name="mainFrame" id="mainFrame"
title="mainFrame" />
</frameset>
<noframes><body>
</body>
</noframes></html>></html>