Raspberry Piを使ってSwitchBot 温湿度計のデータをMackerelで可視化する
2020/12/16
この記事は、「Raspberry Pi Advent Calendar 2020」16日目の記事です。
はじめに
最近、SwitchBot 温湿度計を購入しました。
いろいろ連携させるためには別でSwitchBotハブというものが必要みたいで、急遽代わりにRaspberry Piも購入しました。
(SwitchBotハブではなくRaspberry Piを購入した理由は、スマートリモコンはNature Remoを使っているのでいらなかったのとRaspberry Piなら他にも有効活用できると思ったので。)
今回はRaspberry Piを使って温度や湿度をMackerelで可視化してみたという記事です。
SwitchBot 温湿度計
SwitchBot(スイッチボット) 温湿度計,スマホで温湿度管理,スマート家電, Alexa, GoogleHome, IFTTT対応
手順
各種バージョン
- Raspberry Pi OS: 10.6
- Python: 3.7.3
- pip: 18.1
- mackerel-agent: 0.70.3
1. SwitchBot 温湿度計のデータを読み取るスクリプトを作成する
既に実装されている方がいらしたので、参考にさせていただきました。(参考にリンク貼ってあります。)
そのままmackerel-agentで使えるフォーマットで値を出力しています。
{metric name}\t{metric value}\t{epoch seconds}
1.1. 必要なパッケージをインストール
$ sudo apt-get install libglib2.0-dev
1.2. bluepyのインストール
$ pip3 install bluepy
1.3. bluepy-helperにsudo権限を付与する
$ sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper
1.4. SwitchBot 温湿度計のMACアドレスを確認する
SwitchBot公式アプリで確認することができます。別記事で書いたのでそちらを参照してください。1
1.5. 作成したコード
変数macaddr
には1.4で調べた温湿度計のMACアドレスが入ります。
swithbot-meter.py
import binascii
from bluepy.btle import Scanner, DefaultDelegate
import time
macaddr = 'xx:xx:xx:xx:xx:xx'
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if dev.addr != macaddr: return
for (adtype, desc, value) in dev.getScanData():
if (adtype != 22): continue
servicedata = binascii.unhexlify(value[4:])
battery = servicedata[2] & 0b01111111
temperature = (servicedata[3] & 0b00001111) / 10 + (servicedata[4] & 0b01111111)
isTemperatureAboveFreezing = servicedata[4] & 0b10000000
if not isTemperatureAboveFreezing:
temperature = -temperature
humidity = servicedata[5] & 0b01111111
print('\t'.join(['switchbot.meter.battery', str(battery), str(time.time())]))
print('\t'.join(['switchbot.meter.temperature', str(temperature), str(time.time())]))
print('\t'.join(['switchbot.meter.humidity', str(humidity), str(time.time())]))
exit()
scanner = Scanner().withDelegate( ScanDelegate() )
scanner.scan(10)
$ python3 swithbot-meter.py
switchbot.meter.battery 100 1608048131.531135
switchbot.meter.temperature 21.5 1608048131.5313609
switchbot.meter.humidity 40 1608048131.5314553
2. MackerelにSwitchBot 温湿度計のデータを送信する設定をする
Raspberry Piにmackerel-agentをインストールする方法は別記事で書いたのでそちらを参照してください。2
2.1. mackerel-agentの設定ファイルに追記する
$ sudo vim /etc/mackerel-agent/mackerel-agent.conf
/etc/mackerel-agent/mackerel-agent.conf
+ [plugin.metrics.switch-meter]
+ command = "python3 /path/to/swithbot-meter.py"
+ user = "pi"
2.2. mackerel-agentを再起動する
sudo systemctl restart mackerel-agent
結果
おわりに
後ほど追記します。。。