前回は認証トークンを取得する事ができた。
今回は会社に設置してあるNETATMOが送信したWeather Stationsデータの 温度、湿度、二酸化炭素濃度 を取得する。
使用するNETATMO API
getstationsdata
APIを使ってみる
コード
前回のトークン取得コードを改造して、値を取得してみた
const axios = require('axios')
const qs = require('qs')
const axiosClient = axios.create({
baseURL: 'https://api.netatmo.com',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
/**
* トークン取得
*/
function getAccessToken() {
const auth = {
client_id: 'xxx',
client_secret: 'xxxxx',
username: 'xxx',
password: 'xxxx',
grant_type: 'password'
}
return axiosClient
.post('/oauth2/token', qs.stringify(auth))
.then(respons => {
console.log('Post token Success')
console.log(respons.data)
return respons.data.access_token
})
.catch(error => {
console.log('Post token Fail')
console.log(error.response.config)
console.log(error.response.data)
})
}
/**
* ステーションデータ取得
*/
function getStationsData(token) {
const param = {
access_token: token
}
return axiosClient
.post('api/getstationsdata', qs.stringify(param))
.then(respons => {
console.log('Post getstationsdata Success')
console.log(respons.data)
return respons
})
.catch(error => {
console.log('Post getstationsdata Fail')
console.log(error.response.config)
console.log(error.response.data)
})
}
// 取得開始
getAccessToken()
.then(token => getStationsData(token))
.then(station => console.log(station.data.body.devices[0].dashboard_data))
かなりのレスポンス量が返ってくるが、今回欲しいのはdashboard_data
の中にある。
温度/湿度/二酸化炭素濃度を得る
dashboardの中身
{ time_utc: 1547127010,
Temperature: 23.3,
CO2: 688,
Humidity: 28,
Noise: 46,
Pressure: 1004.5,
AbsolutePressure: 1004.5,
min_temp: 16.6,
max_temp: 24.9,
date_min_temp: 1547073639,
date_max_temp: 1547113757,
temp_trend: 'stable',
pressure_trend: 'down' }
現在の会社は、
- 温度は
Temperature
で23℃
- 湿度は
Humidity
で28%
- 二酸化炭素濃度は
CO2
で688
寒くて湿度が低すぎるが、二酸化炭素濃度はいい感じのようだ。
この記事を書いてる時間は夜だし誰もいないし当然か…
最後に
とりあえず欲しいデータは取得する事ができた。
あとはSlackに通知したり、スマートスピーカーから取得できるよう色々作っていきたい。
参考
API Reference Getstationsdata
https://dev.netatmo.com/resources/technical/reference/weather/getstationsdata