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 を予めインストールしておいてください
  1. function execNatureRemo($url$token = ''$postData = false){  
  2.     $header = array();  
  3.   
  4.     if$token !== '' ){ // cloud or local  
  5.         array_push($header"Authorization: Bearer $token");  
  6.     }  
  7.   
  8.     // Common option  
  9.     $options = array();  
  10.     $options[CURLOPT_HEADER] = false;  
  11.     $options[CURLOPT_RETURNTRANSFER] = true;  
  12.     $options[CURLOPT_SSL_VERIFYPEER] = false;  
  13.   
  14.     if$postData !== false ){  
  15.         // POST  
  16.         $options[CURLOPT_CUSTOMREQUEST] = 'POST';  
  17.         $options[CURLOPT_POST] = true;  
  18.   
  19.         ifis_array($postData) ){  
  20.             // cloud  
  21.             array_push($header'Content-Type: application/x-www-form-urlencoded');  
  22.             $options[CURLOPT_POSTFIELDS] = http_build_query($postData); // array(key:value... )  
  23.         }else{  
  24.             // local  
  25.             array_push($header'X-Requested-With: curl');  
  26.             $options[CURLOPT_POSTFIELDS] = $postData// ir json  
  27.         }  
  28.     }else{  
  29.         // GET  
  30.         $options[CURLOPT_CUSTOMREQUEST] = 'GET';  
  31.   
  32.         if$token !== '' ){  
  33.             // cloud  
  34.             array_push($header'Content-Type: application/json');  
  35.         }else{  
  36.             // local  
  37.             array_push($header'X-Requested-With: curl');  
  38.         }  
  39.     }  
  40.     $options[CURLOPT_HTTPHEADER] = $header;  
  41.   
  42.     // curl  
  43.     $curl = curl_init($url);  
  44.     try{  
  45.         curl_setopt_array($curl$options);  
  46.         return curl_exec($curl);  
  47.     } catch (Exception $e) {  
  48.         print($e);  
  49.     }finally{  
  50.         curl_close($curl);  
  51.     }  
  52. }  
Local API 接続
  1. // get local api(最後に受信したIRデータを受信)  
  2. $url = 'http://remo.local/messages';  
  3. $response = execNatureRemo($url);  
  4. print_r(json_decode($response, true));  
  5.   
  6.   
  7. // post local api (上で受信した IRデータ[$response]を送信)  
  8. $url = 'http://remo.local/messages';  
  9. $postData = $response// '{"freq":0, "data": [0], "format": "string"}';  
  10.   
  11. $response = execNatureRemo($url''$postData); // token不要  
  12. print_r(json_decode($response, true));  
Cloud API 接続
  1. // 接続Token  
  2. $token = '[YOUR_TOKEN]';  
  3.   
  4. // get cloud api (drvice センサー情報取得)  
  5. $url = 'https://api.nature.global/1/devices';  
  6.   
  7. $response = execNatureRemo($url$token);  
  8. print_r(json_decode($response, true));  
  9.   
  10.   
  11. // get cloud api (Appliance情報取得)  
  12. $url = 'https://api.nature.global/1/appliances';  
  13.   
  14. $response = execNatureRemo($url$token);  
  15. print_r(json_decode($response, true));  
  16.   
  17.   
  18. // post cloud api (TVの電源ボタンIRを送信)  
  19. $url = 'https://api.nature.global/1/appliances/[APPLIANCE_ID]/tv';  
  20. $postArray['button'] = 'power';  
  21.   
  22. $response = execNatureRemo($url$token$postArray);  
  23. print_r(json_decode($response, true));  
  24.   
  25.   
  26. // post cloud api (汎用IR信号の送信)  
  27. $url = 'https://api.nature.global/1/signals/[type=IRのid]/send';  
  28. $postArray = array(); // 空配列  
  29.     
  30. $response = execNatureRemo($url$token$postArray);  
  31. $response_json = json_decode($response, true);  
  32. print_r($response_json);  

コメント