Raspberry Pi から kintone にデータを書き込む

# Raspberry Pi から kintone にデータを書き込む

Raspberry Pi（Node-RED）から、kintone へAPI経由でアプリにデータを書き込みます。
今回は、以下の2つのフィールドを持つアプリを作成し、Raspberry Pi（Node-RED）からデータを書き込みます。
・日時
・文字列（1行）

## kintone アプリの作成
kintone にアプリを作成します。
今回は、「はじめから作成」にて作成します。

### フィールドの設定
以下の２つのフィールドを配置します。
・日時
。文字列（1行）
![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/51a0540a-67d7-95e8-9838-337bc4e55373.jpeg)


フィールドコードを以下のように変更します。

| フィールド | フィールドコード |
|:--|:--|
|日時|date   |
|文字列（1行）   |data   |

![002.png](https://qiita-image-store.s3.amazonaws.com/0/235420/2022a052-c5af-8e75-d98d-6e93808fb87c.png)

![003.png](https://qiita-image-store.s3.amazonaws.com/0/235420/482a5a7a-2308-4f71-302a-4109bf6006cf.png)


### APIトークンの作成
APIトークンを作成します。
アプリの［設定］から［APIトークン］を選択します。

![004.png](https://qiita-image-store.s3.amazonaws.com/0/235420/0fd605d6-34a1-d634-997c-b4e722f9cb52.png)


REST APIのエンドポイントやアプリIDを確認します。

|項目|確認箇所 |例|
|:--|:--|:--|
|エンドポイント|https:// から record.json まで|https://＜ドメイン名＞/k/v1/record.json|
|アプリID|app= の後の数値|1|

［生成］を選択し、APIトークンを生成します。
また、［レコード追加］のアクセス権を付与し、保存します。

![005.png](https://qiita-image-store.s3.amazonaws.com/0/235420/f8348b5d-132d-9ae7-1687-ad15b1d5b180.png)


最後に、アプリを公開します。

## Raspberry Pi（Node-RED）の設定
日時と文字列を HTTP Request にて kintone に送信します。
フィールド形式の仕様は以下に掲載されています。
[フィールド形式 – cybozu developer network](https://developer.cybozu.io/hc/ja/articles/202166330)




![101.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/f01d9f1e-6d58-8ba0-8a6e-b7e086bbff98.jpeg)


### 送信するデータの作成（functionノード）
「日時」と「文字列（1行）」のデータを作成します。

・日時
日時は以下の形式に成形ます。
YYYY-MM-DDTHH:MM:SSZ

・文字列（1行）
「データ」と記します。

~~~
var getCurrentTime = function () {
    var date = new Date();
    date.setHours(date.getHours() - 9);
    var d = date.getFullYear() + '-';
    d += ('0' + (date.getMonth() + 1)).slice(-2) + '-';
    d += ('0' + date.getDate()).slice(-2) + 'T';
    d += ('0' + date.getHours()).slice(-2) + ':';
    d += ('0' + date.getMinutes()).slice(-2) + ':';
    d += ('0' + date.getSeconds()).slice(-2) + 'Z';
    return d;
};
msg.date =getCurrentTime() ;
msg.data ="データ";
return msg;
~~~

![102.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/02fe700b-c6f0-d444-36bb-eab62f773899.jpeg)


### JSON body の作成（functionノード）
作成した送信するデータをJSON形式にします。
"app"には、APIトーク生成時に確認したアプリIDを記載します。

~~~
var payload={
 "app":"1",
 "record": 
  {
  "date":{"value":  msg.date  },
  "data": {"value": msg.data }
}
}
msg.payload=payload;
return msg;
~~~

![103.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/11b79a21-8bda-bba1-6eb7-5aed13cd94b4.jpeg)


### APIトークン の設定（templateノード）
APIトーク生成時に確認したAPIトークンを設定します。

| 項目 | 設定値 |
|:--|:--|:--|
| 設定先  | msg.headers.X-Cybozu-API-Token  |
| 形式  | Mustacheテンプレート  |
| テンプレート  | ＜APIトークン＞  |
| 構文  | なし  |

![104.png](https://qiita-image-store.s3.amazonaws.com/0/235420/4fa26478-6a58-9e46-4c5e-cd928afe0bec.png)



### データの書き込み（http requestノード）
APIトーク生成時に確認したエンドポイントを設定します。

| 項目 | 設定値 |
|:--|:--|:--|
| メソッド  | POST  |
| URL  | ＜エンドポイント＞  |
| 出力形式  | JSON  |

![105.png](https://qiita-image-store.s3.amazonaws.com/0/235420/5a58fc95-e23b-a3f5-edd6-f9b9e6898c22.png)



## データの書き込み
inject し、データの書き込みが成功すると、http requestノードからデータレコードのIDが出力されます。

~~~
{ id: "1", revision: "1" }
~~~

![201.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/73f995cc-e99e-7d1e-78c5-4d9aeec2d7a4.jpeg)


kintone にデータが書き込まれました。

![202.jpg](https://qiita-image-store.s3.amazonaws.com/0/235420/8d624ae9-2b94-50b8-b99b-cbc71d9aee54.jpeg)