以前のリビジョンの文書です
このサンプルは、下記により構成されています。
監視したい DI のリストを定義した設定ファイルを作成します。
[MQTT] HOST = localhost PORT = 51883 TOPIC = DI [DI] DI_0 = Raw DI_1 = Raw DI_2 = Raw DI_3 = Filtered DI_4 = Raw DI_5 = Raw DI_6 = Raw DI_7 = Raw DI_8 = Raw DI_9 = Raw DI_10 = Raw DI_11 = Raw
上記のような設定ファイルを指定して、コマンドを実行します。
root@metis:/tmp# ./di_mqtt -c di_mqtt.conf
DI を監視するコマンドと同じ設定ファイルを指定して、コマンドを実行します。
root@metis:/tmp# ./mqtt_soracom -c di_mqtt.conf
MQTT で publish されるデータを確認することもできます。
user1@metis:~$ nmqtt_sub -p 51883 -t DI
2つのコマンドを実行している状態で DI の状態を変化させると、MQTT Broker に DI の状態が publish され、それを MQTT Broker 経由で受け取ったプログラムが SORACOM Harvest Data にアップロードします。
MQTT 確認用で subscribe しているプログラムの出力
user1@metis:~$ nmqtt_sub -p 51883 -t DI DI: {"timestamp":1687424585957,"state":{"DI_10":0,"DI_3":0,"DI_8":0,"DI_0":0,"DI_5":0,"DI_4":0,"DI_6":0,"DI_9":0,"DI_11":0,"DI_7":0,"DI_1":0,"DI_2":0}}
syslog に SORACOM Harvest Data へアップロードした、というログも記録されます。
Jun 22 18:03:06 metis mqtt_soracom[8021]: upload: timestamp: 1687424585957 Jun 22 18:03:06 metis mqtt_soracom[8021]: upload: payload: {"DI_10":0,"DI_3":0,"DI_8":0,"DI_0":0,"DI_5":0,"DI_4":0,"DI_6":0,"DI_9":0,"DI_11":0,"DI_7":0,"DI_1":0,"DI_2":0} Jun 22 18:03:06 metis mqtt_soracom[8021]: upload: response code: 201 Created
※ “timestamp” は、SORACOM Harvest Data の timestamp に設定するため、データから抜き出して HTTP Header “X-Soracom-timestamp” にセットするようになっています。
サンプルアプリのコードです。
File | Stat | SHA1SUM | Info |
---|---|---|---|
di_mqtt.tar.xz | 2023/06/22 18:10 8.5 KB | c5330787fda94d5b77120c6c6a63cd9fe7bb7b3f | DI to MQTT/MQTT to SORACOM Harvest |
nim_gpiod.tar.xz | 2023/06/22 18:10 3.1 KB | f62136fd369a820d7205f379cfaf10db63e87839 | libgpiod wrapper library |
アプリケーションのビルド方法です。
ファームウェアの作成 でも必要なのでインストールしておきます。
Nim 言語 で記述しているので、Nim Compiler をインストール します。
user1@max3xx-devel:~$ curl https://nim-lang.org/choosenim/init.sh -sSf | sh choosenim-init: Downloading choosenim-0.8.4_linux_amd64 Prompt: Can choosenim record and send anonymised telemetry data? [y/n] ... Anonymous aggregate user analytics allow us to prioritise ... fixes and features based on how, where and when people use Nim. ... For more details see: https://goo.gl/NzUEPf. Answer: n Downloading Nim 1.6.12 from nim-lang.org [##################################################] 100.0% 0kb/s Extracting nim-1.6.12-linux_x64.tar.xz Extracting nim-1.6.12-linux_x64.tar Building Nim 1.6.12 Compiler: Already built Installed component 'nim' Installed component 'nimble' Installed component 'nimgrep' Installed component 'nimpretty' Installed component 'nimsuggest' Installed component 'testament' Installed component 'nim-gdb' Switched to Nim 1.6.12 choosenim-init: ChooseNim installed in /home/user1/.nimble/bin choosenim-init: You must now ensure that the Nimble bin dir is in your PATH. choosenim-init: Place the following line in the ~/.profile or ~/.bashrc file. choosenim-init: export PATH=/home/user1/.nimble/bin:$PATH user1@max3xx-devel:~$
最後の部分で指示されているように、PATH を設定しておきます。
user1@max3xx-devel:~$ nano -w .bashrc
※ 最後の行に追加しておきます。
実行できるように .bashrc を読み直し、実行の確認をしてみます。
user1@max3xx-devel:~$ source .bashrc user1@max3xx-devel:~$ nim -v Nim Compiler Version 1.6.12 [Linux: amd64] Compiled at 2023-03-10 Copyright (c) 2006-2023 by Andreas Rumpf git hash: 1aa9273640c0c51486cf3a7b67282fe58f360e91 active boot switches: -d:release user1@max3xx-devel:~$
きちんとインストールされて実行できることが確認できました。