kintoneに乗るっ!

サイボウズの「非エンジニア」が「非公式」に kintone で遊ぶブログ

命を燃やすために出勤を記録したら部屋をアチアチにする【Nature Remo×kintone】

f:id:ibukintone:20210727101542j:plain

みなさん、命を燃やして仕事をしていますか?

私は、命を燃やして仕事をしています。

命を燃やすには、部屋がアチアチのほうがいいですよね。

というわけで、kintoneのタイムカードアプリで出勤を記録したら、Nature Remoを操作して部屋をアチアチにする外部連携をやってみます。

やりたいこと

  1. kintoneのタイムカードアプリで出勤を記録
  2. Nature RemoをAPIで操作し、エアコンを温度MAXの暖房で始動
  3. アチアチの部屋で心を燃やしながらお仕事

やりたいことはただひとつ。命を燃やしたい。それだけです。

Nature Remo Cloud API トークン生成

次の記事の「Nature Remo Cloud API トークン発行」を参考にして、トークンを発行しておきます。

ibukintone.jp

kintoneアプリ作成

続いて、kintoneアプリの作成です。 今回はアプリストアの「タイムカード」アプリをそのまま利用しました。 f:id:ibukintone:20210726211716p:plain

タイムカードアプリは、デフォルトでは退勤時刻の初期値にレコード作成日時が設定されます。 今回のカスタマイズだと初期値が設定されるのは都合が悪いので、フォームの設定から初期値のチェックを外します。 f:id:ibukintone:20210726211734p:plain

以上でアプリの作成は完了。設定を保存しておきます。

Nature Remo上のエアコン情報を取得

今度は、APIを実行するために必要な、Nature Remo上のエアコン情報を取得します。curlを使って次のコマンドを実行。

curl -X GET -H 'Authorization: Bearer トークン' https://api.nature.global/1/appliances | jq

すると、Nature Remoと連携しているデバイスの情報が入ったオブジェクトの配列が得られるはず。nicknameなどでエアコンの情報が入ったオブジェクトを特定して、IDをメモしておきます。

[
  {
    "id": "ここにエアコンのIDがある",
    "device": {
    ・・・
    },
    "model": {
 ・・・
    },
    "type": "AC",
    "nickname": "エアコン",
    "image": "ico_ac_1",
    "settings": {
      "temp": "28",
      "temp_unit": "c",
      "mode": "cool",
      "vol": "auto",
      "dir": "auto",
      "dirh": "",
      "button": "",
      "updated_at": "2021-07-27T00:25:44Z"
    },

コードをかきかき

最後に外部連携のキモとなるコードを書いていきましょう。

(function() {
    'use strict';

    const RTOKEN = トークン;
    const AIRCONID = エアコンのID;

    // レコード保存時にイベント発火
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event => {

        // 退勤時刻が設定されていない場合に処理開始
        const clockOut = event.record['退勤時刻'].value;
        if(clockOut === undefined) {

            // 部屋をアチアチにするためにNature Remoに投げるパラメータ設定
            const url = `https://api.nature.global/1/appliances/${AIRCONID}/aircon_settings`; 
            const headers = {
                'Authorization': 'Bearer' + RTOKEN, 
                'Content-Type' : 'application/x-www-form-urlencoded'
            };
            const data = 'button=&temperature=30&operation_mode=warm';

            // kintone.proxyでNature Remo Cloud APIを実行
            kintone.proxy(url, 'POST', headers, data)
            .then(resp => {
                return event;
            }).catch(resp => {
                event.error = resp.message;
                return event;
            })
        }
    })
})();

!注意!

今回は簡略化のため、トークンなどの秘匿情報をコード上に直接記述しています。 実際に外部のトークンを扱う場合は、プラグイン化などを行ってトークンを秘匿化してください。


書いたコードは、アプリの設定からJavaScriptカスタマイズとして適用しておきます。

いざ動作確認!

アプリで新しくレコードを作成し、出勤時刻を確認して「保存」をクリックすると... f:id:ibukintone:20210727095838p:plain

エアコンから「ピッ」という音が聞こえました。Nature Remoのアプリで確認すると、ばっちりアチアチの設定になっています。 f:id:ibukintone:20210727100409p:plain

アチアチの部屋で命を燃やしながら仕事ができるようになりましたね!

記事の趣旨はふざけきっていますが、Nature Remoの連携先としてkintoneはけっこう面白い選択肢だと思います。

Nature Remoのデータ保存先としても使えるし、保存したデータを元にNature Remoを操作することもできる。

他にも便利な使い方があると思うので、ガンガン連携していきましょう。

告知

kintoneカスタマイズの便利さ・幅広さを、 時に真面目に、時に面白おかしく伝える「デベロッパーマーケティング」のお仕事について、 気軽にいろいろ聞けるイベント「キャリアBar」が開催されます! cybozu.connpass.com

Barなんで、気軽にふらっと立ち寄ってみてください。

ではでは〜ノシ