NatureRemoで家の温湿度を集める(ついでにLINEに通知する)


この記事はFujitsu Advent Calendar 2018 21日目の記事です。

※この記事に描かれていることは個人の見解であり、所属する組織の公式見解ではありません。
個人的な活動の経験から得た知見の共有を目的としています。

Nature Remoとは

https://nature.global/
テレビや照明など赤外線で通信できる家電をAPI経由で操作できるようになるデバイスです。これをスマートスピーカーと連携することで音声で家電を制御することができるようになります。
筆者の家では、就寝前「ねえGoogle 闇と共に眠れ」と呟くとGoogle Homeが「この世を終焉へといざないます」と不穏なことを呟き全ての照明がOFFになるよう設計されています。

また、Nature Remoは家電を制御できるだけでなく、温湿度センサが搭載されておりこのデータをAPI経由で取得することが可能です。今回はそのAPIを使えるようにするまでの流れをまとめます。

ログイン

https://home.nature.global に行きLoginボタンを押す

メールアドレスを入力しログインする。

このアドレスはNatureRemoを登録した時のメールアドレスを入力してください。

許可する

歓迎されるのでGo

一番下にある「Generate access token」をクリック

今まで使ったアクセストークンが表になっていますが、一番下にスクロールするとこのアイコンがあります。

アクセストークンが払い出される

「Copy」を押してアクセストークンを取得してください。このアクセストークンは決して人に伝えないようにしてください。(誰でも家電制御できるようになってしまいます)

Nature Remoの公開APIについて

インターネット向けに公開しているAPIと、ローカルネットワーク向けに公開している閉じたAPIと2種類あります。

どちらもAPIがswaggerで定義されていますが、そのままでは使えません。
具体的にはアクセストークンを含んだ以下のヘッダを追加する必要があります。(OAuth2)

"Authorization: Bearer <取得したアクセストークン>" 

今回はインターネット向けに公開しているAPIで温湿度の取得を行います。
(ローカルネットワーク向け、色々オプション工夫してみましたが全部Bad Requestになって取れませんでした…誰かやり方教えて欲しい...TpT)

curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json"
 -H "Authorization: Bearer <取得したアクセストークン>" | jq .

結果(一部別の文字列に置き換えて隠しています)

json
[
  {
    "name": "Living",
    "id": "xxx",
    "created_at": "2018-10-23T15:05:51Z",
    "updated_at": "2018-12-21T13:53:49Z",
    "mac_address": "xx:xx:xx:xx:xx:xx",
    "serial_number": "010000000xxxxxxx",
    "firmware_version": "Remo/x.x.xx-xxxxxxxxx",
    "temperature_offset": 0,
    "humidity_offset": 0,
    "users": [
      {
        "id": "UUID",
        "nickname": "なかじま",
        "superuser": true
      }
    ],
    "newest_events": {
      "hu": {
        "val": 50,
        "created_at": "2018-12-21T14:50:22Z"
      },
      "il": {
        "val": 123.4,
        "created_at": "2018-12-21T14:28:09Z"
      },
      "te": {
        "val": 25.79,
        "created_at": "2018-12-21T14:23:40Z"
      }
    }
  }
]

newest_eventsに温度(te)、湿度(hu)と明るさ(il)の情報が入っているのが分かります。
jqで以下のようにすれば値のみ取得確認できます。

 curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json"
 -H "Authorization: Bearer <取得したアクセストークン>" | jq '.hu.val, .il.val, .te.val'
 50
123.4
25.79

LINE通知する(割愛

Node-REDで上記のHTTPリクエストを定期的に発行し、結果をIFTTTに投げLINEに送り込めばLineに定期的に温湿度が通知されます。

こんな感じでNode-REDを使って

IFTTTを設定すると、こんな感じで通知できました