はじめに
我が家にも有機ELテレビがやってきました。国産メーカのテレビも、有機ELパネルはほとんどがLG製のパネルを利用しているらしく「同じパネルなら安い方がいいんじゃない?」という事でOLED 55C7Pを購入!
このLG製のテレビ、内部はwebOSというOSで動作していてWeb APIが公開されているんです。そこで、今回はLG製のテレビをNode-redから操作してみたいと思います。
やりたいこと
最終的にやりたいのは、以下のようにAmazon Alexaとスマホを使って、テレビのチャンネルやYoutube動画を切り替える事です。
1-1.(子供が)Amazon Alexaに「テレビをプリキュアにして」という
1-2.(大人が)スマホから指定のYoutube動画のボタンを押す
2.テレビのアプリをYoutubeアプリに切り替え
3.プリキュアの動画を再生
ちなみに、テレビをNode-redから操作するためには、テレビがLANに繋がっていることが前提となりますので、有線かWifiでLANに接続しておきましょう。
実現に向けた連載
やりたいことを実現するために、以下のように少しずつに記事を書いていきます(予定)。
1回目:Node-redからテレビの電源を消す
2回目:Node-redからテレビのチャンネルを変える ←この記事
3回目:Node-redからYoutubeアプリを起動して動画を再生する
4回目:スマホからテレビを操作できるようにする
5回目:Alexaから声でテレビを操作できるようにする
付録:Wake-On-LANでテレビの電源をつける
付録:Gravioで子供用プリキュアボタン
2回目:Node-redからテレビのチャンネルを変える
第1回目では、Node-redにnode-red-contrib-lgtvをインストールし、テレビの電源を消す事をやりました。第2回目では、テレビのチャンネルを変えることをやってみたいと思います。
channelIDの取得設定
Node-redでテレビのチャンネルを変更するためには、webOSの内部で管理されているchannelIDというものを指定して、チャンネルを変える必要があります。そこで、まずはchannelIDを調査する必要があります。
①requestノードの追加
channelIDのリストを取得するために、lgtvのrequestノードをパレットからドラックして追加します。
②requestノードの設定
追加したrequestノードをダブルクリックして設定画面を開き、TV欄に第1回で設定したTVのIPアドレスのものを選択します。最後に「完了」ボタンを押しましょう。
③templateノードの追加1
次にtemplateノードをパレットからドラッグして追加します。
④templateノードの設定1
追加したtemplateノードをダブルクリックして設定画面を開き、以下のように設定して「完了」ボタンを押します。
・名前:チェンネルリスト ※なんでもよい
・設定先:topic
・形式:平文
・構文:なし
・テンプレート:ssap://tv/getChannelList
⑤templateノードの追加2
もう一つtemplateノードをパレットからドラッグして追加します。
⑥templateノードの設定2
追加したtemplateノードをダブルクリックして設定画面を開き、以下のように設定して「完了」ボタンを押します。
・名前:戻り値受け取り ※なんでもよい
・設定先:payload
・形式:平文
・構文:なし
・テンプレート:{}
⑦Debugノードの追加
requestノードで取得したchannelIDのリストを確認するために、Debugノードをパレットからドラッグして追加します。
⑧injectノードの追加とノードの接続
最後にinjectノードを追加し、injectノード→チャンネルリストノード→戻り値受け取りノード→requestノード→Debugノードの順に接続します。
⑨テレビの電源をつける
テレビの電源をこのタイミングでつけておきましょう。
⑩ノードのデプロイ
右上の「デプロイ」ボタンを押して、追加したノードをデプロイしましょう。
デプロイが完了しテレビと接続されると、requestノードの下に「接続済」と表示されます。
channelIDの取得
上で設定したrequestノードを使って、webOS内部で管理しているchannelIDを取得しましょう。
①トリガの実行
injectノードの左側のボタンを押して、ノードを実行しましょう。
②結果の確認
Node-red画面の右上にあるデバック(虫のアイコン)ボタンを押して、結果を確認します。なお、右側の部分を広げると見やすくなります。
③channelIDの確認
デバック画面で「▼」を押して、詳細を確認していきます。最上位のObject内にchannelListという変数があるので、これを見つけてください。
④channelIDの確認2
channelListの中にchannelIDの情報が入っているので探します。channalNameという箇所に普段見慣れているチャンネルの名前が入っているので、この情報を元にChannelIDの情報を探します。
【ご参考】筆者の場合、地デジのchannelIDは以下でした。
名前 | channelID |
---|---|
NHK総合1・東京 | 1_19_11_65535_32736_1024_32736 |
NHKEテレ1東京 | 1_26_21_65535_32737_1032_32737 |
tvk1 | 1_17_31_65535_32375_24632_32375 |
日テレ1 | 1_25_41_65535_32738_1040_32738 |
テレビ朝日 | 1_24_51_65535_32741_1064_32741 |
TBS1 | 1_22_61_65535_32739_1048_32739 |
テレビ東京1 | 1_23_71_65535_32742_1072_32742 |
フジテレビ | 1_21_81_65535_32740_1056_32740 |
チャンネル変更設定
それでは、調査したchannelIDを使って、テレビのチャンネルを変更するノードを作成していきます。
①channelノードの追加
lgtvのパレットから、channelノードをドラッグして追加します。
②channelノードの設定
追加したchannelノードをダブルクリックして設定画面を開き、TV欄に第1回目で設定したテレビのIPアドレスのものを選択します。最後に「完了」ボタンを押します。
③templateノードの追加
パレットからtemplateノードをドラッグして追加します。
④templateノードの設定
追加したtemplateノードをダブルクリックして設定画面を開き、以下のように設定して「完了」ボタンを押します。
・名前:NHK総合1・東京 ※チャンネル名:なんでもよい
・設定先:payload
・形式:平文
・構文:なし
・テンプレート:1_19_11_65535_32736_1024_32736 ※上で調べたchannelID
⑤injectノードの追加とノードの接続
最後にinjectノードを追加し、injectノード→チャンネルノード→channelノードの順に接続します。
⑥ノードのデプロイ
右上の「デプロイ」ボタンを押して、追加したノードをデプロイしましょう。
テスト
それでは、設定したノードを使ってテレビのチャンネルを変えて見ましょう。テレビの電源をつけて、NHK以外のチャンネルに変更しておきましょう。
①トリガのボタンを押す
injectノードの左に付いているボタンを押しましょう!
②テレビがパッツ!
テレビがNHK総合に変わりましたか?これで完了です。
他のチャンネルに変更するノードは、同じように作成してください。
おわりに
今回はNode-redからLG製テレビのチャンネルを変更する事をやってみました。次回は、テレビ以外のアプリを起動して操作してみることをやって見ようと思います。
連載記事
1回目:Node-redからテレビの電源を消す
2回目:Node-redからテレビのチャンネルを変える
3回目:Node-redからYoutubeアプリを起動して動画を再生する ←次はこれ
4回目:スマホからテレビを操作できるようにする
5回目:Alexaから声でテレビを操作できるようにする
付録:Wake-On-LANでテレビの電源をつける
付録:Gravioで子供用プリキュアボタン
関連文書
この記事は以下を参考にさせていただいています。ありがとうございます。
・WebOS TV Standard Web API
・node-red-contrib-lgtv
・npm lgtv2
・GoogleHomeからテレビ(LG製WebOS)をコントロールしてみる
コメント