|
現: 2020-12-26 (土) 16:07:51 yuji |
| + | * WEBアクセスでリモコン [#b5aa493a] |
| + | [[リモコン信号を送受信出来るようになった>../学習リモコンを作る]]んで,WEBインターフェースを使ってリモコン信号を送信出来るようにしてみる。 |
| | | |
| + | ** apacheを入れる [#z86c2a8d] |
| + | HTTPプロトコルを使ってリモコン操作するため,WEBサーバーソフトを使えるようにする。 |
| + | # apt-get install apache2 php7.0 |
| + | として,apacheとphp7(Rasbian StretchだとPHP5はパッケージが無い)をインストールした。 |
| + | |
| + | ''/etc/apache2/apache2.conf''を編集する。 |
| + | <Directory /var/www/> |
| + | : |
| + | Allow from All |
| + | : |
| + | </Directory> |
| + | |
| + | ''/etc/apache2/ports.conf''を編集する。 |
| + | Listen xxxx |
| + | |
| + | <IfModule ssl_module> |
| + | Listen yyyy |
| + | </IfModule> |
| + | |
| + | <IfModule mod_gnutls.c> |
| + | Listen yyyyy |
| + | </IfModule> |
| + | |
| + | と,使用するポートを変更した。 |
| + | |
| + | apacheを再起動する。 |
| + | # systemctl status apache2.service |
| + | |
| + | ** インターネットからアクセスできるようにする [#qf966b6f] |
| + | ルータでアドレス変換(静的IPマスカレード)して,Raspberry Pi Zero Wのapacheに接続出来るように設定する。 |
| + | |
| + | ** リモコン信号をWEBからアクセスできるようにする [#t20f9983] |
| + | POSTリクエストからリモコン送信する内容を取り出して,リモコン信号を送信するようにしてみる。~ |
| + | |
| + | POSTリクエストからリモコン内容を取り出して,送信するコマンドを作る''remokon.php''を作成。~ |
| + | |
| + | 後で[[IFTTT>https://ifttt.com/]]を使ってGoogle Home miniから使えるようにしたいので,いくつかの言葉を入れている。 |
| + | |
| + | ''remokon.php'' |
| + | <?php |
| + | include (dirname(__FILE__)."/controller.php"); |
| + | |
| + | $json_string = file_get_contents('php://input'); |
| + | //$filename = "input.txt"; |
| + | //file_put_contents($filename, $json_string, FILE_APPEND); |
| + | |
| + | $json = json_decode($json_string); |
| + | $exp = $json->{"exp"}; |
| + | $message_tmp = $json->{"message"}; |
| + | $message = str_replace(array(" ", " "), "", $message_tmp); |
| + | |
| + | //shell_exec("echo $exp $message > test1.txt"); |
| + | if ($exp == 'TV' || $exp == 'AIRCON') { |
| + | switch ($message) { |
| + | case 'オン': |
| + | case '電源オン': |
| + | case 'の電源オン': |
| + | case 'をオン': |
| + | case 'オフ': |
| + | case '電源オフ': |
| + | case 'の電源オフ': |
| + | case 'つけて': |
| + | case 'をオフ': |
| + | case 'をつける': |
| + | case 'をつけて': |
| + | case 'を消す': |
| + | case 'を消して': |
| + | case '消して': |
| + | case '音': |
| + | $mes = "power"; |
| + | break; |
| + | |
| + | case 'ボリュームアップ': |
| + | case '音アップ': |
| + | case '音上げる': |
| + | case '音量アップ': |
| + | case 'の音量アップ': |
| + | case '音上げて': |
| + | case 'の音上げて': |
| + | $mes = 'volup'; |
| + | break; |
| + | |
| + | case 'ボリュームダウン': |
| + | case 'ボリューム ダウン': |
| + | case '音ダウン': |
| + | case '音下げる': |
| + | case '音量ダウン': |
| + | case 'の音量ダウン': |
| + | case '音下げて': |
| + | case 'の音下げて': |
| + | $mes = 'voldown'; |
| + | break; |
| + | |
| + | case 'チャンネルアップ': |
| + | case 'チャンネル進める': |
| + | $mes = 'chup'; |
| + | break; |
| + | |
| + | case 'チャンネルダウン': |
| + | case 'チャンネル戻す': |
| + | $mes = 'chdown'; |
| + | break; |
| + | |
| + | case 'いち': |
| + | case 'イチ': |
| + | case '1': |
| + | $mes = '1'; |
| + | break; |
| + | |
| + | case 'に': |
| + | case 'ニ': |
| + | case '2': |
| + | $mes = '2'; |
| + | break; |
| + | |
| + | case 'さん': |
| + | case 'サン': |
| + | case '3': |
| + | $mes = '3'; |
| + | break; |
| + | |
| + | case 'よん': |
| + | case 'ヨン': |
| + | case '4': |
| + | $mes = '4'; |
| + | break; |
| + | |
| + | case 'ご': |
| + | case 'ゴ': |
| + | case '5': |
| + | $mes = '5'; |
| + | break; |
| + | |
| + | case 'ろく': |
| + | case 'ロク': |
| + | case '6': |
| + | $mes = '6'; |
| + | break; |
| + | |
| + | case 'なな': |
| + | case 'ナナ': |
| + | case '7': |
| + | $mes = '7'; |
| + | break; |
| + | |
| + | case 'はち': |
| + | case 'ハチ': |
| + | case '8': |
| + | $mes = '8'; |
| + | break; |
| + | |
| + | case 'きゅう': |
| + | case 'キュウ': |
| + | case '9': |
| + | $mes = '9'; |
| + | break; |
| + | |
| + | case 'じゅう': |
| + | case 'ジュウ': |
| + | case '10': |
| + | $mes = '10'; |
| + | break; |
| + | |
| + | case 'じゅういち': |
| + | case 'ジュウイチ': |
| + | case '11': |
| + | $mes = '11'; |
| + | break; |
| + | |
| + | case 'じゅうに': |
| + | case 'ジュウニ': |
| + | case '12': |
| + | $mes = '12'; |
| + | break; |
| + | |
| + | case 'びーえすいち': |
| + | case 'BS 1': |
| + | $mes = 'bs1'; |
| + | break; |
| + | |
| + | case 'びーえすに': |
| + | case 'BS 2': |
| + | $mes = 'bs2'; |
| + | break; |
| + | |
| + | case 'びーえすさん': |
| + | case 'BS 3': |
| + | $mes = 'bs3'; |
| + | break; |
| + | |
| + | case 'びーえすよん': |
| + | case 'BS 4': |
| + | $mes = 'bs4'; |
| + | break; |
| + | |
| + | case 'びーえすご': |
| + | case 'BS 5': |
| + | $mes = 'bs5'; |
| + | break; |
| + | |
| + | case 'びーえすろく': |
| + | case 'BS 6': |
| + | $mes = 'bs6'; |
| + | break; |
| + | |
| + | case 'びーえすなな': |
| + | case 'BS 7': |
| + | $mes = 'bs7'; |
| + | break; |
| + | |
| + | case 'びーえすはち': |
| + | case 'BS 8': |
| + | $mes = 'bs8'; |
| + | break; |
| + | |
| + | case 'びーえすきゅう': |
| + | case 'BS 9': |
| + | $mes = 'bs9'; |
| + | break; |
| + | |
| + | case 'びーえすじゅう': |
| + | case 'BS 10': |
| + | $mes = 'bs10'; |
| + | break; |
| + | |
| + | case 'びーえすじゅういち': |
| + | case 'BS 11': |
| + | $mes = 'bs11'; |
| + | break; |
| + | |
| + | case 'びーえすじゅうに': |
| + | case 'BS 12': |
| + | $mes = 'bs12'; |
| + | break; |
| + | |
| + | case 'にゅうりょくぷらす': |
| + | case 'ニュウリョクプラス': |
| + | case '入力進む': |
| + | case '入力プラス': |
| + | case '入力+': |
| + | case '入力': |
| + | case 'INPUT+': |
| + | $mes = 'input+'; |
| + | break; |
| + | |
| + | case 'にゅうりょくまいなす': |
| + | case 'ニュウリョクマイナス': |
| + | case '入力マイナス': |
| + | case '入力戻す': |
| + | case '入力-': |
| + | case 'INPUT-': |
| + | $mes = 'input-'; |
| + | break; |
| + | |
| + | case 'えんたー': |
| + | case 'エンター': |
| + | $mes = 'enter'; |
| + | break; |
| + | |
| + | case 'もどる': |
| + | case '戻る': |
| + | $mes = 'return'; |
| + | break; |
| + | |
| + | case 'いぐじっと': |
| + | case 'イグジット': |
| + | case '終了': |
| + | $mes = 'exit'; |
| + | break; |
| + | |
| + | case 'みぎ': |
| + | case '右': |
| + | $mes = 'right'; |
| + | break; |
| + | |
| + | case 'ひだり': |
| + | case '左': |
| + | $mes = 'leftt'; |
| + | break; |
| + | |
| + | case 'うえ': |
| + | case '上': |
| + | case 'UP': |
| + | $mes = 'up'; |
| + | break; |
| + | |
| + | case 'した': |
| + | case '下': |
| + | case 'DOWN': |
| + | $mes = 'down'; |
| + | break; |
| + | |
| + | case 'さいせい': |
| + | case '再生': |
| + | case 'を再生': |
| + | case 'PLAY': |
| + | $mes = 'play'; |
| + | break; |
| + | |
| + | case 'ていし': |
| + | case '停止': |
| + | case 'を停止': |
| + | case 'STOP': |
| + | $mes = 'stop'; |
| + | break; |
| + | |
| + | case 'まきもどし': |
| + | case '巻き戻し': |
| + | $mes = 'back'; |
| + | break; |
| + | |
| + | case 'はやおくり': |
| + | case '早送り': |
| + | $mes = 'forwd'; |
| + | break; |
| + | |
| + | case 'みぎすきっぷ': |
| + | case '右スキップ': |
| + | $mes = 'rskip'; |
| + | break; |
| + | |
| + | case 'ひだりすきっぷ': |
| + | case '左スキップ': |
| + | $mes = 'lskip'; |
| + | break; |
| + | |
| + | case 'みゅーと': |
| + | case 'ミュート': |
| + | case '消音': |
| + | $mes = 'mute'; |
| + | break; |
| + | |
| + | case 'ひょうじ': |
| + | case '表示': |
| + | $mes = 'display'; |
| + | break; |
| + | |
| + | case 'くいっく': |
| + | case 'クイック': |
| + | $mes = 'quick'; |
| + | break; |
| + | |
| + | case 'ばんぐみひょう': |
| + | case '番組表': |
| + | case '番組': |
| + | $mes = 'epg'; |
| + | break; |
| + | |
| + | case 'れぐざりんく': |
| + | case 'レグザリンク': |
| + | case 'リンク': |
| + | $mes = 'link'; |
| + | break; |
| + | |
| + | case '空清': |
| + | case 'クウセイ': |
| + | $mes = 'kuusei'; |
| + | break; |
| + | |
| + | case '除湿': |
| + | $mes = 'dry'; |
| + | break; |
| + | |
| + | case '運転切替': |
| + | case 'モード': |
| + | $mes = 'mode'; |
| + | break; |
| + | |
| + | default: |
| + | $mes = 'none'; |
| + | break; |
| + | } |
| + | } |
| + | if ($exp == 'PanaFan') { |
| + | switch ($message) { |
| + | case 'オン': |
| + | case '電源オン': |
| + | case 'の電源オン': |
| + | case 'をオン': |
| + | case 'オフ': |
| + | case '電源オフ': |
| + | case 'の電源オフ': |
| + | case 'つけて': |
| + | case 'をオフ': |
| + | case 'をつける': |
| + | case 'をつけて': |
| + | case 'を消す': |
| + | case 'を消して': |
| + | case '消して': |
| + | case 'けして': |
| + | case '音': |
| + | $mes = 'power'; |
| + | break; |
| + | |
| + | case 'アップ': |
| + | case '上げる': |
| + | case '上げて': |
| + | case 'あげて': |
| + | case 'を上げて': |
| + | case '風量アップ': |
| + | case '風量上げて': |
| + | case '強く': |
| + | case 'を強く': |
| + | case 'を強くして': |
| + | $mes = 'plus'; |
| + | break; |
| + | |
| + | case 'ダウン': |
| + | case '下げる': |
| + | case '下げて': |
| + | case 'さげる': |
| + | case 'さげて': |
| + | case 'を下げて': |
| + | case '風量ダウン': |
| + | case '風量下げて': |
| + | case '弱く': |
| + | case 'を弱く': |
| + | case 'を弱くして': |
| + | $mes = 'minus'; |
| + | break; |
| + | |
| + | case 'ナノイ': |
| + | case 'ナノイー': |
| + | case 'なのい': |
| + | $mes = 'nanoi'; |
| + | break; |
| + | |
| + | case 'ゆらぎ': |
| + | case 'ユラギ': |
| + | $mes = 'yuragi'; |
| + | break; |
| + | |
| + | case '縦': |
| + | case 'たて': |
| + | case 'タテ': |
| + | case '縦振り': |
| + | case '縦フリ': |
| + | case 'タテフリ': |
| + | $mes = 'tate'; |
| + | break; |
| + | |
| + | case '横': |
| + | case 'よこ': |
| + | case 'ヨコ': |
| + | case '横振り': |
| + | case '横フリ': |
| + | case 'ヨコフリ': |
| + | $mes = 'yoko'; |
| + | break; |
| + | |
| + | case 'タイマーオン': |
| + | $mes = 'timeron'; |
| + | break; |
| + | |
| + | case 'タイマーオフ': |
| + | $mes = 'timeroff'; |
| + | break; |
| + | |
| + | case '控えめ': |
| + | case 'ヒカエメ': |
| + | $mes = 'hikaeme'; |
| + | break; |
| + | |
| + | case 'センサー': |
| + | case 'せんさー': |
| + | case 'sensor': |
| + | $mes = 'sensor'; |
| + | break; |
| + | |
| + | default: |
| + | $mes = 'none'; |
| + | break; |
| + | } |
| + | } |
| + | if ($exp == 'SPEECH') { |
| + | $mes = $message; |
| + | } |
| + | |
| + | //shell_exec("echo $exp $mes > test.txt"); |
| + | $controller = new Controller(); |
| + | $controller->sendMessage($exp,$mes); |
| + | ?> |
| + | |
| + | ''controller.php'' |
| + | <?php |
| + | class Controller{ |
| + | public function sendMessage($exp,$message){ |
| + | switch ($exp) { |
| + | case 'TV': |
| + | case 'AIRCON': |
| + | case 'PanaFan': |
| + | $command = "irsend -#3 SEND_ONCE " . $exp . " " . $message; |
| + | shell_exec($command); |
| + | break; |
| + | default: |
| + | break; |
| + | } |
| + | } |
| + | } |
| + | ?> |
| + | 実際には,トークンなんかをやり取りした方が良いかも。 |
| + | //リモコンには必要ないが,リモコン以外に,部屋の温度・湿度・気圧をGoogle Home miniで喋らすようにしている。 |
| + | |
| + | Kernel 4.19以降を使っている場合は,irsendコマンドに-#3をつけて3回同じコードを送信するようにしないと,反応しない場合がある。 |
| + | |
| + | ** WEBインターフェースを使ってリモコン信号を送信 [#o996d6c8] |
| + | curlを使ってPOSTでリモコンデータを送信してみる。 |
| + | $ curl -X POST -H "Content-Type: application/json" -d '{"exp":"TV","message":"電源オン"}' http://xxx.xxx.xxx.xxx:yyyy/remokon.php |
| + | |
| + | うまくテレビが反応した。 |