室温管理システムに挑戦した井の中の蛙が少しだけ世界の広さを知った話

## 夏は過ぎましたが
まだ暑いですね。数日前、自室での仕事中に室温の上昇に気づかずめまいを起こしてしまいました。
スマート家電を使って室温の自動調節ができたらいいのですが、私の所持しているAlexa搭載Echo-dot第三世代は温度センサは非対応だそうです。
ですので、obnizの温度センサで室温を感知して基準値を上/下回ったらAlexaが優しく教えてくれるという仕組みを考えて制作に挑戦しました。
制作途中で人為的なミスと未解決の問題が発生してしまい仕組み自体は未完成ですが、多くのデバイスとツールの連携に挑戦した記録として投稿させていただきます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Echo-dot 第3世代は温度センサ非対応なようで… <a href="https://t.co/XwaOAUs8xG">pic.twitter.com/XwaOAUs8xG</a></p>&mdash; ウーリズム (@Uh_rhythm) <a href="https://twitter.com/Uh_rhythm/status/1306334452600119296?ref_src=twsrc%5Etfw">September 16, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 構成図＆使用ツール&デバイスなど

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164405/cc376f9c-2e75-71bc-abdb-378131f4a37f.png" width="７0%">
今回は制作において普段より多めにツールやデバイスを使いました。

####html/css/JavaScript
codepenで素敵なものをお借りしたのでこちらで紹介させていただきます。
ありがとうございました。
https://codepen.io/khadkamhn/pen/BNwxEa

####obniz
温度センサを要の一つとして使用しましたがミスにより故障
させてしまいました。
https://obniz.io/ja/sdk/parts/LM60/README.md

####Cloud Firestore
フラグの管理に使いました。
手軽に使えるDBってすごく便利です。

####Node-RED
enebular上で動かしました。
ほぼコードを書かずIoTデバイスやツールの連携が簡単にできます。

####Alexa(Echo Dot)

室温の通知をしてもらう予定でした。
こちらも今回の要でしたが、予想外の事態が起きました。
予想外の事態が起こる前のAlexaとの幸せな思い出はこちら、

https://qiita.com/UhRhythm/items/6a657bacf8d33d75f697

盛り沢山ですね。


## 操作画面
CodePenよりお借りしたクールな画面に
obnizの温度センサで取得した値を表示しておきます。
通知のON/OFFを制御できます。

### ミス① 温度センサ破壊
ここで一つミスを犯しました。
温度センサの向きを間違えたまま一定時間操作した結果、発熱を伴い故障させてしまいました。
-60度を上下するようになってしまいました。
要の部品を破壊するという手痛いミスを犯しました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">obnizの温度センサを破壊してしまい、自室がロシアの「世界一寒い定住地・オイミャコン」になっている。 <a href="https://t.co/mvnIG6T0Kt">https://t.co/mvnIG6T0Kt</a> <a href="https://t.co/EuGT2zzPxI">pic.twitter.com/EuGT2zzPxI</a></p>&mdash; ウーリズム (@Uh_rhythm) <a href="https://twitter.com/Uh_rhythm/status/1306333014541164545?ref_src=twsrc%5Etfw">September 16, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">obnizの温度センサは何やら文字が書いてある方を上に向けて挿入してください。故障の原因となり開発のモチベーションが下がります。 <a href="https://t.co/QVCTfD9qx1">pic.twitter.com/QVCTfD9qx1</a></p>&mdash; ウーリズム (@Uh_rhythm) <a href="https://twitter.com/Uh_rhythm/status/1306331744660987904?ref_src=twsrc%5Etfw">September 16, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## データ登録
画面からcloud FireStoreのコレクションへ登録します。
スイッチの状態が制御できればいいのでドキュメントのIDを固定にして上書きをしています。

```javascript
document.getElementById("on").onclick = function() {
    const temp = document.getElementById("tmp_text").innerHTML
    const testId = 'XXXXXXXXXXXXXXXXXXXXXX';
    const docRef = firebase.firestore().collection('status').doc(testId);
    const setAda = docRef.set({
        temp: temp,
        isSwitch: true
    });
};

```
　

## データ取得
Cloud FireStoreのデータをNode-RED上で取得します。
室温を一定時間ごとにデータを取得します。
Node-REDの設定で簡単にできます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164405/cc3dbb64-d97c-9878-1f6b-53e9755e5371.png" width="50%">

### ミス②欲しい情報がみつからない
Cloud FireStoreからデータを取得するためのノードに関する情報はこちらの記事で紹介されているものを
試してみましたが、どれもフィットしませんでした。

https://blog.enebular.com/nodes/firebase-nodes/

・[node-red-contrib-firebase](https://flows.nodered.org/node/node-red-contrib-firebase)
現在のFirebaseに対応していないとのことです。

・[node-red-contrib-firebase-data](https://flows.nodered.org/node/node-red-contrib-firebase-data)
Firebase realtime databaseとの接続はできましたが、今回とはちょっと用途が違いました。

・[node-red-contrib-firebase-admin](https://flows.nodered.org/node/node-red-contrib-firebase-admin)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164405/1d76a94e-524d-247e-56ee-220571846e41.png" width="50%">
Firebase Service Account Credentialsの入力内容がわからず断念。

・[node-red-contrib-firebase-messaging](https://flows.nodered.org/node/node-red-contrib-firebase-messaging)
enebularでは使えそうにないとのことで断念。
####最終的に私が使用したのはこちら

・[node-red-contrib-cloud-firestore](https://flows.nodered.org/node/node-red-contrib-cloud-firestore)
Protoout Studioの[田中講師長](https://twitter.com/1ft_seabass)に調べて頂きたどり着きました。
田中講師長のブログにはNode-Redをはじめとした様々な知見が載っておりますの是非ご覧ください。
https://www.1ft-seabass.jp/memo/

こちらのノードについてはいずれ記事にまとめたいと思います。


## 室温によりアレクサが通知
当初の予定では基準の温度を決めておいてそれより上か下かでアレクサのおしゃべりする内容を
変えるつもりでした。
AlexaとNode-REDの連携は前もって検証して記事も書いておいたので特に懸念する点はなかったはずでしたが、
1日経過していざ実装すると、どうしてもアカウント認証で失敗します。
自宅の回線がプライバシーセパレーターで保護されているため、Alexaはスマホのテザリングで動かしています。
開発でしようしているPCもスマホのテザリングに切り替えましたが変化はありませんでした。
下記の記事によるとAmazon側の仕様変更でむしろ動いていた方がレアケースだったようです。
[Alexa-remote2でAlexaにログインできなくなった！【対処法】](https://dream-soft.mydns.jp/blog/developper/smarthome/2020/05/1035/#toc3)

完成させたかったフローを載せておきます。
AlexaノードのAccount Missing!がどうしても解消できませんでした。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164405/5c7fb07a-2f73-d67b-5c3f-4e8af65d4737.png" width="70%">



##まとめ
html/css/Javascript、Obniz、Cloud FireStore、Node-RED、Alexaと色々な媒体とツールとデバイスの連携にチャレンジしました。
組み合わせる物が増えていくほど調べる範囲や留意点が増えていくのでなかなか大変だと思いました。
実際ミス多発しましたし。
しかしWebブラウザ上の世界しか知らなかった頃から考えると発想と視野は格段に広がりました。
知ることで世界は広がっていきますね。貪欲に行こう。