可視化に悩む
センサを買ったけれどもグラフにしたり、アラートを出すにはどこかにデータを送ってためておく必要があった。
なんとなく検索して良さそうなサービスを探していたら、IIJさんのMachinistを見つけた。
Bearerでトークン付けてを送るだけなのでらくらく。
用意していたもの
- M5Stack
- M5Stack用環境センサユニット ver.2(ENV II)
- TVOC/eCO2 ガスセンサユニット
手順
つなげる
Grove(I2C)のハブがあるので、買っておく。スイッチサイエンスさんとかにある。
コードを書く
UIFlowのBlocklyだとごちゃごちゃなコードが生成されるので、シュッとPythonモードにする。
Machinistのドキュメントに従って、dict型にセンサから得たデータをどんどん入れていく。
from m5stack import *
from m5ui import *
from uiflow import *
import wifiCfg
import urequests
import time
import unit
import ujson
setScreenColor(0x000000)
env2_1 = unit.get(unit.ENV2, unit.PORTA)
tvoc_1 = unit.get(unit.TVOC, unit.PORTA)
status = None
url = 'https://gw.machinist.iij.jp/endpoint'
headers={'Content-Type':'application/json',
'Authorization':'Bearer <your token>'
}
SSID = '<your own SSID>'
password = '<password of SSID>'
wifiCfg.doConnect(SSID, password)
label0 = M5TextBox(0, 0, 'Init', lcd.FONT_Default, 0xFFFFFF, rotate=0)
while status is 'Succeeded' or status is None:
try:
wifiCfg.reconnect()
data = {'agent':'MySpace',
'metrics':[
{'name':'temperature','namespace':'Environment Sensor','data_point':{'value':env2_1.temperature}},
{'name':'pressure','namespace':'Environment Sensor','data_point':{'value': float(('%.2f'%float(env2_1.pressure / 33.86)))}},
{'name':'humidity','namespace':'Environment Sensor','data_point':{'value':env2_1.humidity}},
{'name':'TVOC','namespace':'Environment Sensor','data_point':{'value':tvoc_1.TVOC}},
{'name':'CO2','namespace':'Environment Sensor','data_point':{'value':tvoc_1.eCO2}},
{'name':'H2','namespace':'Environment Sensor','data_point':{'value':tvoc_1.H2}},
{'name':'Ethanol','namespace':'Environment Sensor','data_point':{'value':tvoc_1.Ethanol}}
]
}
label0.setText('sending...')
res = urequests.post(
url,
json = ujson.dumps(data),
headers = headers
)
finally:
res = res.json()
status = res['message']
label0.setText(str(status))
lcd.qrcode('https://app.machinist.iij.jp/dashboard', x=0, y=20, width=220, version=6)
time.sleep(300)
とりあえず5分おきにMachinistに送るようにsleepを300秒に設定。
画面になにもないのと寂しいので、dashboardのURLに遷移するQRコードを表示。