現: 2020-12-26 (土) 15:07:51 yuji ソース
Line 1: Line 1:
 +* 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
 +
 +うまくテレビが反応した。
  

  • PC/RaspberryPi/WEBリモコン/WEBアクセスでリモコン のバックアップ差分(No. All)
    • 現: 2020-12-26 (土) 15:07:51 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 643, today: 1, yesterday: 0