💭

家の相対湿度が80%近いのでSwitchBot APIから部屋の絶対湿度を計算した

2021/07/03に公開

背景

湿度79%記録。カビ怖い。現状知りたい。

データソース

APIのGithub

https://github.com/OpenWonderLabs/SwitchBotAPI

このAPIを使って部屋の気温と湿度を得る。
1日1000回まで。

絶対湿度を求めるために必要な式

絶対湿度と言っても、2種類あるらしい。国際的に使われている容積絶対湿度を求めることにする。

  1. 気温から飽和水蒸気圧e(T)を求める
  2. 飽和水蒸気圧e(T)と相対湿度%RHから水蒸気圧Pwを求める
  3. 水の分子量を気圧と温度から求める(一旦1気圧として扱う)
  4. 水蒸気圧と気温から容積絶対湿度VH[g/m3]を求める

1 飽和水蒸気圧

Wikipedia:飽和水蒸気量 にある飽和水蒸気圧の計算式

e(T) = 6.1078 \times 10^{\frac{7.5 \times T}{T+237.3}}

Tetens(1930)の式というらしい。

2 水蒸気圧

Pw = 飽和水蒸気圧e(T) \times 相対湿度RH

3 乾燥空気の密度

\frac{気圧 \times 100}{287\times(273.15+T)}

今回はこの計算は近似値として飛ばすが、いつか計算したいのでメモしています。

4 容積絶対湿度

Wikipedia:湿度にある近似値計算式

VH = \frac{水蒸気圧Pw \times 100}{(T+273.15)\times8.31447} \times 18(水の分子量)

参考にしたサイト

Wikipedia:飽和水蒸気量
Wikipedia:湿度
(株)ミストラル:絶対湿度の計算

進め方

SwitchBot APIからデータ取得

SwitchBotのアプリからTokenをゲット

デバイス一覧APIから温湿度計のデバイスIDをゲット

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

デバイスの気温と湿度をゲット

GET https://api.switch-bot.com/v1.0/devices/デバイスID/status
{
   "body" : {
      "deviceId" : "デバイスID",
      "deviceType" : "Meter",
      "hubDeviceId" : "E・・・・・",
      "humidity" : 62,
      "temperature" : 26.3
   },
   "message" : "success",
   "statusCode" : 100
}

取れたっ。
除湿機かけてるので今62%だ。

難しい計算させる

とりあえず手軽なGoogle スプレッドシートで

1 飽和水蒸気圧

=6.1078*POW(10, 7.5*B2/(B2+237.3))

2 水蒸気圧

=D2*C2/100

4 容積絶対湿度

=E2*100/(B2+273.15)/8.31447*18

よしよし。

お手軽にGASで自動算出

できた。1時間ごとに起動するトリガーもセットした。
1時間前と比べて除湿機がまともに動いていることを確認できた。(これが目的だったっけ、、、)

function addRowTempHumitidy() {
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheets()[0] // 一番左のシート
  var tempHumidity = getTempHumidity();
  if(tempHumidity == null) {
    Logger.log("温度と湿度が取れませんでした。")
    return
  }
  sheet.appendRow([
    new Date(),
    tempHumidity[0],
    tempHumidity[1],
    '=6.1078*POW(10, 7.5*INDIRECT("RC[-2]",false)/(INDIRECT("RC[-2]",false)+237.3))', 
    '=INDIRECT("RC[-1]",false)*INDIRECT("RC[-2]",false)/100',
    '=INDIRECT("RC[-1]",false)*100/(INDIRECT("RC[-4]",false)+273.15)/8.31447*18'
  ]);
}

function getTempHumidity() {
    var params = 
      {
        "method": "GET",
        "headers": {
          "Authorization": AUTH_TOKEN
        }
      }
    var url = SWITCHBOT_API_URL + "/devices/" + DEVICE_ID + "/status"

    var res = UrlFetchApp.fetch(url, params);
    res = JSON.parse(res)
    if (res.message != "success") {
      return
    }
    return [res.body.temperature, res.body.humidity]
}

ここからは余談。この数字をどう使うのか

冬はインフルエンザを気にする

寒い時期はインフルエンザの活動を基準に7 g/m^3 以上目指すことにします。

梅雨と夏はカビ

カビは水分の量が空気中から取りやすい状態だと育ちが早いそうだ、そのため相対湿度を下げることが良いらしい。相対湿度が高いと、空気からカビが水を飲みやすいのだそうだ。[1]

活動気温は20−40℃。この気温は人間にとって快適な気温が含まれているので、相対湿度をコントロールする必要がある。カビの種類によるが、70%弱を上回ると活動しやすくなるので、65%以下を目指せば良い気がします。

カビ対策に相対湿度のコントロール

相対湿度は、気温が下がると上がるので、気温が下がりすぎないように除湿機を稼働させる必要がある。
幸い、除湿機を使うと気温が高くなる。

なので、SwitchBotのアプリで以下の設定にしておこう。

湿度 63% を越えたら気温を上げる=エアコンを止める。除湿機だけにする。
暑すぎるといやなので、気温が28℃を越えたらエアコンの除湿をつける。

ではでは。

脚注
  1. 日本家庭用洗剤工業会 カビを用いた室内環境の調査「カビ指数による環境評価」 環境生物学研究所 所長 農学博士 阿部惠子 氏
    http://www.senjozai.jp/05_shiryo/kabikyo.kouen/kouen03/1_kouen03.html ↩︎

Discussion