오피스의 CO2(이산화탄소) 농도를 측정하여 Slack Bot에 말한다

14965 단어 슬랙netatmoIoTHubot

요약



측정하고 시각화하는 것을 좋아하기 때문에, Netatmo + Netatmo API + hubot 로 slack에 오피스의 온도·습도·이산화탄소 농도를 통지해 쾌적한 오피스 환경을 유지할 수 있도록 했습니다.

센서를 갖추어 Raspberry Pi를 사용하여 실현도 가능합니다만, 교정이나 운용을 생각하면 Netatmo를 사서 빨리 API로 연결해 버리는 편이 편하고 하드의 지식도 불필요하므로 추천입니다.



운용 개시 후는, Slack상에서 Bot가 CO2 농도를 가르쳐 주므로, 눈치채는 사람이 말을 걸어 수시로 환기되는 문화?가 생겨, 대체로 1000ppm 정도로 유지되게 되었습니다.

배경



저녁이 되면 두통이 되는, 집중력이 끊어지는, 같은 증상에 시달리고 있지 않습니까?
제가 일하고 있는 회사도 멤버가 늘어나면서 저녁이 되면 두통이거나 공기가 나쁜 느낌이 든다는 것에 고민하고 있었습니다.

추측하지 말고 계측하라, 라고 하는 것으로 인프라팀이 측정을 위해, 거치식의 CO2 측정기를 설치해 주어 두통이 하거나 할 때에는 1000ppm을 넘는 이산화탄소 농도가 되어 있는 것이 많다, 알았습니다.

다만, 거치식이라면 일일이 보러 가야 하고, Slack상에서 거의 생활하고 있으므로 Slack상에서 환경 측정한 결과를 볼 수 있도록(듯이) 하고 싶다고 하는 것으로 몇개인가 검토했습니다.

부품에서 조립해도 좋았습니다만, 간단하게 실현하기 위해, 기존의 제품으로 API로 데이터를 잡을 수 있는 NetAtmo를 구입했습니다(자부).

구입한 것



Netatmo Weather Station
htps //w w. 네타 t도. 코 m / 자 - JP / p 로즈 ct / 우우 아테 r-s

Wifi에 연결하여 클라우드에 데이터를 축적할 수 있고, 그것을 취득하는 API가 있어 센서의 데이터를 얻을 수 있다는 것이 키모입니다.
htps : //에서 v. 네타 t도. 코 m / 두 c

자복하면 높기 때문에 회사에서 사 주시면 좋네요.
이 기사를 의의서에 첨부해 사내 의의에 활용해 주세요.

구현



npm



netatmo 패키지가 있으므로 그대로 사용합니다. 측정 결과는 클라우드에 있으므로 최신 데이터를 API로 검색하면 됩니다.
htps //w w. 음 pmjs. 코 m / 파 c 카게 / 네타 t



hubot-script (발췌)



「이산화탄소」「CO2」등에 반응하도록 하고 있습니다.
인플루엔자의 시기는 예방을 위해 습도의 조언도 하도록.
선인의 코드를 복사한 엉성한 코드입니다만 참고가 되면.

Netatmo = require('netatmo')
moment = require('moment')

options_office =
  device_id: 'xxxxx'
  scale: "max"
  type: [
    "Temperature"
    "CO2"
    "Humidity"
    "Pressure"
    "Noise"
  ]
  date_end: "last"

options_outdoor =
  device_id: 'xxxxx'
  scale: "max"
  type: [
    "Temperature"
    "Humidity"
  ]
  date_end: "last"
  module_id: 'xxxxx'

moment.lang 'ja',
  {weekdays: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
  weekdaysShort: ["日","月","火","水","木","金","土"]}


module.exports = (robot) ->

  netatmo_api = new Netatmo config

  measureMessageOffice = (msg, opt_str="") ->
    netatmo_api.getMeasure options_office, (err, measure) ->
      temperature = measure[0]['value'][0][0]
      co2 = measure[0]['value'][0][1]
      humidity = measure[0]['value'][0][2]
      pressure = measure[0]['value'][0][3]
      noise = measure[0]['value'][0][4]

      result_comment = if co2 > 2000 then "\n空気悪っ!換気しましょう!オフィスのCO2濃度は1000ppmが目安です。1000ppm超えると眠くなるよ!" else ''

      measure_time = moment.unix(measure[0]['beg_time']).format("YYYY年MM月DD日(ddd) HH:mm:ss ")
      msg.send opt_str + "#{measure_time}に測定した室内環境\\( ❛ө❛)\/\n温度 #{temperature}\n湿度 #{humidity}%\nCO2 #{co2}ppm\n気圧 #{pressure}hPa\n騒音 #{noise}dB" + result_comment

  measureMessageOutdoor = (msg, opt_str="") ->
    netatmo_api.getMeasure options_outdoor, (err, measure) ->
      temperature = measure[0]['value'][0][0]
      humidity = measure[0]['value'][0][1]

      measure_time = moment.unix(measure[0]['beg_time']).format("YYYY年MM月DD日(ddd) HH:mm:ss ")
      msg.send opt_str + "#{measure_time}に測定した外の  温度 #{temperature}℃  湿度 #{humidity}%"

  robot.hear /(CO2|二酸化炭素|空気悪い|換気|苦しい)/i, (msg) ->
    measureMessageOffice(msg)

  robot.hear /インフル/i, (msg) ->
    measureMessageOffice(msg, "インフルエンザの流行を防ぐには換気と湿度50%以上にするのが有効である\n")

  robot.respond /外の気温/i, (msg) ->
    measureMessageOutdoor(msg)


  netatmo_api.on 'error', (e) ->
    console.error e

측정해 보았던 것


  • 거치형 CO2 측정기라면 3000ppm이 최대였지만 NetAtmo라면 3000ppm 이상에서도 측정할 수 있었습니다. 5000ppm까지 측정할 수 있는 사양이므로 상당히 좋은 센서를 사용하고 있는 것 같습니다.


  • 참고로 외기온도 측정할 수 있도록 했습니다만, 거의 사용되지 않았습니다.
  • 측정은 10분에 1회이므로 환기하여 반영될 때까지 조금 기다립니다.
  • 대체로 2000ppm을 넘으면 두통이 되거나 머리가 멍하니 하는 사람이 늘어나는 것 같습니다. 오피스는 1000ppm가 기준이라고 합니다만, 1000ppm 이하로 유지하는 것은 상당히 힘들고 항상 바람이 빠지는, 정도가 아니면 안됩니다.
  • 반년 이상 운용하고 있습니다만, NetAtmo는 동결 없이 안정적으로 측정할 수 있습니다.

  • 덧붙여서 최고 기록



    이 정도의 CO2농도가 되면 숨이 아프거나 두통 등이 나옵니다.



    ㅇㅇㅇㅇㅇㅇㅇ jp / 코 2 - 모토와 r 앤 d 에코 / 헤아 lth-s 단지 rds /
    에 따르면
    3000PPM~:頭痛、めまいなどの症状が出て、長時間では健康に危害を及ぼすレベル
    日常では起こりません。工場や厨房などで気をつけるレベルです。
    周辺で火災やぼやが起きている可能性が想定されます。
    

    비일상감이 있다고 생각하면 안의 정이었습니다.

    좋은 웹페이지 즐겨찾기