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

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


新しくコメントをつける

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

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 741, today: 1, yesterday: 0
Last-modified: 2020-12-26 (Sat) 15:07:51 (JST) (1354d) by yuji