Skip to content

A CO2 Sensor (IO-DATA UD-CO2S) Reader using USB serial.

License

Notifications You must be signed in to change notification settings

northeye/chissoku

Repository files navigation

What is this

IO-DATA製CO2センサー UD-CO2S から測定データを読み取り、標準出力やMQTT等様々なデータレシーバへ出力するプログラムです。(Amazon.co.jp)

データの出力先は比較的簡単に追加実装することができます。1

Install

with go install

$ go install github.com/northeye/chissoku@v2

Download binary

リリースページからダウンロー
ド。

How to use

デバイスを接続してシリアルポートの確認をしておきます。
コマンドライン引数にシリアルポートのデバイス名を指定して実行します。

シリアルデバイスが /dev/ttyACM0 の場合 (Linux等)

$ ./chissoku -q /dev/ttyACM0 --tags Living
{"co2":1242,"humidity":31.3,"temperature":29.4,"tags":["Living"],"timestamp":"2023-02-01T20:50:51.240+09:00"}

シリアルデバイスが COM3 の場合(Windows)

C:\> chissoku.exe -q COM3 --tags Living
{"co2":1242,"humidity":31.3,"temperature":29.4,"tags":["Living"],"timestamp":"2023-02-01T20:50:51.240+09:00"}

※ センサーデータ(JSON)以外のプロセス情報は標準エラー(stderr)に出力されます。

with Docker image

$ docker run --rm -it --device /dev/ttyACM0:/dev/ttyACM0 ghcr.io/northeye/chissoku:latest [<options>] /dev/ttyACM0

docker-compose.yml sample

version: '3.3'
services:
  chissoku:
    container_name: chissoku
    image: ghcr.io/northeye/chissoku:2.0
    restart: always
    devices:
      - "/dev/ttyACM0:/dev/ttyACM0"
    command: --output=mqtt --mqtt.address=tcp://mosquitto:1883 --mqtt.topic=co2/room1 --mqtt.client-id=chissoku-room1 --tags=Room1 /dev/ttyACM0
    network_mode: bridge
    environment:
      TZ: 'Asia/Tokyo'

Outputter

--output オプションにより出力メソッドを指定することが可能です。
現在用意されているメソッドは stdout, mqtt で、複数指定することも可能です。

$ chissoku --output=stdout,mqtt --mqtt.address tcp://mosquitto:1883/ --mqtt.topic=sensors/co2 --mqtt.qos=2 /dev/ttyACM0

何も指定しなければデフォルトとして stdout が選択されます。

outputter にはそれぞれオプションが指定可能な場合があります。
outputter のオプションは基本的に outputter の名前がプレフィックスになっています。

今後ファイルやクラウド出力等のメソッドが実装されるかもしれません。

Stdout Outputter

コマンドラインオプションの --output=stdout により標準出力にデータを流せます。

オプション 意味
--stdout.interval=INT データを出力する間隔(秒)(default: 60)
--stdout.iterations=INT データを出力する回数(default: 0(制限なし))

MQTT Outputter

コマンドラインオプションの --output=mqtt により MQTTブローカーへデータを流せます。
必要な場合はSSLの証明書やUsername,Passwordを指定することができます。

オプション 意味
--mqtt.interval=INT データを出力する間隔(秒)(default: 60)
--mqtt.address=STRING MQTTブローカーURL (例: tcp://mosquitto:1883, ssl://mosquitto:8883)
--mqtt.topic=STRING Publish topic (例: sensors/co2)
--mqtt.client-id=STRING MQTT Client ID default: chissoku
--mqtt.qos=INT publish QoS default: 0
--mqtt.ssl-ca-file=STRING SSL Root CA
--mqtt.ssl-cert=STRING SSL Client Certificate
--mqtt.ssl-key=STRING SSL Client Private Key
--mqtt.username=STRING MQTT v3.1/3.1.1 Authenticate Username
--mqtt.password=STRING MQTT v3.1/3.1.1 Authenticate Password

Tips

MQTT メソッドがうまく動かなければ標準出力を mosquitto_pub などに渡せばうまくいくかもしれません。

Global options

オプション 意味
-o, --output=stdout,... 出力メソッドの指定(default: stdout)
-q, --quiet 標準エラーの出力をしない
-t, --tags=TAG,... 出力するJSONに tags フィールドを追加する(コンマ区切り文字列)
-h, --help オプションヘルプを表示する
-v, --version バージョン情報を表示する
-d, --debug デバッグログの出力を行う

CONTRIBUTING

適当にPR送ってください。

Footnotes

  1. v2.0.0 から出力先の追加実装をしやすくするためプログラム設計を見直しました。
    output.Outputter インターフェースを実装した構造体を Chissoku 構造体メンバに埋め込むだけで追加できるようになりました。
    既存の機能に影響のない範囲でPRを投げてくだされば対応します。