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);
コメント