リモコン信号を送受信出来るようになったんで,WEBインターフェースを使ってリモコン信号を送信出来るようにしてみる。
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
POSTリクエストからリモコン送信する内容を取り出して,リモコン信号を送信するようにしてみる。
POSTリクエストからリモコン内容を取り出して,送信するコマンドを作るremokon.phpを作成。
後でIFTTTを使って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; } } } ?>
実際には,トークンなんかをやり取りした方が良いかも。
Kernel 4.19以降を使っている場合は,irsendコマンドに-#3をつけて3回同じコードを送信するようにしないと,反応しない場合がある。
新しくコメントをつける