MQTTの設定
MQTTとホームオートメーション
自宅サーバで、ホームオートメーションもどきで遊んでいるけど、デバイスとのデータのやり取りは軽量の MQTT プロトコルがあるらしい。M5Stack ATOM Lite などからの情報を上げる時などで遊べそうなので、実験してみよう。
# 現状では センサー側の Raspberry-Pi では inetd.conf などで問合せポートにアクセスがあったら測定値を echo バックするような設定となっている。
mosquittoのインストール
でもひとまずは、MQTT ブローカー のオープンソース実装 mosquitto をインストール。
ブローカーとなる Raspberry-Pi には、mosquitto, mosquitto-clients をインストール。
((( ブローカーで mosquitto のインストール ))) $ sudo aptitude install mosquitto mosquitto-clients
温湿度センサーを搭載したパブリッシャー側の Raspberry-Pi には、mosquitto-clients のみをインストール。最終的には Net::MQTT::Simple を使うようにしたから不要だけど動作試験には使える。
((( パプリッシャー側は mosquitto-client だけ入れる ))) $ sudo aptitude install mosquitto-clients
mosquitto はデフォルトで外部接続を受けないので、外部接続の設定を追加。Debian流で /etc/mosquitto/conf.d/00-remote-access.conf にリモートアクセスを受ける設定を追記。
# listener<tab>1883 だとエラーになった。項目区切りで tab 使えんのか???
後のブラウザで確認するために、websocket の機能も設定しておく。
((( 最小限の生接続でひとまず実験 ))) $ 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の基本的な導通テスト
まずは基本的な導通テスト
((( ブローカー側 ))) $ 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 でインストール。
((( 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 が失敗(不安定)
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 をダウンロード。
$ 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 の受信するトピックの設定を修正。
((( 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); } };
レンジで出来ちゃうあつあつホットサンド
あつあつホットサンド。これ、先週テレビで紹介されてて即ポチ。「金属プレートなのに電子レンジで焼ける」と訳のわからない仕組みで心配したけど、ホントうまく焼けてる‼
@TohruSaitoh-23/01/28
- 01/25 雪で休校になっちゃったようなので、情報ネットワーク基礎の授業の理解度確認 Forms 問題をにわか作り。 https://twitter.com/TohruSaitoh/status/1…
Buffalo
- 01/25 #Buffalo さん、WiFiルータ欲しいな… https://twitter.com/BUFFALO_melco/status…
RWBY
- 01/25 さっき、Netflix で何気に見ていたアニメ #RWBY #氷雪帝国 3話で、魔法の道具の1つが NEC PC-8001 で笑ったけど、オタク(じじぃ)はすげーな。ベーシックマスターのグリーンモニタまで見つけてら。 https://twitter.com/azzurrissimo12/statu…
めざましじゃんけん
- 01/28 ポイントに応じて確率上げてくれんかな。 #めざましじゃんけん https://twitter.com/TohruSaitoh/status/1…
この記事は@TohruSaitohのつぶやきのまとめです。
2023-01-24の雪
@TohruSaitoh-23/01/13
- 01/13 1年生に「論理回路の実験」の質問されたずら。えーっとね、体格では区別困難かもしれんけど、それY先生。
- 01/09 【アーチが潰れるから痛いはウソ】足底筋膜炎を正しく治す方法とストレッチ |京都市北区 もり鍼灸整骨院 https://youtu.be/53MbGRzG1Ok @YouTubeより
- 01/08 https://twitter.com/TohruSaitoh/status/1…
フジテレビ
この記事は@TohruSaitohのつぶやきのまとめです。
@TohruSaitoh-23/01/03
- 01/03 RT @PharaohKJ: お前三国でとれるのか!タグまでついとるやんけ! https://twitter.com/PharaohKJ/status/160…
- 01/02 今日の昼メシ
https://www.kagome.co.jp/products/recipe… - 01/02 キリっ! https://www.instagram.com/p/Cm5geoerTe4/…
- 01/01 新年あけましておめでとうございます https://twitter.com/TohruSaitoh/status/1…
猫
- 01/01 あけましておめでとうございます。
今年こそ、子丑寅 #猫 辰巳午未… https://twitter.com/TohruSaitoh/status/1…
この記事は@TohruSaitohのつぶやきのまとめです。