編集履歴一覧に戻る
iijimaのアイコン画像

iijima が 2021年04月30日19時10分37秒 に編集

コメント無し

本文の変更

# デモ動画 @[youtube](https://www.youtube.com/watch?v=lRgThTBgGM4) # 使い方 電源を入れる 1. webの画面に現在の天気や気温、おすすめのエアコン設定が表示される。 1. エアコンのリモコンにある停止、冷房、暖房、除湿を学習させる 1. 学習は基本的に初回のみ 1. モード切替でリモコンモードにする 1. 画面の好みのボタンを押す 1. 寒ければ冷房は体に良くない、暑ければ暖房は体に良くない、乾燥していれば除湿は良くないといった音声メッセージが流れる # 部品 | 部品 | 金額 | |:---:|:---| | obniz 1Y | ¥6,930 | | IRModule | ¥935 | | TypeC対応電源| - |

+

| open weather API| free | # 設計図 ![キャプションを入力できます](https://camo.elchika.com/0545523e2cd574562c42c321874a856ba287bc28/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f36316531623838372d653333322d343035342d623765302d3332343235643435393561642f39376264343164342d333462652d346133642d396535392d613634386330383230663535/)

-

設計図

# ソースコード open weatherのAPIを使っています。 [https://openweathermap.org/api](https://openweathermap.org/api)

+

途中までブロックのみで作ろうとしていたため、不要なファイルを読み込んでいますがご愛嬌で。

```やさしいエアコンリモコン <html lang="jp"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" />

-

<meta http-equiv="refresh" content="3600;URL=">

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

+

<!--script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous" ></script-->

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous" ></script> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" /> </head> <body> <h3 id="bploading" style="text-align:center;">LOADING...</h3> <div id="OBNIZ_OUTPUT"></div> <br />

-

<script

+

<script

src="https://unpkg.com/obniz@latest/obniz.js" crossorigin="anonymous" ></script>

-

<script src="https://unpkg.com/obniz-parts-kits@0.16.0/iothome/index.js" crossorigin="anonymous" ></script> <script

+

src="https://unpkg.com/obniz-parts-kits@0.16.0/airobot/index.js" crossorigin="anonymous" ></script> <script

src="https://unpkg.com/obniz-parts-kits@0.16.0/ui/index.js" crossorigin="anonymous" ></script> <script

+

src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/howler2.1.2/howler.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/opencv3.4/opencv.js" crossorigin="anonymous" ></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.3.0"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.1.0"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet@2.2.2"></script> <script

src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/clmtrackr.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotion_classifier.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotionmodel.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/model_pca_20_svm.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/index.js" crossorigin="anonymous" ></script> <script src="https://unpkg.com/obniz-parts-kits@0.16.0/storage/index.js" crossorigin="anonymous" ></script>

+

<script> $("#bploading").text("RUNNING..."); (async function(){ var obniz, mode, iothomekit, crima_icon,temp, humidity, mode_label,recomend_label, disp,message; var button_stop, button_cooler, button_warmer, button_dry, mode_change, surbay, stop, cooler, warmer, dry;

-

obniz = new Obniz('{xxxx-xxxx}');//obnizID

+

obniz = new Obniz('{xxxx-xxxx your obnizID}');

await obniz.connectWait(); iothomekit = obniz.wired("IoTHomeKit",{}); /*weather_api*/ //現在の天気データ呼び出し let data = await (await fetch(

-

`http://api.openweathermap.org/data/2.5/weather?q={ローマ字でお住いの地域名},JP&lang=ja&appid={your_key}`//weather API

+

`http://api.openweathermap.org/data/2.5/weather?q={お住いの地域名や都市名},JP&lang=ja&appid={your weatherAPI key}`

)).json(); console.log(data); crima_icon = data.weather[0].icon; var image; humidity = data.main.humidity; image = new ObnizUI.Image('http://openweathermap.org/img/wn/'+crima_icon+'@2x.png', '100px'); temp = Math.round((data.main.temp-273.15)*10)/10; temp_label = new ObnizUI.Label('temp_label'); temp_label.setText(data.weather[0].description+'/気温:'+temp+'℃/湿度:'+humidity+"%"); recomend_label = new ObnizUI.Label('データが取れませんでした。');

-

if(temp < 20)message = '暖房がおすすめです'; if(temp > 25)message = '冷房がおすすめです'; if(humidity > 60 && temp > 25 && temp < 30)message = '除湿がおすすめです'; if(!message)message="エアコンつけなくてもいいかもね";

+

if(temp < 20)message = '暖房がおすすめです'; if(temp > 25)message = '冷房がおすすめです'; if(humidity > 60 && temp > 25 && temp < 30)message = '除湿がおすすめです'; if(!message)message='エアコンつけなくてもいいかも';

recomend_label.setText(message);

-

/***************/

mode_label = new ObnizUI.Label('リモコンモード');

-

disp = new ObnizUI.Label('');

+

disp = new ObnizUI.Label(' ');

button_stop = new ObnizUI.Button('停止'); button_cooler = new ObnizUI.Button('冷房'); button_warmer = new ObnizUI.Button('暖房'); button_dry = new ObnizUI.Button('除湿'); mode_change = new ObnizUI.Button('モード切替'); stop = await ObnizUI.Util.loadFromStorage('signal_stop'); await ObnizUI.Util.wait(0); cooler = await ObnizUI.Util.loadFromStorage('signal_cooler'); await ObnizUI.Util.wait(0); warmer = await ObnizUI.Util.loadFromStorage('signal_warmer'); await ObnizUI.Util.wait(0); dry = await ObnizUI.Util.loadFromStorage('signal_dry'); await ObnizUI.Util.wait(0); /*どれか一つでも値が取れない場合は学習モードへ*/ if(stop && cooler && warmer && dry) mode = 1; else mode = 0; while (true) { await ObnizUI.Util.wait(0); if (mode_change.isClicked()) { if(mode == 1)mode = 0; else mode = 1; } /*リモコンの信号を学習する*/ if (mode == 0) { //どれが設定されていないか表示*/ mode_label.setText('学習モード'); var not_set; if(!stop)not_set ='【停止】'; if(!cooler)not_set +='【冷房】'; if(!warmer)not_set +='【暖房】'; if(!dry)not_set +='【除湿】'; if(not_set)disp.setText(not_set+'が設定されていません'); if (button_stop.isClicked()) { await ObnizUI.Util.saveToStorage('signal_stop',((await iothomekit.getIrWait()))); stop = await ObnizUI.Util.loadFromStorage('signal_stop'); disp.setText('停止の信号を設定しました'); } if (button_cooler.isClicked()) { await ObnizUI.Util.saveToStorage('signal_cooler',((await iothomekit.getIrWait()))); cooler = await ObnizUI.Util.loadFromStorage('signal_cooler'); disp.setText('冷房の信号を設定しました'); } if (button_warmer.isClicked()) { await ObnizUI.Util.saveToStorage('signal_warmer',((await iothomekit.getIrWait()))); warmer = await ObnizUI.Util.loadFromStorage('signal_warmer'); disp.setText('暖房の信号を設定しました'); } if (button_dry.isClicked()) { await ObnizUI.Util.saveToStorage('signal_dry',((await iothomekit.getIrWait()))); warmer = await ObnizUI.Util.loadFromStorage('signal_dry'); disp.setText('除湿の信号を設定しました'); } } if (mode == 1) { mode_label.setText('リモコンモード'); if (button_stop.isClicked()) { iothomekit.irSend(stop); await _ai.say('停止します'); $("body").css("background-color","rgb(255,255,255)")//停止時は画面を白くする disp.setText('停止中'); } if (button_cooler.isClicked()) { iothomekit.irSend(cooler); await _ai.say('冷房をかけます'); if(temp<20)await _ai.say('気温が20度を下回っています。冷房の運転は体によくありません。'); $("body").css("background-color","rgb(0,0,255)")//冷房使用時は画面を青くする disp.setText('冷房中'); } if (button_warmer.isClicked()) { iothomekit.irSend(warmer); await _ai.say('暖房をかけます'); if(temp>25)await _ai.say('気温が25度を越えています。暖房の運転は体によくありません。'); $("body").css("background-color","rgb(255,0,0)")//暖房使用時は画面を赤くする disp.setText('暖房中'); } if (button_dry.isClicked()) { iothomekit.irSend(warmer); await _ai.say('除湿にします'); if(humidity<50)await _ai.say('湿度が40%を下回っています。乾燥のし過ぎは体によくありません。'); $("body").css("background-color","rgb(238, 247, 111)")//除湿時は画面を黄色くする disp.setText('除湿中'); } } } })(); </script> </body> </html> ```