WEBアクセスでリモコン anchor.png

リモコン信号を送受信出来るようになったんで,WEBインターフェースを使ってリモコン信号を送信出来るようにしてみる。

Page Top

apacheを入れる anchor.png

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
Page Top

インターネットからアクセスできるようにする anchor.png

ルータでアドレス変換(静的IPマスカレード)して,Raspberry Pi Zero Wのapacheに接続出来るように設定する。

Page Top

リモコン信号をWEBからアクセスできるようにする anchor.png

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回同じコードを送信するようにしないと,反応しない場合がある。

Page Top

WEBインターフェースを使ってリモコン信号を送信 anchor.png

curlを使ってPOSTでリモコンデータを送信してみる。

$ curl -X POST -H "Content-Type: application/json" -d '{"exp":"TV","message":"電源オン"}' http://xxx.xxx.xxx.xxx:yyyy/remokon.php

うまくテレビが反応した。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 645, today: 1, yesterday: 0
最終更新: 2020-12-26 (土) 15:07:51 (JST) (1216d) by yuji