AlexaとRaspberryPiでテレビ消して

テレビもsiriからRaspberryPiを経由し赤外線でコントロールしてたのですが前回のAlexaとRaspberryPiで電気付けての件で調べてるうちにsharp-aquos-remote-controlを発見してしまった。
調べてみるとウチのテレビ(LC-32F5)を含む多くのAQUOSは元々パソコンやスマホからの操作が可能になってるらしい。
LC-40F5/32F5 取扱説明書・付録

sharp-aquos-remote-controlを使おうと思ったのですが、sharp-aquos-remote-controlをインストールしても「Cannot find module ‘sharp-aquos-remote-control’」と言われて動かず、直接参照すると動いたがチューナーに接続すると「ECONNREFUSED」と言われて接続拒否され、モニタに接続すると「An unknown error occurred.」と言われて止まった。
試しに直接AQUOSにsocket接続してみるとすんなり動作したのでPythonでsocket接続するスクリプトを書くことにした。ちなみに、ウチのテレビはモニタとチューナーに分かれてる変則的なテレビだがsocket接続するのはモニター側という事が分かった。

まず準備としてテレビのIPを固定して「AQUOSリモート設定」でリモートを「する」に変更してユーザー名とパスワードとポートを設定する。このあたりはテレビの説明書に書かれてある。
そして、スクリプトを書いていく
$ vi ~/.homebridge/aquos.py

# -*- coding:utf-8 -*-
import socket
import sys
import time

host = '<テレビのIPアドレス>'
port = <テレビで設定したポート番号>
username = '<テレビで設定したユーザー名>'
password = '<テレビで設定したパスワード>'
so = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
so.connect((host, port))
res = so.recv(1024)
so.send(username+'\n')
so.send(password+'\n')
res = so.recv(1024)
args = sys.argv

so.send('POWR?   \n')
time.sleep(1)
res = so.recv(1024).strip()
if pow != "1" and args[1] == "ON":
	so.send('POWR1   \n')
	time.sleep(1)
	res = so.recv(1024)
elif pow == "1" and args[1] == "OFF":
	so.send('POWR0   \n')
	time.sleep(1)
	res = so.recv(1024)

so.close()

そして、動作するか実験
$ python aquos.py OFF

電源のオンとオフを試しましたがオンが出来ませんでした。
(念のためWakeupOnLANで起こせないかも確かめましたが無理でした。)
アプリAQUOSコネクトでも電源を切ると再接続できないのでもしかしたらチューナーとモニターが分かれた独特なテレビなので動作しないのかもしれません。

気を取り直しALEXAからテレビを消せるように設定していく。
Beebotteは前回のを流用するとしてIFTTTを設定していく
「this」に「AmazonAlexa」の「Say a pecific phrase」を選び「What phrase?」に台詞を入れる。今回は「テレビ消して」と入力。
「that」に「Webhook」の「Make a web request」を選ぶ。URL、Method、ContentTypeは前回と同じでBodyを{“data”:[{“action”:”OFF”,”device”:”TV”}]}としておく

前回のmqtt_beebotte.pyの「if __name__ == ‘__main__’:」の上(26行目)あたりに下記を追加
$ vi ~/.homebridge/mqtt_beebotte.py

    elif data["device"] == 'TV':
        if data["action"] == 'ON':
            subprocess.call('python /home/hogehoge/.homebridge/aquos.py ON', shell=True)
        elif data["action"] == 'OFF':
            subprocess.call('python /home/hogehoge/.homebridge/aquos.py OFF', shell=True)

反映させるためサービスを再起動する。
$ sudo systemctl restart alexa.service

色々書いてますが最近は簡単に設定できるスマートコントローラが出てるので普通の人は難易度の高いRaspberryPIに挑戦する必要は無いです。

[参考サイト]
AQUOSをLAN経由で遠隔操作する方法 | 高エネルギー技術研究室
Google Home で AQUOS を動かしてみる

Tags: , , , ,

トラックバック

コメントを書く