夏の暑さ対策！ NatureRemoから取得した温度と湿度、不快指数を電光掲示板で表現してミスト装置や日よけを動かす

#概要
不快指数を電光掲示板に表示させて、
不快指数の値からミスト送風機や日よけ、ヒーターを動かすようにする。


##作ったきっかけ
サービスエリアや公園、公共機関に暑さ対策として、ミスト送風機がたまに置いてあるが、管理の人が手動で電源入れていた。
管理人がいなければミストも動かないので、そこらへんの人の手間をなくしていきたい。
また、天気予報と連動してゲリラ雷雨の注意を電光掲示板で促すことができると良いと思った。

##概念図(接続イメージ付き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/68fc679f-05d1-42ea-b609-e43731adad61.png)


##機能
①NatureRemoから温度・湿度を取得する　済
②取得した温湿度を電光掲示板に表示する　済
③天気予報APIを使用して天候の注意を表示させる　未完成
④不快指数の値によって送風機・ヒーターを動かす　未完成


##課題
・温度から判定して送風機やヒーターを動かすので安全面で ☓
・室外に設置するため防滴・防水対応が必要

##使用した部材

###操作コントローラ・温度・湿度センサー
・NatureRemo　税込 10,778円
温度・湿度を捉えることができ、赤外線リモコンの代わりになって操作できるため。

購入先：Amazon https://nature.global/
![IMG_3034.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/1f4b9474-26ef-290d-de5a-c6b0f38ef170.jpeg)

###電光掲示板 操作用
小型パソコン LIVA Q2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/29a5c8f8-7020-1162-d3c6-db8f6be43943.png)



有線LANポートで電光掲示板コントローラと繋ぐ
NatureRemo側のAPIはインターネット必須のため、無線LANでインターネットに繋げる
電光掲示板の操作ソフトはWindowsのみ対応

###電光掲示板
①LEDマトリクスパネル P6 RGB 32×32  4枚 × 4,300円
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/1162

②スイッチング電源 MEAN WELL 5V LRSシリーズ LRS100-5 1個 × 3,360円
　※配線間違えると危ないので注意すること！
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/1640

③LEDマトリクスパネルコントローラー 5A-75 [8052]　1台 × 7,980円
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/1188

④プラグ付き電源コード VFF0.75mm2 [6224] 1本 × 390円
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/383


⑤IDC フラットケーブル 16P 50cm コネクター付き [6486] 1本
　パネル購入すると付属で15cm×4本がついてくる？
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/1201

⑥LEDパネル用RGB用電源線2コネクタ お兄さんに聞いたら出してくれた
  購入先：akibaピカリ館LED 

⑦赤黒平行線 これもお兄さんに聞いたら出してくれた
　スイッチング電源からコントローラに電源供給する線
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/303


⑧LEDパネル取り付け用マグネットボルトM3 × 16個 × 25円
　※磁力が強力なのでコントローラには近づけないこと！
  購入先：akibaピカリ館LED https://www.akiba-led.jp/product/1197

##配線
③のLEDマトリクスパネルコントローラーからLANポート経由でパソコンに繋げる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/e81d713f-9039-21d2-2a74-2cd288322f86.png)


デモ ※クリックするとYoutube
http://www.youtube.com/watch?v=pJDLxknZCiY
[![デモ動画](http://img.youtube.com/vi/pJDLxknZCiY/0.jpg)](http://www.youtube.com/watch?v=pJDLxknZCiY)

元ネタを真似したところ
![IMG_30284.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/6ab2a1d0-3d73-e50b-1999-94f0504d96c7.jpeg)

##プログラム側
・Node.js
・デプロイ環境はNowを使用
・NatureRemoAPI
明るさの値も取れるが、今回のテーマとしては使わない。

[今後の予定]
・天気予報API

```　Server.js
const webClient = require('request');
const express = require('express');
const app = express();

module.exports = (req, res) => {

// 室温を取得
webClient.get({
 url: "https://api.nature.global/1/devices",
 headers: { "Authorization": "Bearer [API-KEY]" }
  }, function(error, response, body){
status=body;

const obj = JSON.parse(body);

// jsonを分解する処理
function getValue(obj) {
  if (typeof obj === 'object') {
      let strValue = '';
      let strTemp = obj['newest_events']['te']['val']
      let strHu = obj['newest_events']['hu']['val']
      let striL = obj['newest_events']['il']['val']
      let strFukai =0
      let strMessage="しょきち"

      strValue= '現在の温度:'+obj['newest_events']['te']['val'] + '℃ \n' ;
      strValue += '湿度:' + obj['newest_events']['hu']['val'] + '% \n ' ;
      //strValue += '明るさ' + obj['newest_events']['il']['val'] + '\n' ;
      strFukai=Math.round(0.81 * strTemp + 0.01 * strHu *(0.99*strTemp-14.3)+46.3);

      if(strFukai<=55){
        strMessage="<span style='background-color:#0000ff' color:#ffffff;>寒い！((´д｀)) ﾌﾞﾙﾌﾞﾙ…</span>"
      }
      else if(strFukai >= 56 && strFukai <=60){
        strMessage=" 肌寒いよー"
      }
      else if(strFukai >=61 && strFukai <=65){
        strMessage="  いい感じの気候(*′∀`)ｖ"
      }
      else if(strFukai >=66 && strFukai <=70){
        strMessage="  ちょうどよい～（´∀｀～）ｽｽﾞｽｨｰ"
      }
      else if(strFukai >=71 && strFukai <=75){
        strMessage=" まだ我慢できる暑さかなー"
      }
      else if(strFukai >=76 && strFukai <=80){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> ちょっとむしむしするねー</span>"
      }
      else if(strFukai >=81 && strFukai <=85){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> 暑い！水分補給して！</span>"
      }
      else if(strFukai>=86){
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> ヤバい！！！！！！！！</span>"
      }else{
        strMessage="<span style='background-color:#ff0000; color:#ffffff;'> あつい！</span>"

      }
      strValue +="不快指数：" + strFukai ;
      strValue += strMessage;

      return strValue;
  } else {
      return obj;
  }
}

// 出力結果
console.log(getValue(obj[0]));
var strHTML ="";

strHTML ="<meta http-equiv='refresh' content='60' > <body bgcolor='#000000' text='#FF9900'><font face='ＭＳ Ｐ明朝,ＭＳ 明朝' size='+2'><Marquee scrollamount='2'>" + getValue(obj[0])+ "</Marquee></font>"
res.send(strHTML)
  });
  
}
```