MESH温度・湿度タグで冷蔵庫の温度を取得＋MESH SDKとThingSpeakでグラフ表示

# 背景
ラズパイにMESHハブ入れたから使いたい。
Googleスプレッドシートでもいいけど、どうせならそれっぽいサービスでグラフ表示したい。
ThingSpeakを使えるようになったので、色々グラフにしたい。
室温はNature Remoで温度モニターできるので、別の場所はかりたい。
冷蔵庫の開け閉めでどれくらい温度変わるか興味あった。
MESHタグ使わないともったいないので、使いたい。

# 使ったもの
- MESH温度・湿度タグ
[MESH-100TH 温度・湿度(Temperature & Humidity)タグ - ワイヤレス温度・湿度センサー | ソニー](http://meshprj.com/jp/tag/MESH-100TH-TemperatureAndHumidity.html)

結構高い。

# やったことあったこと
MESH SDKとThingSpeakは使ったことあった。
なので、まあ、つなぐだけ。

- MESH SDK
[MESH動きタグとtogglで時間管理 - Qiita](https://qiita.com/iton/items/30a517eae3da41d58023)
- ThingSpeak
[ThingSpeakに登録してcurlでデータを送ってグラフを表示するまで - Qiita](https://qiita.com/iton/items/f7c83e5ded25db983586)

# MESH SDK

こんな感じで入力してく。
![MESH SDK (5).png](https://qiita-image-store.s3.amazonaws.com/0/184221/4511a97b-01b5-e016-7929-2e1a3056cf71.png)


コードはこんな感じ↓
デバッグ手段が、最後実行してログみるだけ。実行前はシンタックスエラーも検出してくれないので、せめて、かしこいエディタで確認してコピペしたほうがいいと思う。

変更なし↓

```javascript:Initialize
//Initialize "outputIndex"
return {
    runtimeValues : {
        outputIndex : 0
    },
    resultType : "continue"
};
```

変更なし↓

```javascript:Receive
/*** No Receive Codes ***/
```

xxxに自分のAPI Keyを入れる。
fieldの数字は、ThingSpeakのChannelの自分の使いたいやつを入れる。
今回は、温度と湿度をそれぞれfield6, field7に入れた。
認証がないから、シンプル。

```javascript:Execute
ajax
({
	type: "GET",
	url : "https://api.thingspeak.com/update?api_key=xxx&field6=" + messageValues.temperatureValue + "&field7=" + messageValues.humidityValue,
	timeout : 5000,
	success: function (){
		log(messageValues.temperatureValue);
		log("GET success");
			callbackSuccess( {
			resultType : "continue",
		} );
	},
	error : function ( request, errorMessage ) {
		log("Network error");
		callbackSuccess( {
			resultType : "continue",
		} );
	}
});

return {
	resultType : "pause"
};
```

変更なし↓

```javascript:Result
//Select an output connector depending on the "outputIndex" value updated in "Execute"
return {
    indexes : [ runtimeValues.outputIndex ],
    resultType : "continue"
};
```

# MESH アプリ
こんな感じでつなぐ。一定周期でログとる。
<img width="375" alt="IMG_2248.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/f530c53c-37f7-d1ae-554d-11264413d03d.png">

タイマー
<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/8c8ce9d6-2213-fcc0-1811-800eadfc9f5d.png">

温度
<img width="375" alt="IMG_2249.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/261935af-6560-9f8f-e2f9-0a7168a50bce.png">

湿度
<img width="375" alt="IMG_2250.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/21171a75-2437-1699-50fb-8c5f40a1e0a6.png">

設定項目（ない）
<img width="375" alt="IMG_2251.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/e607a223-1f3d-6589-c6f0-d642b3e5debe.png">

ログ
<img width="375" alt="IMG_2252.png" src="https://qiita-image-store.s3.amazonaws.com/0/184221/0d9e4e2a-e127-2716-ee11-def391ea7f9c.png">

# ThingSpeak

1日分のデータを表示してみる。
二種類のデータを表示したいので、yyaxisを使う。

[2 つの y 軸があるチャートの作成 - MATLAB & Simulink - MathWorks 日本](https://jp.mathworks.com/help/matlab/creating_plots/plotting-with-two-y-axes.html)

```
readChId = xxx;
readKey = 'yyy';

[temps,time] = thingSpeakRead(readChId,'fields',[6,7],'NumDays',1,'ReadKey',readKey);
yyaxis left;
plot(time, temps(:,1));
ylim([0,20]);

yyaxis right;
plot(time, temps(:,2));
ylim([0,100]);

title('Temperature & Humidity');
xlabel('TimeStamps');
ylabel('Measured Values');
legend({'Temperature','Humidity'});
grid on;

```

# 結果
それっぽいグラフになった。
ドアポケットの卵の横においたけど、おもったより温度高い。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184221/45dc005d-842e-0573-a590-19c2f09321fc.png)

1日の変動を確認してみた。
開け閉めすると、+2度くらい温度上昇して、湿度も上がる。面白いなぁ。
冷蔵庫ってオンオフ制御なのか。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184221/cc2f6304-4c2a-325e-dfd7-bc642c62cfc8.png)


# 参考
[カスタムブロックでMESHブロックが検知したデータを取得する方法を教えてください – MESHサポート | 遊び心を形にできる、アプリとつなげるブロック形状の電子タグ](https://support.meshprj.com/hc/ja/articles/115007700947)