都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

DSC - QX10 の制御するのを C# で書いたことを思い出したので Nature Remo でも同じことをしてみる

 Nature Remo mini を衝動買いました。

Nature Remo mini 家電コントロ-ラ- REMO2W1

Nature Remo mini 家電コントロ-ラ- REMO2W1

 シンプルです。

f:id:koogucc11:20190505202344j:plain
カバー

 シンプルな箱に入っています。

f:id:koogucc11:20190505202400j:plain

 大きさは以下のような感じです。右は AirPods です。

f:id:koogucc11:20190505202444j:plain
AirPods との大きさ比較

 今回の衝動買いの発端は、下記の記事です。DSC - QX10 みたいに Nature Remo を操作してみたいと思ってしまいました。
ryuchan.hatenablog.com

 上記のブログと Nature Remo API を参照しながら C# で Nature Remo を操作したいと思います。DSC - QX10 の操作で使用した下記のソースを参考に、Nature Remo 版へ改変していきます。

static async void DoPost()
{
    // 撮影する場合の JSON フォーマット
    string jsonparams = "{\"method\": \"actTakePicture\"," +
                        "\"params\": []," +
                        "\"id\": 1," +
                        "\"version\": \"1.0\"}";
    // サービスのURL
    string url = "http://10.0.0.1:10000/sony/camera";

    var httpclient = new HttpClient();
    // content の作成
    var jsoncontent = new StringContent(jsonparams, Encoding.UTF8, "application/json");
    httpclient.MaxResponseContentBufferSize = int.MaxValue;
    // POSTする
    var response = await httpclient.PostAsync(url, jsoncontent);
    // 結果の読み込み
    String text = await response.Content.ReadAsStringAsync();
}

 今回制御するのは、DVDデッキです。リモコンは下図の通りです。

f:id:koogucc11:20190506082720j:plain
使用したリモコン

 デバイスを制御するため、device id を取得するために、下記のコードを使用し、Nature Remo にリクエストを送る必要があります。アクセストークンは、ここで取得してください。

static async void DoGet()
{
    string token = "Bearer " + "{アクセストークン}";
    string url = "https://api.nature.global/1/appliances";
    var httpclient = new HttpClient();
    
    httpclient.DefaultRequestHeaders.Add("Authorization", token);

    var response = await httpclient.GetAsync(url);
}

 id が取得できますので、その id を DVD デッキの電源制御に使用します。

f:id:koogucc11:20190506084126p:plain
id の取得結果

 取得した id ( 今回は、e1ac8815-1480-4914-bd77-a42c5037659b )を下記のように指定し、POST リクエスト用にソースを書き換えます。実行し、status code が 200 で返却されたら成功です。HttpRequestMessage, SendAsync を使った方が、GET と POST のコードが綺麗に書けそうですね。

static async void DoPost()
{
    string token = "Bearer " + "{アクセストークン}";
    string url = "https://api.nature.global/1/signals/e1ac8815-1480-4914-bd77-a42c5037659b/send";
    var httpclient = new HttpClient();
    var httpreqmsg = new HttpRequestMessage(HttpMethod.Post, url);

    httpreqmsg.Headers.Add("Authorization", token);

    var response = await httpclient.SendAsync(httpreqmsg);
}

サンプルソースコードをなるべくシンプルにしたいため、ヘッダ情報、その他必要な情報とかきちんと指定していません。本格的に使用する場合は API 仕様をじっくり参照の上、コーディングしてください。私はほとんど見ていないので笑

 制御系のプログラミングは楽しいですね。Nature Remo が家に到着した後に気づいたのですが、第二世代の Nature Remo は、湿度、人感、光度センサーなどが付いているんですね。第二世代を買えばよかった泣。

Nature Remo 第2世代モデル 家電コントロ-ラ- REMO1W2

Nature Remo 第2世代モデル 家電コントロ-ラ- REMO1W2

 Philips Hue の制御とかも楽しそうですね。