この記事は、「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アドレスが入ります。
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
+ [plugin.metrics.switch-meter]
+ command = "python3 /path/to/swithbot-meter.py"
+ user = "pi"
2.2. mackerel-agentを再起動する 🔗
sudo systemctl restart mackerel-agent
結果 🔗
しばらくするとグラフが出てきました。
おわりに 🔗
後ほど追記します。。。