LoginSignup
1
1

More than 5 years have passed since last update.

ラズパイのDHCPの結果を知りたいのでMQTTゲートウェイのFujiを使った話

Last updated at Posted at 2015-08-08

Motivation

私の手持ちのラズパイはWiFiで起動時にDHCPでIPアドレス決めるのですが、時々サーバー運用テストの都合などで複数のDHCPサーバーが立っていることがあるのと、環境によってはモバイルルーターを使ってのデモや動作確認でDHCPサーバーからリースの情報取れないことがままあるのでMQTTで自己申告させようと思いました。

(追記:avahi-daemon使えばいいのでは、と、気づきましたがこのまま置いておきます。参考になる記事がありました> http://qiita.com/kasei-san/items/087e5b33207c214c8db6

MQTTゲートウェイのFujiを使おうと思ったのは、gopsutilのstatusのリポート機能を使えば、起動後は負荷監視もできるんじゃ、というスケベ根性です。

環境

  • Raspberry Pi 2+ (piユーザーのようなsudo可能なユーザーアカウントが使えると想定しています)
  • OS: Raspbian (uname -aの結果:Linux raspberrypi 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l GNU/Linux )
  • Fuji-gw: バージョン 0.2.3
  • 今回はMQTTブローカーに送られてきた情報を読むためにmqttcli ( https://github.com/shirou/mqttcli )を使っています

設定に必要な情報

  • MQTTブローカー: 自分でmosquitto立てましたが、登録すれば無料でも使えるsango.shiguredo.jpのサービスを使うのもいいと思います
  • ゲートウェイ名:ユニークな名前(自分にとっておぼえやすい名前の最後に-dhcpfinderとかつけると他と衝突しないと思います)
  • ユーザー名:認証が必要な場合(例えばsangoサービスを利用する場合必要になります)
  • パスワード:認証が必要な場合(これもsangoの場合必要になります)
  • ダミーデバイスのPayload:これを適当な値に初期化しておきます。今回はHelloworldとしておきました

Fujiをインストールします

githubで最新版のパッケージをダウンロードしてきます。今回は0.2.3のバージョンで https://github.com/shiguredo/fuji/releases のページからRaspberry Pi2用のパッケージfuji-gw_0.2.3_raspi2_arm7.debをダウンロードしてきました。

ダウンロードしてきたパッケージファイルをインストールします。

sudo dpkg -i fuji-gw_0.2.3_raspi2_arm7.deb

すると、実行可能なバイナリが/usr/local/bin/fuji-gw に保存され、デフォルトの設定ファイルが/etc/fuji-gw/config.ini に作られます。

設定ファイル雛形を作ります

デフォルトの設定ファイルを参考にして、たとえば /etc/fuji-gw/initial.ini という名前で次のような内容のファイルを作ります。認証が不要なブローカーの場合には、ユーザー名、パスワードの行はなくてもかまいません。

註:[status]以後はgopsutilを使ってCPUの負荷やメモリの利用状況を送信するようにしています。

[gateway]

    name = ゲートウェイ名

    max_retry_count = 7
    retry_interval = 3  # sec

[broker "br/1"]

    host = MQTTブローカーのホスト名
    port = 1883

    user = ユーザー名
    password = パスワード

    retry_interval = 10
    topic_prefix = ocao


[device "dora/dummy"]

    broker = br
    qos = 0

    interval = 300
    payload = Helloworld
    subscribe = true

[status]

    broker = mosq
    interval = 300

[status "cpu"]

    cpu_times = user, system, idle, nice, iowait, irq, softirq, guest

[status "memory"]

    virtual_memory = total, available, percent, used, free

起動時にIPアドレスをpayloadに埋め込む設定をする

/etc/rc.localに以下の設定を追加します。
ごちゃごちゃしたスクリプトですが、要するにFujiの設定ファイルで、発信する情報(payload)の部分を書き換えてからFujiを起動しているだけです。
なお、起動時にbackgroundで起動しないと、シリアルケーブルでつなごうとしたときにコンソールが表示されない、という問題が発生しますのでご注意を。

/bin/hostname -I > /tmp/__hostname_i
export _IP=`awk '{print $1}' /tmp/__hostname_i`
/usr/bin/perl -p -e "s/payload = Helloworld/payload = $_IP/ ;" /etc/fuji-gw/initial.ini > /etc/fuji-gw/ip.ini
/usr/local/bin/fuji-gw -c /etc/fuji-gw/ip.ini > /dev/null 2>&1 &

ラズベリーパイを再起動する

最初はコマンドラインから。以後は電源をつなぐだけで起動します。

sudo /sbin/shutdown -r -t 30 now

IPアドレスがpublishされてくるのを監視

mosquittto_subを使って、MQTTブローカーへ送信されてくるIPアドレスの情報を見てみます。
このとき、トピックはワイルドカードを使います。

$ mqttcli sub -u 認証用ユーザー名 -P 認証用パスワード -t "トピックのプレフィックス/ゲートウェイ名/#" 

実行結果

192.168.13.2

CPUの使用率を見てみよう

トピックとしてはゲートウェイ名以降を詳しく指定します

$ mosquitto_sub -h ブローカーサーバーホスト名 -u 認証用ユーザー名 -P 認証用パスワード -t 'プレフィックス/$SYS/gateway/ゲートウェイ名/cpu/cpu_times/(user|system|idle|nice|iowait|irq|softirq|guest)'
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1