ホーム » t-saitoh の投稿 (ページ 21)

作者アーカイブ: t-saitoh

システム

最近の投稿

アーカイブ

カテゴリー

村国山⛰ウォーキング

今シーズン最初の山ウォーキング

{CAPTION}

{CAPTION}

{CAPTION}

{CAPTION}

{CAPTION}

ウォーキングの後は、越前たけふ駅の道の駅に寄り道。

リモート監視 nagios-nrpe を使ってみる

Raspberry-Pi で WiFi スキャンをさせたいけど、警告を出すために raspberry-pi 側に nagios4 のような本格的な監視システムを入れるのは資源のムダに思えたので、軽量な監視とすべく、リモート監視用の nagios-nrpe-server を使ってみた。

メインサーバ                port=5666 リモート    監視プラグイン
  nagios4 ----> check_nrpe ------------> nrpe ----> check_root
            nagios-nrpe-plugin     nagios-nrpe-server

nrpe は リモートの監視プラグインを check_nrpe と nagios-nrpe-server が経由して呼出してくれる。

リモートの監視側

nagios-nrpe-server をインストールして、監視サーバからの接続を許可する。インターネット経由で監視するなら、5666 ポートが通るようにファイアウォールの設定が必要。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( 必要パッケージのインストール )))
$ sudo aptitude install nagios-nrpe-server
((( /etc/nagios/nrpe.cfg )))
# 監視サーバからの接続を許可
allowed_hosts=127.0.0.1,::1,192.168.xx.00/24
~~~~~~~~~~~~~~~~~(追加)
((( /etc/nagios/nrpe.d/enabled.cfg )))
# 監視するためのチェック処理を登録。nrpe.cfg から nrpe.d/*.cfg に設定を移動
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_load]=/usr/lib/nagios/plugins/check_load $ARG1$
((( /etc/default/nagios-nrpe-server )))
# 自宅内のような閉じた中でSSLが不要の場合
NRPE_OPTS="-n"
((( nagios-nrpe-server を再起動 )))
$ sudo systemctl restart nagios-nrpe-server
((( 必要パッケージのインストール ))) $ sudo aptitude install nagios-nrpe-server ((( /etc/nagios/nrpe.cfg ))) # 監視サーバからの接続を許可 allowed_hosts=127.0.0.1,::1,192.168.xx.00/24 ~~~~~~~~~~~~~~~~~(追加) ((( /etc/nagios/nrpe.d/enabled.cfg ))) # 監視するためのチェック処理を登録。nrpe.cfg から nrpe.d/*.cfg に設定を移動 command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p / command[check_load]=/usr/lib/nagios/plugins/check_load $ARG1$ ((( /etc/default/nagios-nrpe-server ))) # 自宅内のような閉じた中でSSLが不要の場合 NRPE_OPTS="-n" ((( nagios-nrpe-server を再起動 ))) $ sudo systemctl restart nagios-nrpe-server
((( 必要パッケージのインストール )))
$ sudo aptitude install nagios-nrpe-server

((( /etc/nagios/nrpe.cfg )))
# 監視サーバからの接続を許可
allowed_hosts=127.0.0.1,::1,192.168.xx.00/24
                           ~~~~~~~~~~~~~~~~~(追加)
((( /etc/nagios/nrpe.d/enabled.cfg )))
# 監視するためのチェック処理を登録。nrpe.cfg から nrpe.d/*.cfg に設定を移動
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_load]=/usr/lib/nagios/plugins/check_load $ARG1$

((( /etc/default/nagios-nrpe-server )))
# 自宅内のような閉じた中でSSLが不要の場合
NRPE_OPTS="-n"
((( nagios-nrpe-server を再起動 )))
$ sudo systemctl restart nagios-nrpe-server

メインの監視サーバ側

nrpe用のプラグインをインストールすると、/etc/nagios-plugins/config/check_nrpe.cfg や /usr/lib/nagios/plugins/check_nrpe を入れてくれる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( 監視側にnrpe用のプラグインを追加 )))
$ sudo aptitude install nagios-nrpe-plugin # nagios or icinga はインストール済み
((( nrpe の入ったリモートが呼び出せるか確認 )))
$ /usr/lib/nagios/plugins/check_nrpe -H リモート -c check_root
DISK OK - free space: / 21321 MB (74% inode=86%);| /=7363MB;23944;26937;0;29930
((( /etc/nagios-plugins/config/check_nrpe.cfg )))
# nagios/icingaなどのcommand設定の確認
# this command runs a program $ARG1$ with no arguments and enables SSL support
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
# this command runs a program $ARG1$ with no arguments and disables SSL support
define command {
command_name check_nrpe_nossl
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -n
}
((( nagios4 のサービス監視に check_nrpe を呼出す設定を追加 )))
define service{
use local-service
host_name リモート
service_description DISK
check_command check_nrpe!check_root
# check_command check_nrpe_nossl!check_root # SSLなしで設定した場合
}
((( nagios4 を再起動 )))
$ sudo systemctl restart nagios4
((( 監視側にnrpe用のプラグインを追加 ))) $ sudo aptitude install nagios-nrpe-plugin # nagios or icinga はインストール済み ((( nrpe の入ったリモートが呼び出せるか確認 ))) $ /usr/lib/nagios/plugins/check_nrpe -H リモート -c check_root DISK OK - free space: / 21321 MB (74% inode=86%);| /=7363MB;23944;26937;0;29930 ((( /etc/nagios-plugins/config/check_nrpe.cfg ))) # nagios/icingaなどのcommand設定の確認 # this command runs a program $ARG1$ with no arguments and enables SSL support define command { command_name check_nrpe command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } # this command runs a program $ARG1$ with no arguments and disables SSL support define command { command_name check_nrpe_nossl command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -n } ((( nagios4 のサービス監視に check_nrpe を呼出す設定を追加 ))) define service{ use local-service host_name リモート service_description DISK check_command check_nrpe!check_root # check_command check_nrpe_nossl!check_root # SSLなしで設定した場合 } ((( nagios4 を再起動 ))) $ sudo systemctl restart nagios4
((( 監視側にnrpe用のプラグインを追加 )))
$ sudo aptitude install nagios-nrpe-plugin  # nagios or icinga はインストール済み

((( nrpe の入ったリモートが呼び出せるか確認 )))
$ /usr/lib/nagios/plugins/check_nrpe -H リモート -c check_root
DISK OK - free space: / 21321 MB (74% inode=86%);| /=7363MB;23944;26937;0;29930

((( /etc/nagios-plugins/config/check_nrpe.cfg )))
# nagios/icingaなどのcommand設定の確認
# this command runs a program $ARG1$ with no arguments and enables SSL support
define command {
        command_name    check_nrpe
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
# this command runs a program $ARG1$ with no arguments and disables SSL support
define command {
        command_name    check_nrpe_nossl
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -n
}

((( nagios4 のサービス監視に check_nrpe を呼出す設定を追加 )))
define service{
    use                 local-service
    host_name           リモート
    service_description DISK
    check_command       check_nrpe!check_root
    # check_command     check_nrpe_nossl!check_root  # SSLなしで設定した場合
}

((( nagios4 を再起動 )))
$ sudo systemctl restart nagios4

nagios4 で監視ができるようになったので、温湿度センサーや空気品質センサーの確認も nrpe 経由に変更してみた。

WiFiスキャンをさせてみた

自宅内のネットワークに繋がらない時があって悩んだら、外で使っていたモバイルルータがつけっぱなしで、自宅内ネットワークのサービスに接続できないのが原因だったりする。パケットも無駄に消費するので、自宅内でモバイルルータが動いていたら警告させるようにしたい。

wifi scan

メインサーバは有線だけなので、有線LAN接続で WiFi が空いている Raspberry-Pi で監視させてみた。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo iw dev wlan0 scan | grep "SSID: ルータのSSID"
$ sudo iw dev wlan0 scan | grep "SSID: ルータのSSID"
$ sudo iw dev wlan0 scan | grep "SSID: ルータのSSID"

最初は homebridge の homebridge-cmdswitch2 の state_cmd に仕込んでみたけど、モバイルルータが動いていたら警告してほしい。Siri のオートメーション経由で警告することもできるかもしれないけど、スマホに頼る形になるなぁ。

nagios で警告させたいけど、raspberry-pi に nagios を入れるのは資源のムダに思える。ということで、Raspberry-Pi には nagios の監視をリモートで呼び出す nagios-nrpe-server を 入れて、上記 iw コマンドを動かす check スクリプトを書いてみた。

check_iwscan

nagios-nrpe-server から呼出す際に、Raspberry-Pi で動かすのもあるし、OS 負荷が軽くなるように Lua で書いてみた。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/usr/bin/lua
-- 見つけるべきSSID
local check_list = {}
check_list[ "tsaitoh.net" ] = "ok"
check_list[ "tsaitoh.net_e5785" ] = "warning"
check_list[ "tsaitoh.net_hwd14" ] = "critical"
-- 見つけたSSID毎の数
local count = {}
count[ "ok" ] = 0
count[ "warning" ] = 0
count[ "critical" ] = 0
-- スキャン結果を処理
local handle = io.popen( "/usr/bin/sudo /sbin/iw dev wlan0 scan" , "r" )
if handle then
for line in handle:lines() do
-- SSID を抽出
ssid = string.match( line , "^%s*SSID: (.+)$" )
if ssid then
-- SSID のカウント
local lv = check_list[ssid]
if lv then
count[lv] = count[lv] + 1
end
-- print( ssid ) ;
end
end
handle:close()
end
-- カウント結果に応じたexit値を決める
local status = 0
local st_mess = "Ok"
if count["critical"] > 0 then
status = 2
st_mess = "Critical"
elseif count[ "warning" ] > 0 then
status = 1
st_mess = "Warning"
end
-- 結果の表示
print( string.format( "IWSCAN %s - ok:%d/warn:%d/critical:%d" ,
st_mess , count["ok"] , count["warning"] , count["critical"] ) )
os.exit( status )
#!/usr/bin/lua -- 見つけるべきSSID local check_list = {} check_list[ "tsaitoh.net" ] = "ok" check_list[ "tsaitoh.net_e5785" ] = "warning" check_list[ "tsaitoh.net_hwd14" ] = "critical" -- 見つけたSSID毎の数 local count = {} count[ "ok" ] = 0 count[ "warning" ] = 0 count[ "critical" ] = 0 -- スキャン結果を処理 local handle = io.popen( "/usr/bin/sudo /sbin/iw dev wlan0 scan" , "r" ) if handle then for line in handle:lines() do -- SSID を抽出 ssid = string.match( line , "^%s*SSID: (.+)$" ) if ssid then -- SSID のカウント local lv = check_list[ssid] if lv then count[lv] = count[lv] + 1 end -- print( ssid ) ; end end handle:close() end -- カウント結果に応じたexit値を決める local status = 0 local st_mess = "Ok" if count["critical"] > 0 then status = 2 st_mess = "Critical" elseif count[ "warning" ] > 0 then status = 1 st_mess = "Warning" end -- 結果の表示 print( string.format( "IWSCAN %s - ok:%d/warn:%d/critical:%d" , st_mess , count["ok"] , count["warning"] , count["critical"] ) ) os.exit( status )
#!/usr/bin/lua

-- 見つけるべきSSID
local check_list = {}
check_list[ "tsaitoh.net" ] = "ok"
check_list[ "tsaitoh.net_e5785" ] = "warning"
check_list[ "tsaitoh.net_hwd14" ] = "critical"

-- 見つけたSSID毎の数
local count = {}
count[ "ok" ] = 0
count[ "warning" ] = 0
count[ "critical" ] = 0

-- スキャン結果を処理
local handle = io.popen( "/usr/bin/sudo /sbin/iw dev wlan0 scan" , "r" )

if handle then
   for line in handle:lines() do
      -- SSID を抽出
      ssid = string.match( line , "^%s*SSID: (.+)$" )
      if ssid then
         -- SSID のカウント
         local lv = check_list[ssid]
         if lv then
            count[lv] = count[lv] + 1
         end
         -- print( ssid ) ;
      end
   end
   handle:close()
end

-- カウント結果に応じたexit値を決める
local status = 0
local st_mess = "Ok"

if count["critical"] > 0 then
   status = 2
   st_mess = "Critical"
elseif count[ "warning" ] > 0 then
   status = 1
   st_mess = "Warning"
end

-- 結果の表示
print( string.format( "IWSCAN %s - ok:%d/warn:%d/critical:%d" ,
                      st_mess , count["ok"] , count["warning"] , count["critical"] ) )
os.exit( status )

長男からママ+α誕プレ

{CAPTION}

古い家の解体工事

25年ほど前に新築した家に移り住んだけど、元の生家はそのままだった。でも傷みも激しいのでそろそろ解体と計画をしていた。でも雪もなくなりついに解体が始まった。

{CAPTION}{CAPTION}{CAPTION}{CAPTION}

猫寺までウォーキング

{CAPTION}

{CAPTION}

{CAPTION}

{CAPTION}

@TohruSaitoh-23/03/03

  • 03/03 書きなれない様式の文書で、語尾がマンネリ化していたので、ChatGPT に違う言い回しを教えてもらう。
  • 03/01 仕事がひと段落して今夜は「祝杯」のはずだったのだが、とある連絡で「やけ酒」に変更になった。
  • 02/24 あかん、ボケてる。
    祝日空けなのに月曜日の日程チェックしてた。
    金曜やんけ。
  • 02/22 2枚目中央の黒にゃん https://twitter.com/muRata_PR/status/162…

ウォーキング

  • 02/24 久々に #ウォーキング してみたけど、もどって目を掻いたら痒みが悪化。鼻も同様。この時期はマスクしてウォーキングでもダメやな。 #花粉症


この記事は@TohruSaitohのつぶやきのまとめです。

@TohruSaitoh-23/02/16

  • 02/16 いちゃもん付けてる人は、番号表示なしのクレジットカード増えてるの知らないんだろうな。チップ内のデータはそのまんまで番号や顔写真印刷なしバージョンが作られるだけ。ということで、マイナカードの表面にシール貼ってもよさそうだな。 https://twitter.com/YahooNewsTopics/stat…
  • 02/07 バカな動画を上げるのは昔はバカッターって言ってたけど、今はInstagramかtiktokだよなぁ。 今なら「バカ映え」とかいうのはどうかな?
  • 02/02 今日2/2はネコの節句です。 https://twitter.com/TohruSaitoh/status/1…

Thunderbird

  • 01/31 Microsoft 365 のメールを #Thunderbird#OAuth2 認証で使っていたんだけど、数日前に再認証の画面がでてから、色々設定しなおしても、365メールが読めなくなった。MS365の認証が厳しくなったのかな?


この記事は@TohruSaitohのつぶやきのまとめです。

MQTTの設定

MQTTとホームオートメーション

自宅サーバで、ホームオートメーションもどきで遊んでいるけど、デバイスとのデータのやり取りは軽量の MQTT プロトコルがあるらしい。M5Stack ATOM Lite などからの情報を上げる時などで遊べそうなので、実験してみよう。

# 現状では センサー側の Raspberry-Pi では inetd.conf などで問合せポートにアクセスがあったら測定値を echo バックするような設定となっている。

mosquittoのインストール

でもひとまずは、MQTT ブローカー のオープンソース実装 mosquitto をインストール。

ブローカーとなる Raspberry-Pi には、mosquitto, mosquitto-clients をインストール。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( ブローカーで mosquitto のインストール )))
$ sudo aptitude install mosquitto mosquitto-clients
((( ブローカーで mosquitto のインストール ))) $ sudo aptitude install mosquitto mosquitto-clients
((( ブローカーで mosquitto のインストール )))
$ sudo aptitude install mosquitto mosquitto-clients

温湿度センサーを搭載したパブリッシャー側の Raspberry-Pi には、mosquitto-clients のみをインストール。最終的には Net::MQTT::Simple を使うようにしたから不要だけど動作試験には使える。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( パプリッシャー側は mosquitto-client だけ入れる )))
$ sudo aptitude install mosquitto-clients
((( パプリッシャー側は mosquitto-client だけ入れる ))) $ sudo aptitude install mosquitto-clients
((( パプリッシャー側は mosquitto-client だけ入れる )))
$ sudo aptitude install mosquitto-clients

mosquitto はデフォルトで外部接続を受けないので、外部接続の設定を追加。Debian流で /etc/mosquitto/conf.d/00-remote-access.conf にリモートアクセスを受ける設定を追記。

# listener<tab>1883 だとエラーになった。項目区切りで tab 使えんのか???

後のブラウザで確認するために、websocket の機能も設定しておく。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( 最小限の生接続でひとまず実験 )))
$ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf
listener 1883 # 1883 ポートで受信
allow_anonymous true # パスワード無し
((( Websocket の設定 )))
$ sudo vi /etc/mosquitto/conf.d/10-websocket.conf
listener 15675
protocol websockets
((( mosquitto を再起動 )))
$ sudo systemctl restart mosquitto
((( パスワード認証を使うなら )))
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd mqtt
$ sudo vi /etc/mosquitto/mosquitto.conf
(先頭に)
per_listener_settings true
$ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf
(追記)
password_file /etc/mosquitto/passwd
$ sudo systemctl restart mosquitto
((( 最小限の生接続でひとまず実験 ))) $ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf listener 1883 # 1883 ポートで受信 allow_anonymous true # パスワード無し ((( Websocket の設定 ))) $ sudo vi /etc/mosquitto/conf.d/10-websocket.conf listener 15675 protocol websockets ((( mosquitto を再起動 ))) $ sudo systemctl restart mosquitto ((( パスワード認証を使うなら ))) $ sudo mosquitto_passwd -c /etc/mosquitto/passwd mqtt $ sudo vi /etc/mosquitto/mosquitto.conf (先頭に) per_listener_settings true $ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf (追記) password_file /etc/mosquitto/passwd $ sudo systemctl restart mosquitto
((( 最小限の生接続でひとまず実験 )))
$ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf
listener        1883  # 1883 ポートで受信
allow_anonymous true  # パスワード無し

((( Websocket の設定 )))
$ sudo vi /etc/mosquitto/conf.d/10-websocket.conf
listener        15675
protocol        websockets

((( mosquitto を再起動 )))
$ sudo systemctl restart mosquitto

((( パスワード認証を使うなら )))
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd mqtt

$ sudo vi /etc/mosquitto/mosquitto.conf
(先頭に)
per_listener_settings true

$ sudo vi /etc/mosquitto/conf.d/00-remote-access.conf
(追記)
password_file /etc/mosquitto/passwd

$ sudo systemctl restart mosquitto

MQTTの基本的な導通テスト

まずは基本的な導通テスト

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( ブローカー側 )))
$ sudo mosquitto_sub -d -t /sensor/place/temperature/host
((( パブリッシャー側 )))
$ mosquitto_pub -h ブローカーホスト名 -d -t /sensor/place/temperature/host -m 12.34
((( 実験結果 )))
$ sudo mosquitto_sub -d -t /sensor/place/+/host
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending SUBSCRIBE (Mid: 1, Topic: /sensor/place/+/host, QoS: 0, Options: 0x00)
Client (null) received SUBACK
Subscribed (mid: 1): 0
Client (null) received PUBLISH (d0, q0, r0, m0, '/sensor/place/temperature/host', ... (4 bytes))
12.34
((( ブローカー側 ))) $ sudo mosquitto_sub -d -t /sensor/place/temperature/host ((( パブリッシャー側 ))) $ mosquitto_pub -h ブローカーホスト名 -d -t /sensor/place/temperature/host -m 12.34 ((( 実験結果 ))) $ sudo mosquitto_sub -d -t /sensor/place/+/host Client (null) sending CONNECT Client (null) received CONNACK (0) Client (null) sending SUBSCRIBE (Mid: 1, Topic: /sensor/place/+/host, QoS: 0, Options: 0x00) Client (null) received SUBACK Subscribed (mid: 1): 0 Client (null) received PUBLISH (d0, q0, r0, m0, '/sensor/place/temperature/host', ... (4 bytes)) 12.34
((( ブローカー側 )))
$ sudo mosquitto_sub -d -t /sensor/place/temperature/host

((( パブリッシャー側 )))
$ mosquitto_pub -h ブローカーホスト名 -d -t /sensor/place/temperature/host -m 12.34

((( 実験結果 )))
$ sudo mosquitto_sub -d -t /sensor/place/+/host
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending SUBSCRIBE (Mid: 1, Topic: /sensor/place/+/host, QoS: 0, Options: 0x00)
Client (null) received SUBACK
Subscribed (mid: 1): 0
Client (null) received PUBLISH (d0, q0, r0, m0, '/sensor/place/temperature/host', ... (4 bytes))
12.34

パブリッシャー側のプログラム

外気?温度(トイレ)で温度湿度を測っている Raspberry Pi の温度情報更新処理の中に Perl でブローカー宛にパプリッシュする処理を埋め込むのなら、Net::MQTT::Simple で書くのが簡単。
Net::MQTT::Simple が HTTP::Tiny を使うけど、CPAN でインストールするパッケージは最小にしたいので、HTTP::Tiny は apt-get でインストール。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( HTTP::Tiny をインストール )))
$ sudo aptitude install libhttp-tiny-perl
((( CPANで Net::MQTT::Simple をインストール )))
$ sudo perl -MCPAN -e shell
cpan[..]> install Net::MQTT::Simple
((( HTTP::Tiny をインストール ))) $ sudo aptitude install libhttp-tiny-perl ((( CPANで Net::MQTT::Simple をインストール ))) $ sudo perl -MCPAN -e shell cpan[..]> install Net::MQTT::Simple
((( HTTP::Tiny をインストール )))
$ sudo aptitude install libhttp-tiny-perl

((( CPANで Net::MQTT::Simple をインストール )))
$ sudo perl -MCPAN -e shell
cpan[..]> install Net::MQTT::Simple

retain(…) でメッセージを送る際に、複数の項目を連続で送る場合は、各項目毎に 30msec 50msec ほどの遅延が必要だった。
# パブリッシャー側の問題?/ブローカー側の問題? 20msec だと後続の retain が失敗した。30msecだと最後の retain が失敗(不安定)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
use Net::MQTT::Simple;
use Time::HiRes 'usleep' ;
my $mqtt = Net::MQTT::Simple->new("ブローカーホスト名") ; # brokerのホスト名
$mqtt->retain( "/sensor/place/temperature/host" => "12.3" ) ; # センサーの値を送る時
usleep( 50000 ) ; # 50msecの遅延が必要
$mqtt->retain( "/sensor/place/humidity/host" => "67.8" ) ; # センサーの値を送る時
usleep( 50000 ) ;
$mqtt->retain( "/sensor/place/pressuore/host" => "1023.4" ) ; # センサーの値を送る時
use Net::MQTT::Simple; use Time::HiRes 'usleep' ; my $mqtt = Net::MQTT::Simple->new("ブローカーホスト名") ; # brokerのホスト名 $mqtt->retain( "/sensor/place/temperature/host" => "12.3" ) ; # センサーの値を送る時 usleep( 50000 ) ; # 50msecの遅延が必要 $mqtt->retain( "/sensor/place/humidity/host" => "67.8" ) ; # センサーの値を送る時 usleep( 50000 ) ; $mqtt->retain( "/sensor/place/pressuore/host" => "1023.4" ) ; # センサーの値を送る時
use Net::MQTT::Simple;
use Time::HiRes 'usleep' ;
my $mqtt = Net::MQTT::Simple->new("ブローカーホスト名") ;       # brokerのホスト名

$mqtt->retain( "/sensor/place/temperature/host" => "12.3" ) ; # センサーの値を送る時
usleep( 50000 ) ;                                             # 50msecの遅延が必要
$mqtt->retain( "/sensor/place/humidity/host" => "67.8" ) ;    # センサーの値を送る時
usleep( 50000 ) ;
$mqtt->retain( "/sensor/place/pressuore/host" => "1023.4" ) ; # センサーの値を送る時

ひとまずサブスクライバの代わりに Web ブラウザで mosquitto の結果を見るための HTML , js をダウンロード。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ cd /var/www/html
$ sudo mkdir mqtt
$ cd mqtt
$ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/echo.html
$ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/mqttws31.js
$ cd /var/www/html $ sudo mkdir mqtt $ cd mqtt $ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/echo.html $ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/mqttws31.js
$ cd /var/www/html
$ sudo mkdir mqtt
$ cd mqtt
$ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/echo.html
$ sudo wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-web-mqtt-examples/master/priv/mqttws31.js

echo.html の受信するトピックの設定を修正。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
((( 84行目 )))
var print_first = pipe('#first', function(data) {
message = new Paho.MQTT.Message(data);
message.destinationName = "/sensor/place/+/host"; // トピックを修正
debug("SEND ON " + message.destinationName + " PAYLOAD " + data);
client.send(message);
});
((( 108行目 )))
var options = {
timeout: 3,
keepAliveInterval: 30,
onSuccess: function () {
debug("CONNECTION SUCCESS");
client.subscribe("/sensor/place/+/host", {qos: 1}); // トピックを修正
},
onFailure: function (message) {
debug("CONNECTION FAILURE - " + message.errorMessage);
}
};
((( 84行目 ))) var print_first = pipe('#first', function(data) { message = new Paho.MQTT.Message(data); message.destinationName = "/sensor/place/+/host"; // トピックを修正 debug("SEND ON " + message.destinationName + " PAYLOAD " + data); client.send(message); }); ((( 108行目 ))) var options = { timeout: 3, keepAliveInterval: 30, onSuccess: function () { debug("CONNECTION SUCCESS"); client.subscribe("/sensor/place/+/host", {qos: 1}); // トピックを修正 }, onFailure: function (message) { debug("CONNECTION FAILURE - " + message.errorMessage); } };
    ((( 84行目 )))
        var print_first = pipe('#first', function(data) {
            message = new Paho.MQTT.Message(data);
            message.destinationName = "/sensor/place/+/host"; // トピックを修正
            debug("SEND ON " + message.destinationName + " PAYLOAD " + data);
            client.send(message);
        });

    ((( 108行目 )))
        var options = {
            timeout: 3,
            keepAliveInterval: 30,
            onSuccess: function () {
                debug("CONNECTION SUCCESS");
                client.subscribe("/sensor/place/+/host", {qos: 1}); // トピックを修正
            },
            onFailure: function (message) {
                debug("CONNECTION FAILURE - " + message.errorMessage);
            }
        };

レンジで出来ちゃうあつあつホットサンド

あつあつホットサンド。これ、先週テレビで紹介されてて即ポチ。「金属プレートなのに電子レンジで焼ける」と訳のわからない仕組みで心配したけど、ホントうまく焼けてる‼

レンジで出来ちゃうあつあつホットサンド ND-6391

{CAPTION}

{CAPTION}

Google 検索

My Google   Yahoo

Microsoft

ファンサイト