Custom製 CO2-miniからのデータ取得(その3)

今回は、Pythonコードを用いて実際にデータを取得するプログラムを記載したいと思います。まずプロトコル解析ですが興味深いページを発見しました。

Reverse-Engineering a low-cost USB CO₂ monitor
I'mtryingtogetdataoutofarelativelylow-cost(80€)CO₂monitorthatappearstohaveaUSBconnectionfordataaswellasforpower

ご丁寧に通信プロトコルを解析し、githubにコードまでアップされています。

GitHub - henryk/fhem-co2mini: FHEM module to read CO2 measurement data from a co2mini like device
FHEMmoduletoreadCO2measurementdatafromaco2minilikedevice-henryk/fhem-co2mini

また、これとは別にPython用のライブラリとして、githubにコードがアップされていることも分かりました。

GitHub - heinemml/CO2Meter: Python Module to use co2meter code derived from https://hackaday.io/project/5301-reverse-engineering-a-low-cost-usb-co-monitor
PythonModuletouseco2metercodederivedfrom-heinemml/CO2Meter

ただいずれもLinuxを前提としており、Windows環境では、そのままでは動作しません。元々考えていたターゲットはRaspberryPIですので、ここでWindows環境のプログラム作成は早々にあきらめ、Linuxでの確認です。

用意したRaspberryPIにはPython3のみが入っているようなので、開発環境とpip3をインストールします。

$ sudo apt-get -y install python3-dev
$ sudo apt-get -y install python3-pip

先のPython用ライブラリを用いてインストールしていきます。

$ sudo pip3 install git+https://github.com/heinemml/CO2Meter

次にviエディターでコードを記載してみます。

#!/bin/env python
 from CO2Meter import *
 from datetime import datetime
 import time
 Meter = CO2Meter("/dev/hidraw0")
 while True:
     measurement = Meter.get_data()
     measurement.update({'timestamp': datetime.now()})
     print(measurement)
     time.sleep(5)

実行結果は次の通り。ん~、簡単にデータを取得することができました。簡易な暗号化などの解析内容は、先人たちのご苦労をありがたく頂戴し、そのまま使用させていただきます。

{'co2': 1606, 'temperature': 22.225000000000023, 'timestamp': datetime.datetime(2020, 1, 8, 2, 8, 29, 594878)}
{'co2': 1606, 'temperature': 22.225000000000023, 'timestamp': datetime.datetime(2020, 1, 8, 2, 8, 34, 600528)}
{'co2': 1606, 'temperature': 22.225000000000023, 'timestamp': datetime.datetime(2020, 1, 8, 2, 8, 39, 605980)}

あとは得られたデータを所定のサーバ、所定のプロトコルで送るのみです。サイネージとしての簡単なWEB画面を作成し、得られた値を表示したものは次の通りです(「快適な環境です」のところはスクロール)。

このシリーズは、これで終了です。