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