오피스의 CO2(이산화탄소) 농도를 측정하여 Slack Bot에 말한다
요약
측정하고 시각화하는 것을 좋아하기 때문에, 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 측정기를 설치해 주어 두통이 하거나 할 때에는 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
측정해 보았던 것
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농도가 되면 숨이 아프거나 두통 등이 나옵니다.
ㅇㅇㅇㅇㅇㅇㅇ jp / 코 2 - 모토와 r 앤 d 에코 / 헤아 lth-s 단지 rds /
에 따르면
3000PPM~:頭痛、めまいなどの症状が出て、長時間では健康に危害を及ぼすレベル
日常では起こりません。工場や厨房などで気をつけるレベルです。
周辺で火災やぼやが起きている可能性が想定されます。
비일상감이 있다고 생각하면 안의 정이었습니다.
Reference
이 문제에 관하여(오피스의 CO2(이산화탄소) 농도를 측정하여 Slack Bot에 말한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/anzaitetsu/items/60a99e5a631fa99b0ac3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)