MESHタグで家の気温・湿度を取得してZabbixで管理する

こちらは [ZYYX Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zyyx) 19日目の記事になります。

# はじめに
うちの会社の人は、業務に関係ある・なし関係なく面白いデバイスや技術を見つけると、実際に使ってみたり、なんか作ってみたりする人が多いです。そんな雰囲気に乗っかって、私も[MESHブロック](https://meshprj.com/jp/)で取得したデータをZabbixに渡す仕組みを作ってみました。

# 全体図
今回の内容の全体図になります。
家の1階と2階に温度・湿度ブロックが設置されています。（玄関ドアに動きブロックも設置していますが、今回は説明を割愛します）
MESHブロックから送られたデータはiPhoneSE(昔使ってたスマホです）に送られ、WiFiを通してIFTTT経由でGoogleスプレッドシートに記録、Googleスプレッドシートの内容をjson化したものを、クラウド上のZabbixが定期的にチェックしにいく、という流れになります。
![図1219.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/c4e0889a-6d11-5306-f680-ca4ede8599ff.png)

# やったこと
やったことを処理の流れに合わせて4ステップで説明します。

## STEP1：MESHブロック→iPhone→IFTTT
MESHブロックで取得した温度や湿度のデータを、MESHアプリ経由で定期的にIFTTTに渡します。
MESHアプリとIFTTTの連携方法は公式サイトの[こちら](https://support.meshprj.com/hc/ja/articles/213673088)に記載がありますので、説明は省略します。
![IMG_0942.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/03c820e0-50c9-7106-4be4-c81c7e3efe59.png)

## STEP2：IFTTT→Googleスプレッドシート
IFTTTの[Create](https://ifttt.com/create)画面にて、「If」にMESHの「Event from MESH app received」を指定します。
EventIDには、MESHアプリ側で設定した文字列と同じものを設定します。
「Then」にはGoogle Sheetsの「Update cell in spreadsheet」を指定します。
また、スプレッドシートのフォルダパス・シート名と、どのセルに、値（変数名Text）を反映させるかを設定します。（以下図）

![スクリーンショット 2019-12-16 20.16.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/92fd57c0-befc-38b5-69e1-4d075fe9249a.png)
ここまでを、1階の温度・湿度と、2階の温度・湿度の4セット作成します。
この時点でスプレッドシートはこんな感じの状態になります。
![スクリーンショット 2019-12-16 20.20.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/98a20e5d-75d9-def1-889b-9471777c0be5.png)

## STEP3:Googleスプレッドシート→json化
Googleスプレッドシートの内容を、Zabbixから見に行けるようにjson形式にします。
やり方については[こちら](https://qiita.com/takatama/items/7aa1097aac453fff1d53)の記事を参考にしました。
jsonのURLは ```https://script.google.com/macros/s/なんとかかんとか/exec``` のようになりました。
中身はこんなんです。

```json
[
    {
        item: "1Ftemperature",
        value: "13.7"
    },
    {
        item: "1Fhumidity",
        value: "58"
    },
    {
        item: "2Ftemperature",
        value: "13.2"
    },
    {
        item: "2Fhumidity",
        value: "56"
    }
]
```

## STEP4:jsonをZabbixで監視
先程作られたjsonをZabbixから監視するようにします。
Zabbix4.0以降に追加された「HTTPエージェント」を使用して、jsonの内容を取得するアイテムを1つ作成します。

![スクリーンショット 2019-12-16 20.25.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/9871fe70-c4b4-9325-8e0e-9894fbd05c85.png)

更にそのアイテムを使って依存アイテムを４つ（1階の温度・湿度と、2階の温度・湿度）作成します。
1階の温度の場合はこんな感じ。

**「アイテム」タブ**
![スクリーンショット 2019-12-16 20.26.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/31a741ad-2832-1d57-9185-f364e6258dfb.png)

**「保存前処理」タブ**
![スクリーンショット 2019-12-16 20.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/1a47e8b5-26c8-5976-d2e9-c8d3dbabc11a.png)

# こうなりました
そんな訳で、家の1階と2階の温度・湿度のデータを取り続けたことで、Zabbix上でこんなグラフが作れるようになりました！
→1階温度：青い線、2階温度：赤い線、外気温：緑グラデ
![スクリーンショット 2019-12-16 20.33.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/029ed5e3-496d-2e98-1e43-16f09e69015e.png)


外気温についてはOpenWeatherMapを使って、住んでるところに近い街のデータを取得しています。
OpenWeatherMapを使ったお天気情報取得については[こちら](https://qiita.com/kosuge/items/54abc56f4337b6ebc3fe)の記事を見ていただければと。

あと、家の現在の温度・湿度が分かるマップなんかも作りました。
特にトリガーは設定していないので常にステータスは「正常」です。
![SS2019-12-15 23.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128331/5ef109e1-f0c7-e34a-a160-44acffca0e50.png)
さて、後はこれをどう活かすか・・・（今の所ただデータを取り続けているだけ😅）

# あとがき
個人的な考えですが、何でもZabbixで管理できる！（Zabbixで管理出来ないものはない！）と思ってるので、その手始めに家の気温・湿度を管理することが出来てよかったです。
次は何をZabbixで管理しようかな〜。