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

作者アーカイブ: t-saitoh

システム

最近の投稿

アーカイブ

カテゴリー

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);
            }
        };

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

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

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

{CAPTION}

{CAPTION}

@TohruSaitoh-23/01/28

Buffalo

RWBY

めざましじゃんけん


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

2023-01-24の雪

10年ぶりの寒波ということで、1/24の朝から降り出した雪は、夕方には横殴りの雪となっていた。
仕事が終わって早々に帰ったけど、田んぼ道では積もった雪も強風にあおられ、ホワイトアウト状態で何度も止まってしまう状態。
しかしながら、徐々に気圧はあがりだし、1/25の朝は大した積雪ではなかった。しかし寒さのピーク。除雪機で除雪を終えてから出勤としたが、除雪している時に母親が車にぬるま湯をかけてくれていたけど、除雪を終えて出勤するときには凍り付いた状態。

HomePod mini 16.3

Home Pod mini の HomePod 16.3 が公開され、今までは HomePod 内に内蔵されているけど Home アプリなどで使えなかった温度・湿度センサーの機能が、参照できるようになった。{CAPTION}

更新直後は、温度センサーの項目が増えた割りに調整中の表示だったけど、しばらく経つと温度が取れるようになってきた。同じリビングに設置してある Raspberry-Pi に付けてある温湿度センサーの値と比較すると、温度は0.5℃ほどの差だけど、湿度は 10% ほどの違い。

{CAPTION}

{CAPTION}

{CAPTION}

低カリウム症

低カリウム症で、通常のカリウム系サプリでは効かないので、塩化カリウム処方されてる。ナトリウムじゃないとはいえ、塩。苦い塩。たっぷりの水で一気に呑まないと…
{CAPTION}

@TohruSaitoh-23/01/13

フジテレビ

  • 01/08 ハンガリーの出生率1.22から1.56に上がったことを、0.3%しか効果がないって説明。出生率の単位は[%]じゃないぞ[人]だぞ。出生率0.3増加は十分効果ありだろ!? #フジテレビ


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

@TohruSaitoh-23/01/03


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

今年こそ 子丑寅 猫 辰巳午未

新年あけましておめでとう

Google 検索

My Google   Yahoo

Microsoft

ファンサイト