PHP から Nature Remo へ GET, POST
長年 IrKit を使用しつつ、Nature Remo を購入しようかどうか迷っていたときに、Nature Remo 3rd が出てしまったので購入、PHP からのデータ送受信関数メモ
ローカルは、ほぼ IrKit と同じ方法で送受信ですが、クラウドは予め登録しておいた Appliance + ボタン名 または Signal ID(Appliance カテゴリに属さない場合) を送信することで、クラウド側からIRデータを送るようです
また、クラウド操作に必要な clientkey と deviceid は token に置き換えられ、取得も簡素化されています
- Client-(IRデータ)→ Cloud -(IRデータ)→ IrKit
- Client-(ID)→ Cloud -(IRデータ)→ Nature Remo
Cloud側に IRデータを保持することで、転送量を抑える事ができるのと登録が容易になったわけです
ただ、ローカルとクラウドでIRデータは共用できなく(クラウドはID送信なので)なりました。また、IrKitで作成していた IRデータを(ローカルで)送信しても動作しませんでした(悲)
GET, POST の関数
※curl を予めインストールしておいてください
function execNatureRemo($url, $token = '', $postData = false){ $header = array(); if( $token !== '' ){ // cloud or local array_push($header, "Authorization: Bearer $token"); } // Common option $options = array(); $options[CURLOPT_HEADER] = false; $options[CURLOPT_RETURNTRANSFER] = true; $options[CURLOPT_SSL_VERIFYPEER] = false; if( $postData !== false ){ // POST $options[CURLOPT_CUSTOMREQUEST] = 'POST'; $options[CURLOPT_POST] = true; if( is_array($postData) ){ // cloud array_push($header, 'Content-Type: application/x-www-form-urlencoded'); $options[CURLOPT_POSTFIELDS] = http_build_query($postData); // array(key:value... ) }else{ // local array_push($header, 'X-Requested-With: curl'); $options[CURLOPT_POSTFIELDS] = $postData; // ir json } }else{ // GET $options[CURLOPT_CUSTOMREQUEST] = 'GET'; if( $token !== '' ){ // cloud array_push($header, 'Content-Type: application/json'); }else{ // local array_push($header, 'X-Requested-With: curl'); } } $options[CURLOPT_HTTPHEADER] = $header; // curl $curl = curl_init($url); try{ curl_setopt_array($curl, $options); return curl_exec($curl); } catch (Exception $e) { print($e); }finally{ curl_close($curl); } }
Local API 接続
// get local api(最後に受信したIRデータを受信) $url = 'http://remo.local/messages'; $response = execNatureRemo($url); print_r(json_decode($response, true)); // post local api (上で受信した IRデータ[$response]を送信) $url = 'http://remo.local/messages'; $postData = $response; // '{"freq":0, "data": [0], "format": "string"}'; $response = execNatureRemo($url, '', $postData); // token不要 print_r(json_decode($response, true));
Cloud API 接続
// 接続Token $token = '[YOUR_TOKEN]'; // get cloud api (drvice センサー情報取得) $url = 'https://api.nature.global/1/devices'; $response = execNatureRemo($url, $token); print_r(json_decode($response, true)); // get cloud api (Appliance情報取得) $url = 'https://api.nature.global/1/appliances'; $response = execNatureRemo($url, $token); print_r(json_decode($response, true)); // post cloud api (TVの電源ボタンIRを送信) $url = 'https://api.nature.global/1/appliances/[APPLIANCE_ID]/tv'; $postArray['button'] = 'power'; $response = execNatureRemo($url, $token, $postArray); print_r(json_decode($response, true)); // post cloud api (汎用IR信号の送信) $url = 'https://api.nature.global/1/signals/[type=IRのid]/send'; $postArray = array(); // 空配列 $response = execNatureRemo($url, $token, $postArray); $response_json = json_decode($response, true); print_r($response_json);
コメント