<GravioテクニカルTIPS> エッジ処理でインターネット接続不要!オフィスに設置されている液晶テレビの電源管理をスケジューリングし自動化してみる ―ソニー製TV(Braviaシリーズ)をGravioで自在に電源コントロール―
こんにちは、Gravio事業部のタルミです。最近良く見かける、オフィスロビーなどに設置されているサイネージ用途の液晶TVですが、電源管理ってみなさんどのように行っていますか?こちら、意外と受付担当者や総務の方、もしくは朝イチで来た人が点けたり、最終退出者が消したり、などというマニュアルでの作業だったりしませんか?
こういった「人の手」による仕事って、働き方そのものがリモート主体にシフトしている今のような状況だと、「あれ、だれが管理していたんだっけ?もしかしてつけっぱなし?」とか、「わざわざTV点けるためだけに出社するのってどうなの?」なんて話になりがちです。
また、社員の出社状況が普段とは変わりますので、慣れてない人が電源管理をすると、「リモコンどこにあるの?」とか、「あ、一個消し忘れて退出しちゃった」などなど。わからない人が操作すると、往々にして発生しがちな事象です。電源プラグを物理的に抜いてしまったりとか。笑えませんが、実際にある話です。
こういったTVなどの電化製品(ファシリティ)をすべて自動化するにはBEMS/HEMSを導入するのが一般的ですが、当然コストがかかります。で、できるものから、自動で動かせるようにしていこう、ということで、今回はTVの電源制御を行いたいと思います。
そこで、電源制御に、どのような手法があるか、いくつか考えてみました。
やりたいこと
スケジュール+タイマーで電源管理。月曜から金曜の特定時間帯のみONし、他の時間はOFFする、といったシンプルな電源管理をまずは行なう。
やりたいことは明確なので、実現する手法をいくつか考えてみましょう。
- タイマー付きの電源を使って、AC電源そのものの供給を管理する
- タイマーやネットと繋がる赤外線リモコンを駆動し、電源ON/OFF信号を発出する
- ネットワークを経由して電源ON/OFFの通信をTVに対して行なう
手法の考察
1は一番簡単(店舗のタイマー照明などと一緒)ですが、コンセントの抜き差しで電源管理をしているようなものですので、電気回路的な負担は通常より高め(突入・瞬断など)です。
また、電源がOFFするときは確実に切れます(TVへの電源供給が物理的に停止する)が、再度電源ONをした際に、TVが信号を映し出すONの動作になるかというと、その「ふるまい」はTVメーカーによって違います。
多くは「スタンバイ」に戻るだけ、ではないでしょうか。
停電復旧後にTVがどうなるか、というシーンを思い浮かべてください。
今回の場合、AC電源再ON(復活)時にTVが点き、入力されている信号を映し出すことができてないといけないわけですから、これだと問題があります。
スタンバイに戻ってしまう場合、リモコンを使って再度電源ONをTV側で行わないとならないようでは、意味がありません。
逆に人がいなくても○○時には必ず電源供給を開始し、△△時には止める、というような場合にはシンプルで良い仕組みです。
次の2ですが、スマート家電としてマルチリモコンやIoT対応リモコンなど、既に様々なものが出荷されており、その「簡単さ」では1の次に来るものです。
赤外線リモコンの汎用性を活かし、エアコン、ステレオ、照明などが概ね操作できるという汎用性もあります。
しかしながら、TVで問題となるのは、「リモコンの信号」がONもOFFも一緒のケースがほとんどだ、ということです。
みなさんがお使いのTVリモコンに電源ボタンはいくつ付いていますか?おそらく1つだと思います。
リモコンは一般的に赤外線通信を利用するため、当然ですが設置位置や障害物などの影響を受けます。上記のIoT対応リモコンなども、設置位置に苦労するケースが多いようです(動作の確実さだけでなく、外観・美観的な問題からも)。
また、送信信号が確実に動作したかしないかが「フィードバック」として戻ってくるタイプなら良いのですが、普通のリモコンは信号を「送るだけ」ですから、もしリモコンの信号がキチンと伝わってなければ、次から意図とは逆の動作をしてしまう可能性があります。オンしたつもりがオフになってしまった、という反転現象です。
もちろん、人が操作する場合は、TVの電源ON/OFFを見ながらリモコンを操作するので、問題が発生しにくいのです。目的の操作が完了するまでリモコンを操作すれば良いですからね。ただ、自動で電源管理となると、そうはいきません(もちろん、無理をすれば、TVのパイロットランプや画面の明るさを検知し、暗くなるまでリモコンから信号を送出させる、という技もありますが、かなり複雑ですよね)。
また、電源ON,OFFの赤外線コードを実は別々に用意している会社さんもあります。これなら反転現象は回避できるのですが、送出する赤外線コードを理解して、自作の赤外線リモコンから送らせる、という「ハンダゴテ」と「プログラミング」の世界になってしまいますから、こちらもかなり複雑です。
そこで、考えるのは3です。
要は、TV側のAPIを使ってあげる、ということになりますが、これ、凄く奥が深いのです。市場には様々なTVメーカーが製品を供給していますが、ことAPIに関する情報の開示においては、メーカーごとの差がものすごくあります。導入の際には今後こういった点の考慮(管理、運用におけるネットワークへの接続性)も必要になるでしょうね。
ネットワークを利用して接続することで、ON,OFFのみならず、HDMI入力の変更、音量の調整など、様々なコントロールが安定して可能です。もちろんリモコンでの操作のように、障害物などに邪魔されることもありません。
今回コントロールするTVはソニー製!
幸いにもAPI情報やIPコントロール情報が非常に豊富なSONY社製のTVを弊社では利用しておりますので、非常に助かりました!
このあたりにメーカーさんごとの個性や考え方がはっきりと出はじめている気がします。ちなみに、オフィスに設置してあるのは3年前ぐらいのAndroid TV(SONY KJ-X8500D)で、自宅寝室で利用しているのは5年前くらいのTV(非Android TV、KJ-32W700C)です。どちらでも下記の手法でコントロールできましたので、ぜひトライしてみてください。
他メーカーの製品でも、おそらくAPIが開示されているものであれば、今回の内容を参考にして接続できるものはあるかと思います。
作業全体の流れ
- TVを「ネットワーク経由」でコントロールできるかを確認する
- コントロールするためのシェルスクリプトを記述する
- Gravioから2で作成したシェルスクリプトを起動する(アクション作成)
- 3で作成したアクションにGravio上のトリガー(タイマー)を連動させる
これが大まかな流れです。TVのIPコントロールに関してはQiitaなどに情報が多く掲載されていますので、うまく先人の知恵を使って構築をしていきたいと思います!
(実はこのあたりのIPコントロールに関する情報ですが、正直、海外の方が充実しています。GitHubなどにも多数情報ありますので、英語が苦手でなければそちらもお勧めです)
さっそく作りましょう
1. TVのネットワーク経由でのコントロール
TV側が“ネットワークからの接続で動く”ように設定する作業が必要になります。
こちらにほぼ完璧な情報(メーカーさん謹製)が掲載されています。
なお、対象製品に「法人向けBravia」と記載されていますが、今回は民生用のBraviaをコントロールします。従い、利用に関しては各自の判断で(メーカーさん免責)お願いします。
ポイントとしては、TVのIPアドレスが必要になりますので、事前に確認しておくことと(TV内「ネットワーク接続状態」からIPアドレスが確認できます)、TV側の設定でリモートコントロールを受けられるようにしておくこと。
「ホームネットワーク」の中にあるIPコントロールで設定できます。この中には認証に関する設定ができます。
ここで、Normaland Preshared Key(暗号鍵)に設定をすることが必要です。SONYさんのサイトではPSKとして”1234“を使っていますので、今回は準拠しました。セキュリティ性を求める場合はもう少し長く複雑な暗号鍵を事前設定してください。
あと、簡単IPコントロールをONにしておいてください。
最後に、ソニーさんが用意されている(上記サイトで入手できます)Webアプリのサンプル(displaycontrol.html)で電源コントロールのテストを実行し、操作してみてください。
これできちんと電源ON/OFFができれば、1の作業は終了です。
2. コントロールするためのシェルスクリプトを記述する
私はMac環境でGravioを使っていますので、今回はcurlを使います。curlはMacで標準サポートされているので、インストールの必要はないはずです。また、Windowsでも最近はLinux系のサポートが充実していますので、もちろんバージョンによりますが、使える場合も多いでしょう。入ってないようでしたら、インストールをして使えるようにして頂ければよいかと思います。
ちなみに、ONするためのスクリプトですが、このようになります。
1行目、HTTPのURLに記載しているアドレス(xxx.xxx.xxx.xxx)はTVのアドレスを、
2行目のPSK鍵に関しては、事前に設定したもの(今回は1234)を入れてください。
curl -X POST 'http://xxx.xxx.xxx.xxx/sony/system' \
-H'X-Auth-PSK: 1234' \
-H'Content-Type: application/json; charset=UTF-8' \
--data-binary'{"method":"setPowerStatus","version":"1.0","id":1,"params":[{"status":true}]}'
次に、このスクリプトを走らせてみます。ファイル名はわかりやすくしておくと良いでしょう。今回は tv_on.sh としました。
こちらのスクリプトファイルをコマンドラインから実行するのですが、実行権限を付けておくと良いですね。
ファイルを保存しているディレクトリに移動(cd)し、
sudo chmod +x tv_on.sh
こちらを実行しておきます。
どうでしょうか?コマンドラインからTVの電源ONが実行できましたか?
こちらがうまくできているのであれば、同様にTV OFFのスクリプトを書いておきます。
curl-X POST 'http://xxx.xxx.xxx.xxx/sony/system' \
-H 'X-Auth-PSK: 1234' \
-H 'Content-Type: application/json;charset=UTF-8' \
--data-binary'{"method":"setPowerStatus","version":"1.0","id":1,"params":[{"status":false}]}'
このスクリプトにも名前を付けておきます。tv_off.sh などで良いでしょう。
スクリプトファイルを作成したら、同じく実行権限を付けて、終了です。
sudo chmod +x tv_off.sh
実行の確認は、上記のシェルスクリプトが置かれているディレクトリで
./tv_on.sh
./tv_off.sh
をターミナルから入力することで確認できます。
3. Gravioで2のスクリプトを実行するためのアクションを作る
Runscript というアクションがありますので、こちらを使います。
こちらを利用すると、作成したシェルスクリプトをGravio上に展開できるようになります。
作成したファイルをアップロードすることで、Gravio HubKit内にスクリプトが保存されます。
重要なポイント
先ほど作成した、これらの.shスクリプトをGravioのRunscriptアクションでアップロードしただけでは、スクリプトが実行されません。
アップロード先のフォルダ内のスクリプトファイルの属性を変更し、実行できるようにしてあげないとなりません(ここがひと手間お願いするところです)。
通常ですと、
/Library/Application\SUPPORT/Gravio/action/scripts/
にアップロードしたスクリプトが格納されます。Mac上のターミナルを利用して、
cd /Library/Application\SUPPORT/Gravio/action/scripts/
当該のディレクトリにたどり着いたら、
sudo chmod 755 tv_on.sh
sudo chmod 755 tv_off.sh
と入力し、パスワードを入力して属性を変更します。
もちろん
sudo chmod +x tv_on.sh
でもOKですね。
これでそれぞれのスクリプトがGravioのアクションとして実行可能となりました。
ここまで出来たら、作ったscriptを走らせてみましょう。
いつもどおり、アクション作成画面の右上の▶ボタンですね。
Gravio側からTVのON/OFFが実行できたと思います。
ここまでがスクリプトの作成、及び実行の方法の説明となります。
4. 最後に、Gravioでタイマートリガーを設定します。
平日の9時にON、18時にOFF、それぞれタイマートリガーを作成し、それぞれに電源ONのアクション、電源OFFのアクションを紐付けます。
以上で、決められた時間にTVの電源が入り、決められた時間にTVの電源がOFFになる仕組みが作成できました。
一口メモ
2. で作成したシェルスクリプトの中身を変えることで、音量の調整や、HDMI信号の切り替えなどが可能です。
たとえば、常に動作しているHDMIメディアプレイヤーなどでムービーやスライドを流しているようであれば、電源ON後に入力信号を切り替えれば、そのソースが選択され出力されます。不用意にチャンネルを変更したり、入力を変更したとしても、決まったソースを流したり、音量の設定をあらかじめ決定したボリュームで流す、などが可能となります。
また、同様にIPアドレスとAPIを持つ電化製品に関してもコントロールができるものがありますので、皆様、ぜひトライしてみてください。
弊社ですとPhilips Hue/IKEA TRADFRIなどとの連動を行っております。TVのOFFと合わせて照明を消灯したり、減灯したり、ということが簡単に可能です。
あわせて、トリガーをタイマーからセンサーにすることも検討できます。
人感センサーや扉の開閉センサーと連動させて、TVのHDMI入力を来客用のコンテンツが流れているチャンネルに切り替えるなど。メディアプレイヤーを複数用意し、弊社が誇る顔認証システムと連携すれば、性別、年齢層に応じてそれぞれのメディアプレイヤーに用意してあるコンテンツをHDMI入力を変えることで表示するようなことも可能でしょう。
さいごに
本システムの魅力は、エッジ内=ローカルで動作が行えることです。
TVの電源管理のためだけにクラウドの契約をしたり、インターネット通信を用意しなければならない、というのはIoT的には「ある意味正しい回答」なのですが、実際には外部への接続がままならなかったり(セキュリティやコスト面)するケースも多いように感じています。
そのような中でも簡単に利用できる省力化・自動化の手段となりうるGravioを是非ご検討ください。