ホーム » コンピュータ (ページ 10)

コンピュータ」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

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

HomePod mini 16.3

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

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

{CAPTION}

{CAPTION}

{CAPTION}

catt で chromecast を制御

chromecast を Linux から制御する python script の cast_url とかを使っていたけど、もっと使いやすくなった catt というものが公開されていた。

こちらで公開されていた DLNA サーバを検出する simple-dlna-browser も便利。

$ simple-dlna-browser -L
http://192.168.xx.yy:zzzzz/dms/ddd.xml (TZ-HT3500)
$ catt scan
Scanning Chromecasts...
192.168.xx.yy - ベッドルーム - Google Inc. Google Nest Mini
192.168.xx.yy - リビングルーム - Google Inc. Chromecast
192.168.xx.yy - 居間(google home) - Google Inc. Google Home Mini
$ catt -d リビングルーム cast https://www.youtube.com/watch?v=HBSC0RDuUlQ
Casting remote file https://www.youtube.com/watch?v=HBSC0RDuUlQ...
Playing "DREAMS COME TRUE - うれしい!たのしい!大好き!(from DWL2007 Live Ver.)" on "リビングルーム"...
$ catt -d リビングルーム stop

なんちゃってIPv6でトラブル

自宅では、IPv6 でインターネットにつながらない状態の癖に、IPv6 の運用実験として色々な設定をしている。

しかし、最近繋がらないページなどが時々出ていて、どうも IPv6 サイトが原因だと予測はしていた。

今回、病院に入っていて家に不在の時に限って、ママがゲームサイトに繋がらないと文句を言ってきた。今までは動いていたのだが、ゲームサイトにも IPv6 化が進んでいる中で、ゲームサービスが IPv6対応になったんだろうな。おかげで IPv4 しかつながらないネットワーク環境のくせに、スマホがインターネットに IPv6 で繋ごうとするのが原因。

自宅では、IPv6 対応のために、DHCPサーバで IPv6 アドレス配布の設定をしていた。しかしこれが誤解のもと。実は IPv6 アドレスの自動設定機能の radvd を動かしていて、この設定は動いていないと思っていたが、実は radvd の設定が生きていた。

このため、DHCPv6の設定を消しても、radvd が相変わらずスマホに IPv6 ルータ情報をアナウンスするため、IPv6 で外に繋がらない状態となっていた。

ということで、/etc/radvd.conf を別名で残しつつ、”sudo aptitude purge radvd” で radvd の機能を止めた。

FortiGuard Web Filter

自宅サーバで CTF 問題とかを公開している中、nmap の実験で自宅サーバをチェックすることがあるけど、8008, 8010 とかのポートが表示されるのが気になっていた。

$ nmap tsaitoh.net
Starting Nmap 7.80 ( https://nmap.org ) at 2022-12-06 14:12 JST
PORT     STATE  SERVICE
(略)
8008/tcp open   http
8010/tcp open   xmpp
8022/tcp closed oa-system
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 4.35 seconds

自宅のサーバでは、FireWall でポート制限しているし、対外接続のルータでも、特定のポートだけ DMZ 設定などでサーバに接続できるようにしていた。CTF の問題作る中で一時的に開いたものかと思ってた。

FortiGuard WebFilter

でも改めて http://tsaitoh.net:8008 とかしてみたら、下記の画面が表示された。どうも自宅のルータより外部の丹南ケーブルテレビ側のルータで、FortiGuard の WebFilter が動いているかと思われる。

そこで、”traceroute tsaitoh.net” を実行すると表示される自宅サーバの一つ手前のルータ?を調べてみる。

$ traceroute 64.33.3.150
traceroute to 64.33.3.150 (64.33.3.150), 30 hops max, 60 byte packets
(略)
 9  218.100.9.53 (218.100.9.53)  10.949 ms  10.658 ms  10.647 ms
10  core-sw2-e-5.ntwk.ttn.ne.jp (202.127.81.22)  16.457 ms
    core-sw1-e-5.ntwk.ttn.ne.jp (202.127.81.10)  16.535 ms  16.526 ms
11  ftth-sw1-po-2.ntwk.ttn.ne.jp (202.127.81.30)  25.875 ms  26.144 ms
    ftth-sw1-po-1.ntwk.ttn.ne.jp (202.127.81.26)  22.889 ms
12  olt1-la-1.ntwk.ttn.ne.jp (202.127.81.34)  20.911 ms  20.902 ms  37.585 ms
(略)

試しに、”nmap 202.127.81.34″を実行すると同様に 8008,8010 ポートが開いている。

$ nmap 202.127.81.34
Starting Nmap 7.80 ( https://nmap.org ) at 2022-12-06 14:35 JST
Nmap scan report for olt1-la-1.ntwk.ttn.ne.jp (202.127.81.34)
Host is up (0.0039s latency).
Not shown: 995 filtered ports
PORT     STATE  SERVICE
80/tcp   open   http
113/tcp  closed ident
443/tcp  open   https
8008/tcp open   http
8010/tcp open   xmpp

そこで、このルータに同様に http://202.127.81.34:8008 にブラウザでアクセスしても最初のような、FortiGuard の表示となった。ということで、8008,8010 は、FortiGuard で WAF(Web Application firewall) が設定されているのが原因と思われる。

WebFilter 廃止になるのかな?

ただ、丹南ケーブルにて「安心インターネットサービス停止」のアナウンスが出ている。会員向けのProxyサーバの運用停止の案内だけど、これも影響するのかな。どちらにしろ、2023/1/15(日)になれば分かるかな。

wsl GUI がWindows10で利用可能に

Windows 10 の 22H2 が適用できるようになり、VcXsrvのような X11 サーバを起動しなくても、GUI の wsl が動かせるようになった。

KB5020030(「2022-11×64ベースシステム用Windows 10 Version 22H2の累積更新プログラム」)がインストールして、再起動などが終わらせておく。wsl が導入済みなら、PowerShell (管理者モード) で、wsl.exe –update を実行するだけ。wsl –version でバージョンが表示されるようになったら成功。

PS C:\WINDOWS\system32> wsl.exe --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
PS C:\WINDOWS\system32> .\wsl.exe --version
WSL バージョン: 1.0.0.0
カーネル バージョン: 5.15.74.2
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.19045.2311

LaTeX で 図入り文書を書く時によく使う簡単なエディタ tgif を使いたかったが、ISO8859-1 のフォントが使えずエラーがでたけど、xfonts-shinonome などを入れたら、無事に動くようになった。emacs なども動くし便利。

$ tgif
Fatal Error in OpenFont(): Cannot open the Default(Msg)Font
   '-*-courier-medium-r-normal-*-14-*-*-*-*-*-iso8859-1'.
Tgif aborted.
$ sudo aptitude install xfonts-shinonome
以下の新規パッケージがインストールされます:

職場のWin10マシンはまだ使えず

うーむ、職場の Windows 10 は、相変わらず KB5020030 のアップデートが表示されない。”wsl –version” もエラーのまんまだな。Windows 11 にアップデートした方がいいのかな。

STBの更新(4K録る蔵くん)

丹南ケーブルテレビで新しいSTBが出ていて、3チューナー対応とか録画機能内蔵とかかいてあるので、STBを更新してみた。

Panasonic TZ-HT3500BW

Panasonic TZ-HT3500BW で、今までの Panasonic TZ-LS300PA の後継機種だし、配線を入れ替えて繋げたら、赤外線リモコンのコードも多くの機能がそのままで、HDMI からの制御や、赤外線リモコンでの制御もほぼそのまま動き出す。

Netflix , YouTube , Amazon Prime Video なども対応しているので、そのまま動画の視聴もできるし、DLNA などにも対応しているので、スマホなどにアプリを入れれば自宅内や出先でも視聴も可能(1台のみだけど)

チャンネルの割り当てや、未対応の赤外線コードを赤外線コントローラーに覚えさせれば、完成かな。

色々と設定を調整

テレビの映像モードを Dot by Dot に変更

新しい STB で使っていて、番組表などを表示すると画面の両端が画面から若干はみ出ている。番組表の時間が見えづらく設定を確認。これはテレビ側の画面のモードをオートから Dot by Dot に変更したらきちんと表示されるようになった。

BS4K のチャンネル設定を消す

この STB は、4K がウリだけど、我が家はまだ 2K TV。BS4K のチャンネルだと画面も表示されない。通常の BS で十分だけど、番組表に BS4K のチャンネルが表示されるし、チャンネル UP/DOWN で BS4K に切り替わるのもムダなので、BS4K のチャンネル設定を消す。

eRemote mini で STB の新機能使えず

自宅の赤外線リモコンを覚えさせている Broadlink の eRemote mini だけど、HT3500 のリモコン信号を覚えさせたけど、Netflixボタンとかアプリボタン,再生,停止,スキップ,サーチなどを送信できない。どうせ、再生関連の機能はブラウザ画面では扱いづらいし、あきらめでもいいかな。

マイナポイント登録

胃の痛みがひどくて病院へ。マイナンバーの読み取り機があったので早速試してみたけど、パスワード入力してもダメ。パスワード間違いかと思いスマホのマイナポイントアプリで確認したけど問題ない。というか、マイナポイントアプリで保険証としての利用が未登録になってる。ちゃんと登録しておいたはずなんだけどなぁ。
# 保険証の「申請」と「登録」は別物なのか???

ということで、改めて健康保険証としての登録作業と、銀行口座登録を行う(うしろめたい収入ないし…) 。

Edgerouter-X が寿命?

VPNルータとして導入した Edgerouter-X だけど、最近何日かおきにトラブル。

現状は、実質 SW-HUB 状態の使い方だけど、HUB 機能は動いているものの、管理画面などの Web 機能に繋がらない。電源を入れなおせば復活する。当初導入は VPN 機能だったけど、ルータを交換したら L2TP 使えるし、ただの HUB での利用なら Giga HUB の方が安いし、メンテナンスも不要だし。

(2022-11-19)

ということで、Amazonでポチった安い 5ポート Giga HUB に入れ替え。あんど、munin や nagios4 での Edgerouter の監視を外す。

usacloud monitor-cpu

$ usacloud server list -q
$ usacloud server monitor-cpu ¥
     --start 2022-11-11T00:00:00+09:00 ¥
     --end   2022-11-11T12:00:00+09:00 ¥
     123456789012
$ usacloud server monitor-cpu ¥
     --start 2022-11-15T15:55:00+09:00 ¥
     123456789012 2>/dev/null ¥
  | jq -r ".[].CPUTime" ¥
  | tail -1 
0.012345

Google 検索

My Google   Yahoo

Microsoft

ファンサイト