Skip to content

Commit

Permalink
refactor!: overhaul program.
Browse files Browse the repository at this point in the history
    This release makes easy to add additional outputter,
    however incompatible cli options.
  • Loading branch information
takuo committed Dec 20, 2023
1 parent 1f387e7 commit ab96696
Show file tree
Hide file tree
Showing 19 changed files with 647 additions and 377 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
- name: setup-go
uses: actions/setup-go@v3
with:
go-version: '1.20'
go-version: '1.21'
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ jobs:
with:
token: ${{ secrets.GH_PAT }}
release-type: 'go'
extra-files: version.go
extra-files: cmd/chissoku/version.go
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
chissoku
./chissoku
*.exe
./release
*-report.xml
6 changes: 4 additions & 2 deletions Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ build:
ARG TARGET_OS=$(go env GOOS)
ARG TARGET_ARCH=$(go env GOARCH)
WORKDIR /workspace/build
COPY go.* *.go ./
RUN GOOS=$TARGET_OS GOARCH=$TARGET_ARCH go build .
COPY go.mod go.sum .
RUN go mod download
COPY . .
RUN GOOS=$TARGET_OS GOARCH=$TARGET_ARCH go build ./cmd/chissoku
RUN mkdir -p release
IF [ "$TARGET_OS" = "windows" ]
RUN 7zr a release/chissoku-$(go run . -v)-windows-$TARGET_ARCH.7z chissoku.exe
Expand Down
79 changes: 50 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ IO-DATA製CO2センサー [UD-CO2S](https://www.iodata.jp/product/tsushin/iot/ud

### with go install

```sh
$ go install github.com/northeye/chissoku@latest
```console
$ go install github.com/northeye/chissoku/cmd/chissoku@v2
```
### Download binary

Expand All @@ -19,58 +19,79 @@ $ go install github.com/northeye/chissoku@latest
コマンドライン引数にシリアルポートのデバイス名を指定して実行します。

シリアルデバイスが `/dev/ttyACM0` の場合 (Linux等)
```sh
$ ./chissoku /dev/ttyACM0 --tags Living
I: Prepare device... STP ID? STA OK.
```console
$ ./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)
```cmd.exe
C:\> chissoku.exe COM3 --tags Living
I: Prepare device... STP ID? STA OK.
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

```sh
```console
$ docker run --rm -it --device /dev/ttyACM0:/dev/ttyACM0 ghcr.io/northeye/chissoku:latest /dev/ttyACM0 [<options>]
```
※ そもそもシングルバイナリなのでdockerで動かす意味はないかと思います。

### with MQTT broker
### Outputter

下記のコマンドラインオプションによりMQTTブローカーへデータを流せます。
MQTTアドレスに何も指定しなければ送信しません
`--output` オプションにより出力メソッドを指定することが可能です。<br>
現在用意されているメソッドは `stdout`, `mqtt` で、複数指定することも可能です

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

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

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

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

### Stdout Outputter

コマンドラインオプションの `--output=stdout` により標準出力にデータを流せます。<br>
|オプション|意味|
|----|----|
|--stdout.interval=`INT`|データを出力する間隔(秒)(`default: 60`)|

### MQTT Outputter

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

|オプション|意味|
|----|----|
|-m,--mqtt-address=`STRING`|MQTTブローカーURL (例: `tcp://mosquitto:1883`, `ssl://mosquitto:8883`)|
|-t, --topic=`STRING`|Publish topic (例: `sensors/co2`)|
|-c, --client-id=`STRING`|MQTT Client ID `default: chissoku`|
|-q, --qos=`INT`|publish QoS `default: 0`|
|--cafile=`STRING`|SSL Root CA|
|--cert=`STRING`|SSL Client Certificate|
|--key=`STRING`|SSL Client Private Key|
|-u, --username=`STRING`|MQTT v3.1/3.1.1 Authenticate Username|
|-p, --password=`STRING`|MQTT v3.1/3.1.1 Authenticate Password|

### Other options
|--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](https://mosquitto.org/man/mosquitto_pub-1.html) などに渡せばうまくいくかもしれません。

### Global options

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

## Tips

MQTTがうまく動かなければ標準出力を [mosquitto_pub](https://mosquitto.org/man/mosquitto_pub-1.html) に渡せばうまくいくかもしれません。
Loading

0 comments on commit ab96696

Please sign in to comment.