ユーザ用ツール

サイト用ツール


max3xx_tips:upload_di_state_to_harvest:start

以前のリビジョンの文書です


DI 変化で状態を SORACOM Harvest にアップロードする


MA-X3xx の DI の状態を監視し、変化があったときに監視対象の DI の状態を SORACOM Harvest サービスにアップロードするサンプルです。

DI to MQTT to SORACOM Harvest Data


アプリケーションの構成

このサンプルは、下記により構成されています。

  • MA-X3xx 内部の MQTT Broker(Mosquitto)
  • DI の状態を監視し、DI 状態変化時に MQTT Broker に DI の状態を Publish するアプリケーション(di_mqtt)
  • MQTT Broker を Subscibe し、DI の状態を受け取ったら SORACOM Harvest Data にアップロードするアプリケーション(mqtt_harvest)


アプリケーションの起動

DI to MQTT

監視したい DI のリストを定義した設定ファイルを作成します。

di_mqtt.conf
[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 


MQTT to SORACOM Harvest

DI を監視するコマンドと同じ設定ファイルを指定して、コマンドを実行します。

root@metis:/tmp# ./mqtt_soracom -c di_mqtt.conf 


MQTT テスト (確認用)

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” にセットするようになっています。


SORACOM コンソールで確認

アップロードされたデータを SORACOM コンソール で確認してみます。


きちんとアップロードされていることが確認できました。


ソースコード

サンプルアプリのコードです。

File Stat SHA1SUM Info
di_mqtt.tar.xz2023/06/22 19:23 8.5 KBf6d915c19bfcac942885c36ebe635e8cb455ae04DI to MQTT/MQTT to SORACOM Harvest
nim_gpiod.tar.xz2023/06/22 19:23 3.1 KB97eb2b65b748f4bd049a9a7e60ff157a88aa5127libgpiod wrapper library


How to Build

アプリケーションのビルド方法です。


必要なソフトウェアのインストール

C Compiler (build-essential)

ファームウェアの作成 でも必要なのでインストールしておきます。

Nim Compiler

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:~$ 

きちんとインストールされて実行できることが確認できました。


ソースコードの展開

適当なディレクトリ以下に、2 つのソースのアーカイブを展開します。

user1@max3xx-devel:~$ mkdir src
user1@max3xx-devel:~$ cd src/
user1@max3xx-devel:~/src$ 
max3xx_tips/upload_di_state_to_harvest/start.1687429481.txt.gz · 最終更新: 2023/06/22 19:24 by admin