switchbot スイッチボット hub mini ハブミニ エアコン制御 温湿度計 換気扇 プラグ

電気代が13500円とか、阿保みたいに高くなったので自動制御システムを導入しようかと。

 

スイッチボット ハブミニ

スイッチボット 温湿度計

スイッチボット プラグミニ

created by Rinker
¥1,980 (2022/09/29 10:45:54時点 楽天市場調べ-詳細)

ーーーーーーーーーーーーー

制御ログ

ーーーーーーーーーーーーー

2022-09-29(TH)やはりGasの権限でエラーが出る。たまに。

 

何故だろう。原因不明だけどとりあえずPOSTのリターンコードでメッセージを出すことにします。

多分これで良いのかな?

リターンコード200以外はメッセージで通知するようにしただけです。

Macrodroid

スプレッドシートにログとして出力しています。


function doPost(e) {
  var params = JSON.parse(e.postData.getDataAsString());
  var funcName = params.funcName;
  var funcVal = params.funcVal;  
  if(funcName == "GPS"){
    if(globalpara["GPS"] != funcVal){
      globalpara["GPS"] = funcVal;
      //更新間隔判定
      const d5 = dayjs.dayjs(new Date());
      const d6 = dayjs.dayjs(globalpara['GPS_chg_time']);
      const span_Time = d6.add(globalpara['min_chg_time_span'],'m');
      if(d5 > span_Time){
        //更新時間アップデート
        globalpara["GPS_chg_time"] = d5.format('YYYY-MM-DD HH:mm:ss');
        //書き出し
        console.log("cols="+cols);
        const setPara = [Object.keys(globalpara),Object.values(globalpara)];
       sheet.getRange(1,1,2,cols).setValues(setPara);
        //ログ記録
        log(params,"A4:B4");
      }else{
        log(params,"E4:F4");
      }
    }else{
      log(params,"E4:F4");
    }
  }
}


function log(params,paraRange) {
    ////////ログ行数管理
    const rows = sheet.getMaxRows();
    if(rows < 200){
      sheet.insertRowsAfter(100, 100)
      console.log(rows);
    }
    sheet.deleteRows(70,10);
    //最新ログ行追加
    const range = sheet.getRange(paraRange);
    range.insertCells(SpreadsheetApp.Dimension.ROWS);
  var date = new Date();
  date = Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd H:mm:ss");
  var jtext = JSON.stringify([ params.funcName,params.funcVal,params.funcVal2 ]);
  const values = [
    [ date, jtext ],
  ];
  range.setValues(values);
}

 

 

 

2022-09-05(MO) スクリプト停止、エアコン稼働していない。

再び「認証が必要です」と出ています。一度許可した権限が一定時間で消えてしまう。これで二回目です。

確認しましたが、こちらの設定をオンの状態でした。

 

勿論権限を再承認しましたが、様子を見ている状態です。

上記のURLをよく読んでみると「オン」にした状態で認証すれば出なくなる。のかもしれないです。

とにかく様子見です。

 

2022-08-29(MO) マニュアルでスクリプトを実行しないように対応

Script_ON_OFF_flg
OFF

の項目を有効か。とりあえず。

これがOFFの時はスクリプトを実行しないようにしました。

要は今日あたりは結構涼しかったので、エアコンいらない。けど、除湿だけは稼働していたからです。湿度は高かった。

じかし、実際には寒すぎるくらいまで除湿してくれていたし、そもそも窓を開けていても快適なくらいでした。

よって、もしかして外気の状況によっては止める制御も入れた方が良いのかもしないと思っている所です。

まあ、理想的には野外に温湿度計を設置して室内との差を見ると良いのかもしれないですね。

こちらからアメダスのデータを取得してみます。

最新版はこちらになるのかも

私の所からは相模原中央の観測所が近い気がします。こちらによると

となると amdno=46046 という事になるのかと。

取得できないな。観測所によってはダメ見たい。

辻堂 こちらはOKっぽい

相模原中央
ほぼ日付しか取れていない。

海老名
温度は取れたが湿度がとれていない。

なるほど。この表に載っている情報しか取れないんだ。多分。

湿度がとれる横浜だと随分と私の所からずれてしまう。

けど、とりあえず仕方ないのかと。横浜

weather_Station_get_URL
https://api.cultivationdata.net/amds?point=46106

とか適当にパラメーターを設定して外気が設定温度より低い場合は単に換気のみとしました。

取り合えアズまたこれで様子を見ようかと。というか、暖房の事を全く今のところ考えていないな。

 

2022-08-29(MO) GASの権限が無くなるエラーに対応

なぜか一度許可した実行権限が無くなって自動実行されない状態でした。

こちらと同じかもしれないです。

こちらの設定をオンにしたので、これで様子見します。

まあ確かにこれはデフォルトでオフだろうなと思われる設定な気もします。勝手に私の実行権限でアプリケーションを変更られてはたまらない。

信頼できるディベロッパーにしか許可できないでしょう。

まあ、一応アカウント自体を分けて作っているわけですが。

取りあえずオンにしたので、この状態で様子見します。

 

2022-08-25(TH)プログラム修正、RangeTemp、RangeHumi を許容範囲に

設定温度に対して判定だとあまりに頻繁にエアコン制御が発生しているようなので、Range範囲内なら弱運転に変更しました。

また、除湿よりも冷房優先にしました。
除湿だと温度が下がりすぎてしまうようでして。

そもそも冷房かければ除湿もされるし。

あと、換気扇の制御は部屋にいない時は自動的に換気で良いのだけど、いるときに換気されると、勝手に温度、湿度共に上がって、無駄にエアコンのオンオフ制御が発生しています。

取りあえず、部屋にいるときは換気扇をONにしないことにしました。

とはいえ、外気の状況によってはオンにした方が良いときもあるでしょうから、もしかして気象庁のデータからPullして判定するかもしれません。

あと、get_aircon_status() とか、デバイスID指定して試してみましたが、エアコンのステータスは取れないようでした。そりゃあそうかなと。エアコン側からリモコンに情報発信していないでしょうから。

よって、ログから起動状態を推測するしかないかと。

あと、トークンとかでバイスのベタ打ちをやめます。そりゃあそうか。参考

なるほど。結局新エディタではスクリプトに書くことになっているような。参考

こちらをほぼ丸コピーして動くようにしました。

なんか微妙な感じもするけど、編集権限を厳密に管理することでセキュリティを担保することにします。

あと、何故かシートIDとTabIDあたりはベタ打ちでないとうまくうごかなかったような?

とりあえずこれで様子を見ます。

 

2022-08-18(TH)追加設定、HTTPshotcutをバッテリーセイバーから除外

 

MacrodroidからキックされているようだがPostが届いていない。ログを見ると。

 

よって、HttpShortcutsをバッテリー制御から除外してみました。

が、どうもそれでも届いていない気がします。

HttpShortsの設定でフォアグラウンドでリクエストを実行を許可しました。

アプリ外部からショートカットが機能しない場合に有効にとあるので。

それとは別に、ステータスsuccessの判定を削除。マニュアルでオンオフしたときにはステータスとか記録されていないので対応。

しかし、それでもPostされていない。Macrodroidのログは動いているのでHttpShotcutsが動いていないと思われます。

画面がアクティブの時は正常動作しました。つまりHttpShotcutsが画面上にいちいち出てこないといけない状態なんだろう。

バックグラウンドで実行時ポップアップの表示を許可。いや許可しない事にしました。でも動かない。

しょうがない・・・termuxでいくか 参考

 

#!/bin/bash
wget –header=’content-type: application/json’ –post-data ‘{JSONデータ}’ URI

リポジトリが使えない?参考

 

Termuxインストール参考

GooglePlay上のアプリはサポート切れしている模様。

F-DROID

 

こちらからは正常動作するようです。

Mirrors by Grimler をつかっています。リポジトリ

pkg install wget git curl proot yarn vim

 

と思ったらMacrodroidのHTTPリクエストにPOSTがあるじゃないか。

HTTP リクエストのアプリの事か?若干不明だが、見落としていただけかもしれない。

取りあえず、出来たっぽい

ただ、画面オフ状態から実行されるのかのチェックは必要だ。

 

ーーーーーーーーーーーーー

2022-08-15(MON)スクリプト作成中メモ

doPostのログが出なかったのでこちらを参考にGCPプロジェクトと紐づけ。

結果的にログは出たのだが、デプロイが反映されていないのに気づくのに結構嵌った。

要はデプロイを管理で画面で、「新バージョン」を選びなおさないとならなかった。

あと、今のIFTTT設定だとエリアに出入りしたときにスマホがビジーだと変更されないようでした。

よって、とりあえずMacrodoridとHttpShortcutsのショートカットで時間で判定しています。

Taskerプラグインでは動かなかったので仕方ないですが、どうもスマートじゃないので後に変更するかもしれないです。

あと、換気扇制御用のプラグを注文しました。

created by Rinker
¥1,980 (2022/09/29 10:45:54時点 楽天市場調べ-詳細)

 

2022-08-04(TH) エアコンをもう少し細かく制御できるようにしようかと

こちらを参考にスイッチボットのスクリプトをGASで作ろうと思います。

殆ど丸コピーで対応できたのだけど、一か所修正しないとリモコン(赤外線リモコン)のデバイスが表示できなかった。

修正箇所


//console.log(json['body']['deviceList'])//ログから取得したいdeviceIdを選んでください
console.log(json['body'])//ログから取得したいdeviceIdを選んでください

 

function switchBot

でエアコンを起動できることを確認しました。

よって次はエアコンの設定を変えて起動します。参考

オフィシャル

以下で25℃の除湿で起動を確認。

“command”: “setAll”,
“parameter”: “25,3,1,on”,
“commandType”: ‘command’

次は温湿度計の値を取得します。参考

GET https://api.switch-bot.com/v1.0/devices/XXXXXXXXXXXXXXX/status

こちらを利用して取得してみます。

普通に取得できました。

humidity: 63,
temperature: 29.4

GPSと連動させたいので、IFTTTとGASの連携を調査します。参考

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です