ESP32上で動作する、擬似munin-nodeライブラリです。 ESP32をmunin-nodeとして動作させ、センサーの計測値など各種テレメトリを直接Muninに収集させることができます。

This software is released under the MIT License. 本ソフトウェアはMITライセンスでリリースされています。

概要

本ライブラリが動作するデバイスを擬似的にmunin-nodeとして動作させることができます。 これにより、Raspberry Piなどmunin-nodeを動作させるためのサーバーを別途用意せずにセンサーの計測値などを直接収集することができるようになります。

また、データ収集処理もスケッチ上で記述する実装となっているため、収集データごとにMunin pluginを用意する必要はなく、本ライブラリのみでデータ収集とMunin masterへの送信を行うことができます。

PseudoMuninNode
munin plugin
munin plugin
sensor
[Not supported by viewer]
ESP32
[Not supported by viewer]
munin-node
<div>munin-node</div>
Munin master
<div>Munin master</div>
sketch
sketch
Munin master
<div>Munin master</div>
sensor
[Not supported by viewer]
ESP32
[Not supported by viewer]
sketch
sketch
PseudoMuninNode
(munin-node & munin plugin)
[Not supported by viewer]

PseudoMuninNodeはサーバーの実装にWiFiServerを使用しています。 現在のところArduino + Ethernet Shieldには対応していません。

インストール方法

Arduino IDE

ZIPアーカイブからインストールする場合は、以下の手順でインストールしてください。

  1. ReleasesまたはClone or downloadよりZIPアーカイブをダウンロード
  2. Arduino IDEのメニュー[スケッチ] → [ライブラリをインクルード] → [.ZIP形式のライブラリをインストール]を選択
  3. ダウンロードしたZIPアーカイブファイルを選択して[OK]

PlatformIO

platformio lib installでインストールする場合は以下のとおりです。

platformio lib install https://github.com/smdn/PseudoMuninNode.git

platformio.inilib_depsに直接リポジトリを指定して追加する場合は以下のとおりです。

platformio.ini
[env:esp32dev]
lib_deps =
  https://github.com/smdn/PseudoMuninNode.git

使い方・サンプル

examplesディレクトリのサンプルスケッチを参照してください。

以下は、millis()関数の値をuptime値としてMuninに収集させ、グラフを作成する例です。

01_BasicUsage.ino
#include <WiFi.h>
#include <PseudoMuninNode.h>

// field definitions of munin plugin
PseudoMuninPluginField fields_uptime[] = {
  {
    .name = "uptime",
  },
};

// definitions of munin plugin
PseudoMuninPlugin plugins[] = {
  {
    .name = "uptime",
    // graph args (see http://guide.munin-monitoring.org/en/latest/example/graph/graph_args.html)
    .config = R"(graph_title Uptime
graph_category system
graph_args --base 1000 --lower-limit 0
graph_scale no
graph_vlabel uptime in milliseconds
uptime.label uptime [ms]
uptime.draw AREA)",
    .fields = fields_uptime,
    .numberOfFields = 1,
  },
};

// pseudo munin-node instance
PseudoMuninNode node = {
  .plugins = plugins,
  .numberOfPlugins = 1
};

constexpr char WIFI_SSID[] = "your_wifi_ssid";
constexpr char WIFI_PASSPHRASE[] = "your_wifi_passphrase";

void setup()
{
  Serial.begin(115200);
  while (!Serial);

  // setup WiFi
  WiFi.begin(WIFI_SSID, WIFI_PASSPHRASE);

  while (WiFi.status() != WL_CONNECTED)
    delay(100);

  // begin pseudo munin-node
  node.begin();
}

void loop()
{
  // update the value of 'uptime' field
  fields_uptime[0].value = millis();

  // wait a request from munin-update; respond commands and return values of field
  node.acceptClient();

  // write your own code here
  delay(100);
}

動作例

DHT11, AM2320, BME280の3種の温湿度センサーを接続し、その計測データをグラフ化した例です。

温度
湿度

動作状況

version 1.0.1の時点において、以下の環境・モジュールでの動作を確認しています。

モジュール
Wi-Fiモジュール ESP-WROOM-32 DIP化キット (秋月電子通商 AE-ESP-WROOM-32 (K-11755)) + 低損失三端子レギュレーター 3.3V1A TA48033S (秋月電子通商 TA48033S (I-00534))
ESP32-DevKitC ESP-WROOM-32開発ボード (秋月電子通商 ESP32-DevKitC (M-11819)) ※USBポートの使用状況(?)によってはBrownoutが発生する場合あり
IDE
Ubuntu 18.04 + PlatformIO 3.0.1
Ubuntu 18.04 + Arduino IDE 1.8.10
Munin master
Ubuntu 18.04 + Munin 2.0.37
Raspbian 9.11 + Munin 2.0.33-1

制限事項・特記事項

munin-nodeの以下のcapabilityには未対応です。

  • multigraph
  • dirtyconfig

本ライブラリはmunin-nodeとmunin-nodeプラグインを別途用意することなく、スケッチ上のコードのみで計測データを収集できるようにすること、特に、簡単にデバイスやセンサーのテスト・機能検証ができるようにすることを目的としています。

使用電力量やネットワークセキュリティなどの考慮は不十分なので、それらの要件がシビアな用途に用いる場合はご注意ください。

不具合・要望・質問等

不具合の報告、ライブラリに対する要望や提案等はissuesへお願いします。

READMEやコメント文の英文が微妙なので、pull requestで修正案を送ってもらえると助かります。

変更履歴

version 1.0.1 / 2019-11-24

  • 瑣末な修正

version 1.0.0 / 2019-11-24

初版

  • munin-nodeの下記コマンドをサポート
    • fetch
    • nodes
      • ただし、常にホスト名のみを返答
    • list
      • ただし、引数nodeは未対応、常に引数なしの場合と同様に返答
    • config
    • quit
    • cap
      • ただし、multigraph, dirtyconfigのネゴシエーションは未対応
    • version