見守りカメラの遠隔監視とネットワーク通信について
介護施設、病院におけるヘルスケアの分野の中で見守りシステムは重要なものの中の一つです。
介護IoT技術で各種機器のセンサーから出力されたデータを集中管理することで、要介護者の安全性を確保し、介護従事者は見守りの負担軽減が見込めます。
IoTで介護、見守りをする場合は、離床センサー、転倒検知センサー、カメラ、睡眠モニター、バイタルセンサー等いろいろありますが、これらは介護施設に導入される総合的なシステムで一般家庭ではそのようなものはありません。
私は、見守りカメラを一人暮らしで高齢の父の実家に設置しています。玄関へ向かう廊下を常時監視しています。というのも倒れていないか確認のためです。父は呼吸器系に疾患があり、指に付けて測るパルスオキシメータもコロナ禍前から持っています。
これらの機器はネットワーク通信によってインターネットを通して外部から参照できて便利です。
本来、私が実現したかったのはただ外部から参照できるだけでなく、異常な状態を検知した時にメールで知らせてくれるシステムがあれば良いのですがそこまでの機能を在宅機器で実現しているものはありません。
例えば廊下で倒れて動けなくなっているとか、パルスオキシメータで測った時に酸素濃度90以下になった時にメールで知らせることができればすぐに対応できます。
パルスオキシメータで技術マニュアルや専用ライブラリーを公開してくれる日本のメーカーもありますが個人で利用するにはすごく高価です。いずれ在宅キットのようなものが出てくれば構築したいと思っています。
現在は、実家に見守りカメラを設置していますが、紹介するのはその中で家庭にも簡単に設置できる見守りカメラとその通信方法について紹介します。
”見守り”という言葉がついていますが、ネットワークカメラです。使用目的によって見守りカメラと称しており、家庭向けから介護施設の集合監視タイプまで各種存在します。
家庭用に簡単に設置できる見守りカメラはどのようにしてインターネットの外部からパソコンで監視できるのかは皆さんあまり気にしたことがないかと思います。家庭に設置したカメラ画像はインターネットの外部から遠隔でパソコンまたはスマートフォンの専用アプリからいつでも参照できます。
では、どうやって外部から自宅のカメラを特定しているのでしょうか。
通常、自宅のインターネット回線は特別なことがない限り動的なIPアドレスがプロバイダーから付与されます。プロバイダーに接続する度にIPアドレスが変わります。(同一の時もある)
よく言われるようにIPアドレスは「ネットワーク上の住所」に例えられます。IPアドレスが分かれば通信先の機器に接続できますが、このIPアドレスが固定ではなく状態によって変わり、外部からは不定となってしまい自宅に設置した見守りカメラを特定できなくなります。
そこで、この動的IPアドレスでも見守りカメラを接続する方法として2種類の方法があります。
それは、「DDNS」と「ハイブリッドP2P」です。
DDNS(ダイナミックDNS)
ネットワークカメラが家庭用に普及する前はDDNS(ダイナミックDNS)が主流でした。
DDNSを利用して自宅のネットワークカメラをカメラサーバとして接続するには、ルーターのNAT、ポート変換、DDNSの設定を必要とし面倒なものですが、ある程度専門知識があれば自宅サーバと相性が良く拡張性があります。
DDNSとは、ホスト名とIPアドレスの対応を動的に更新してくれるサービスです。
現在のルーターにはDDNSの登録メニューが実装され、設定すれば利用できるものが多い。無料から有料までいろいろあります。
機器ベンダー | 内容 |
---|---|
NEC (ATERM) | ホームIPロケーションで自動的に付与 ロケーション名は勝手にランダム付与されます。 |
YAMAHA | YAMAHA DDNSが無料で利用可能 ユニークなホスト名が付けられます。※1 [ホスト名].aa0.netvolante.jp [ホスト名].aa1.netvolante.jp |
FortiGate | FortiGuard 無料で利用可能 ユニークなホスト名が付けられます。※1 [ホスト名].fortiddns.com [ホスト名].fortidyndns.com [ホスト名].float-zone.com |
※1 該当のドメイン(FQDN)が既に使われていないこと
ドメイン(FQDN)さえ分かれば、外部からはその特定のドメインでアクセスできることになります。通常はWEBアクセスで参照するものが多い。
ハイブリッドP2P
当初自宅の見守りカメラとしてDDNSタイプのものを探していたのですが、安価なものがなく、そのかわり設置するだけですぐに観られるという機器が格安で主に中国製で出回っていました。見守り監視だけならこれで十分な機能が実装されています。
通信方式はハイブリッドP2Pと呼ばれるものです。
P2Pは各機器(ノード)が、クライアントでもあり、サーバでもあります。あるノードの情報は、ノードからノードへと中継され、論理ネットワーク全体が情報を共有します。この論理ネットワークに参加するにはどれかのノードを見つける必要があり、ノード情報を取得することが必要です。
ハイブリッドP2Pでは論理ネットワークを管理する中央サーバが存在します。個々のノードは、最初に中央サーバに接続することで、論理ネットワークに参加します。実際のファイル転送は、中央サーバを介せずにノード間で直接転送を行います。
私の所有している見守りカメラではハイブリッドP2Pが利用されています。LANに接続して電源ONするだけで稼働します。
ネットワークが分からなくても接続するだけで動作するのは心理的に楽です。当初はこのカメラに人形の帽子とレースのドレスを着せてカムフラージュしていたのですが、いつのまにか外されてしまいました。残念ながらその当時の写真はありません。
では実際のP2Pの通信パケットの送受信の様子を少し覗いて見ましょう。(ネットワークプロトコルアナライザー「Wireshark」で取得)
ここで登場するIPアドレスは以下の4つです。(第3オクテット以降は伏せ字XXにしています)
No | IPアドレス | 機器、サーバ | 通信プロトコル |
---|---|---|---|
① | 192.168.10.4 | 自PC | |
② | 139.99.X.XX | YYY.vimtag.com アプリケーションサーバ、インデックスサーバ (場所:日本) ※1 |
http |
③ | 139.99.XX.XX | XXX.vimtag.com P2Pノード (場所:シンガポール)※1 |
rtdp ポート6030 (private P2P video streaming protocol) |
④ | 139.101.XX.XX | ZZZ.kcn.ne.jp 実家ルーター、見守りカメラのP2Pノード |
rtdp (private P2P video streaming protocol) |
①→②にログインし、③のIPアドレスとプロトコル情報を得る。
①→③にUDPで接続し、情報のやり取りを行う。
以後、①と④で直接映像データのやり取りを行う。
※1 設置場所はIPアドレスでおおよそ以下のサイトで分かります。
https://rakko.tools/tools/11/
インターネット上の通信の概略は上のようになっていますが、使用者はそこまで知る必要はありません。興味がある方は「Wireshark」で通信内容を見ることができます。
ただ、このハイブリッドP2Pのインターネット通信で次のような欠点があります。
1)セキュリティーは大丈夫か
P2Pではお互いの通信相手の安全性の確認が困難です。特に企業で使う場合は中国系の機器、ツールには注意を払ったほうが良いです。
実家に置いてある中国製の見守りカメラですが、設定で設置地域を選択することができるので日本に設定しています。
②のログインサーバは日本にありますが、③の P2Pノードはシンガポールに存在します。
③のアクセスがどうして必要なのかは分かりませんが、ノード情報を配信しているのかもしれません。①③間のアクセス後は①のPCと④のカメラが直接P2Pで通信しています。
2)安定して通信できるか
アプリケーションサーバ、インデックスサーバがダウンするとノード情報を得られず接続先が分からないために④の実家自宅のカメラとは接続できなくなります。
実際、中国提供の機器だと発売当初は良いのですが数年経ってくるとサーバ自体がクローズされたり、調子が悪いことが多くなり、接続エラーが多くなります。ハイブリッドP2Pと言えども接続先が分からないとだめです。
この点、割高にはなりますが日本の大手メーカー製で日本企業が管理しているサーバの方が安定して将来も安心です。
自宅サーバとDDNS、IOT
独自ドメインを取得して、自前のサーバ(Linux server、Windows Server)を設置すれば、サーバからDDNSの設定を自動で行うことで、独自ドメインでWEB・アプリケーションサーバを公開できるようになります。自由度が高まり自宅介護IoTを構築できる環境が整います。
また、パルスオキシメータもサーバとbluetoothで接続することで測定データをサーバに保管することで、WEB上からデータ参照できるようになり、データ値によって自動で警告メールを送信することも可能です。
私自身、主要なドメインはvalue domainから取得しています。DDNSは無料で利用可能で設定もスクリプトで簡単に設定できます。
value domainのDDNSの仕様は下記のURLです。(参照は会員ログインが必要です)
https://www.value-domain.com/ddns.php?action=howto
以下のスクリプト(setddns.pl)をCRON(5分毎)に設定して実行すれば、IPアドレスが変化した時に定期起動時に自動設定されます。
setddns.pl
#!/bin/perl
use strict;
#
my $MY_DOMAIN = "example.jp"; #自身のドメイン名
my $MY_PASS = "password"; #ダイナミックDNS機能を利用するドメインのパスワード
my $MY_HOSTNAME = "sample"; #事前にAレコードの登録をしておくことが必要です
my $MY_IPADRESS;
#
my $OUT_FILE = "/tmp/myipaddress";
my $cmd ="/usr/bin/wget --tries=1 --timeout=30 -q -O - https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip";
my $cmd2 ="/usr/bin/wget --tries=1 --timeout=30 -q -O - \"https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$MY_DOMAIN&p=$MY_PASS&h=$MY_HOSTNAME&i=";
### CHECK my IP adress ###
my $result = `$cmd`;
if ($result eq ""){
exit(-1);
}
open(FP,$OUT_FILE);
$MY_IPADRESS = ;
close(FP);
my $mssg;
if($result eq $MY_IPADRESS){
$mssg = time_msg();
print $mssg . " no change IP=$result";
# exit;
}
open(FP,">" . $OUT_FILE) or die("Error");
print FP $result;
### SET my IP adress ###
my $mssg = time_msg();
print $mssg . " access to value-domain\n";
$cmd2 .= $result . '"';
my $rst = `$cmd2`;
my $mssg = time_msg();
$rst =~ s/[\r\n]/,/g;
print "$mssg $rst\IP=$result\n";
sub time_msg{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $timemsg = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,++$mon,$mday,$hour,$min,$sec);
return $timemsg;
}
スクリプト(setddns.pl)で以下の変数を設定してください。
・$MY_DOMAIN に自身のドメイン名
・$MY_PASS にダイナミックDNS機能を利用するドメインのパスワード
・$MY_HOSTNAME にホスト名(ホスト名は事前にAレコードの登録をしておくことが必要です)
value domainのDNSのTTL時間はデフォルトで1,200秒(20分)ですので、DNSの更新時間に最長20分かかります。
DNSの設定ページでTTLは設定可能で更新時間を短くできます。value domainで設定できるTTLの下限は60秒ですが、DNSサーバの負荷を考えて私は180秒に設定しています。
これで自宅の動的IPアドレスが変更になってもタイムラグはありますがWEBサーバやアプリケーションサーバをドメイン名で公開できて、外部から必要な情報をいつでも参照できるようになります。
自宅でサーバを公開したい方はぜひDDNSを使って任意のサービスを公開提供してください。
ドメイン・サーバー同時契約でドメイン更新費用永久無料(年間最大3,858円お得)
是非、お得なこの機会にご利用ください。最新のキャンペーンはこちらから
※ユーザーノートの記事は、弊社サービスをご利用のお客様に執筆いただいております。
医療メーカーで新素材研究開発後、電機メーカーで制御器系システム開発を経てIT系マルチエンジニアをしています。またデザイン思考を実践し、アート思考などのいろんな思考方法に興味があります。