Mosquittoに、Python Paho MQTT libraryを使ってアクセスする

あらかじめ起動しておいたMosquittoにPython Paho MQTT library (pkgsrc/net/py-paho-mqtt 2.1.0)を使って、Mosquittoの受信したデータを、InfluxDB 1 (pkgsrc/databases/influxdb)に保存する。 なぜInfluxDBに保存するのかと言うと、最終的にMosquittoで受信したデータをGrafana (pkgsrc/www/grafana)で表示するためである。

乱数をMosquittoに送信し、それを購読して、InfluxDBに保存する。

#!/usr/pkg/bin/python3.14

#
# Subscribe mosquitto MQTT server and store data into InfluxDB 1
#

import time
import random
import ssl

from paho.mqtt.enums import MQTTProtocolVersion
import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient

# Connection information for InfluxDB 1.x
INFLUXDB_HOSTNAME = 'localhost'
INFLUXDB_PORT = 8086
INFLUXDB_DATABASE = 'mqtt001'
INFLUXDB_USERID = 'admin'
INFLUXDB_PASSWORD = 'ADMIN_PASSWORD'

# Connection information of MQTT
MQTT_BROKER = 'MYHOSTNAME'
MQTT_PORT = 8883
MQTT_TOPIC = 'topic/0001'

# Instantiate InfluxDB
influx_client = InfluxDBClient (
    host=INFLUXDB_HOSTNAME,
    port=INFLUXDB_PORT,
    username=INFLUXDB_USERID,
    password=INFLUXDB_PASSWORD,
    database=INFLUXDB_DATABASE
)

# Create database at first at once
influx_client.create_database(INFLUXDB_DATABASE)

# Callback function for MQTT subscription
def on_message (client, userdata, message):
    payload = message.payload.decode('utf-8')
    timestamp = int(time.time() * 1000000000) # in ns
    # debug print
    print (f'Received: {payload}')

    json_body = [
        {
            "measurement": "sensor_data",
            "tags": {
                "device": "dev001_reg700"
            },
            "fields": {
                "value": float(payload)
            },
            "time": timestamp
         }
    ]

    # Write data to InfluxDB
    influx_client.write_points(json_body)

# Create MQTT client
mqtt_client = mqtt.Client(
    callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
    protocol=MQTTProtocolVersion.MQTTv5
)

# Assign callback function on receiving
mqtt_client.on_message = on_message

# Setup TLS connection
tls_context = ssl.create_default_context()
tls_context.verify_mode = ssl.CERT_REQUIRED
mqtt_client.tls_set_context(tls_context)

# Use user ID and password auth
PUBSUB_ID = 'user001'
PUBSUB_PW = 'password001'
mqtt_client.username_pw_set(
    username=PUBSUB_ID,
    password=PUBSUB_PW
)

# Connect to broker
mqtt_client.connect(
    host=MQTT_BROKER,
    port=MQTT_PORT, 
    keepalive=60
)


# Start to subscribe
mqtt_client.subscribe(topic=MQTT_TOPIC)
## debug print
print (f'Subscribe topic: {MQTT_TOPIC}')

# main loop in another thread
mqtt_client.loop_start()


# Testing publishing
while True:
    value = round(random.uniform(10, 30), 2)
    mqtt_client.publish(MQTT_TOPIC, str(value))
    print(f'Published: {value}')
    time.sleep(1)

Mosquittoを安全に利用する

はじめに

pkgsrc/net/mosquitto-2.1.2nb1を使う機会があったのだが、なるべく安全な方法で利用したいと思っていた。 TLS証明書を利用して暗号化された経路で通信し、接続にはユーザーIDとパスワードによるユーザー認証を利用し、ユーザー毎にアクセス制限を設定したい。 また、受信した情報はファイルに保存しておきたい。

設定は/usr/pkg/etc/mosquitto.confに書けば良い。

TLS証明書を利用する

Let's Encryptで取得したTLS証明書が使える。 以下のように設定すれば良い。 これは、pkgsrc/security/acmeshを使って取得したものだが、どのような方法で取得しても良い。

certfile /var/db/mosquitto/.acme.sh/MYHOSTNAME.net_ecc/fullchain.cer
keyfile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/app4.ryoon.net.key
cafile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/ca.cer

接続にユーザーIDとパスワードによるユーザー認証を利用する

ユーザー毎にアクセス制限を設定するためにも、ユーザーIDとパスワードによりユーザー認証をした上で接続する必要がある。 これは、以下のように設定すれば良い。

password_file /var/db/mosquitto/mosquitto.passwd

この中身は、mosquitto_passwd(1)で生成すれば良い。 以下のようにユーザーIDとパスワードをmosquitto.passwdとして用意しておき、mosquitto_passwdコマンドでパスワードをハッシュ化したファイルに変換すれば良い。 ハッシュアルゴリズムも選択できるようだ。

$ cat mosquitto.passwd
user001:password001
user002:password002
$ mosquitto_passwd -U mosquitto.passwd
$ cat mosquitto.passwd
user001:$7$1000$qmp3mSmMucnEwhH3vLWRLquFBPYVQFdALWJwvihS7UI6d2cTKSma77hbTeYFSoJ+M/WTowwzUg7klW+7ClbNng==$YxIm/PFeBoiCN9xBvV9XR1XWK6VqIJrwE432iX7b5ygnoyKKMRSHf9rk/9Lw02Gp9FWfhwnPU8ugzPJUIDzImA==
user002:$7$1000$x8FPjLROciMpi7q7OIkV+cdzEf+Eo02kGMuPaWALcoS9Vt7G9J/um376TaGuSDOj76HSvL8HIla8HHQx7DkJGQ==$3V1pN+4ApuSBPtnyzxfSWSnUb01Q0EjQ6LmkAQb+VetHuxCkcJkzEhQyG2Y6F7MWgG1DqfyrJIWCF7pYqHuquQ==

ユーザー毎にアクセス制限を設定する

まず、アクセス制限の内容を読み込むように/usr/pkg/etc/mosquitto.confに以下のように設定する。

acl_file /var/db/mosquitto/mosquitto.acl

その上で、/var/db/mosquitto/mosquitto.aclを以下のように設定する。 user001は全てのトピックに読み書きでき、user002は全てのトピックに書き込みだけできるようにする。 データと投入するクライアントはuser002でアクセスして来ることを想定し、user001で接続することを想定している。 user001は書き込みはできなくても良いのだが。

$ cat /var/db/mosquitto/mosquitto.acl
user user001
topic readwrite #

user user002
topic write #

受信したデータをファイルに保存する

/var/db/mosquitto/mosquitto.dbに保存するように設定する。

autosave_interval 60
autosave_on_changes true
persistence true
persistence_file mosquitto.db
persistence_location /var/db/mosquitto

その他

他にも設定してある内容は以下のようだ。

# mosquitto daemonを動かすユーザー
user mosquitto
# 待ち受けるポート
istener 8883
# ログとしてsyslogに出力するレベル
log_type debug

NetBSDでPostgreSQLサーバーを動かす

NetBSDでPostgreSQLサーバーを動かすのだが、受け付ける接続数を多くしたい。 具体的には/usr/pkg/pgsql/data/postgresql.confでmax_connectionsに100を設定したい。

そうするには、kern.ipc.semmnikern.ipc.semmnsの数を増加させる必要があるようだ。

# vi /etc/sysctl.conf
kern.ipc.semmni=100
kern.ipc.semmns=512

この位に増やせば、以下のように設定できるようだ。

# vi /usr/pkg/pgsql/data/postgresql.conf
max_connections = 100

man pageによると、以下のように説明されている。

$ man 7 sysctl
kern.ipc.semmni
        Max number of number of semaphore identifiers.

kern.ipc.semmns
        Max number of number of semaphores in system.

Microsoftのoutlook.comで作ることのできる電子メールアドレスのドメイン

hotmail.comにアカウントを作ったのはFreeBSDベースのサーバーが使われていると聞いた頃だったような気がする。既にMicrosoftのサービスになっていたような気がするが、まだ20世紀だった気もする。 ローカルパートが4文字で電子メールアドレスを取得できたので、それなりに早い時期に作ったのだろう。 それから、live.comやlive.jp、msn.comといったドメインで電子メールアドレスが作れるようになり、hotmail.co.jpというドメインでも作れるようになった気がする。

今は、hotmail.comに加えて、outlook.comとoutlook.jpというドメインが利用できるようになっている。 だが、それはウェブブラウザーのHTTPのAccespt-Languageヘッダーによることは分かっていた。 Firefoxの各言語設定で、どういうドメインで電子メールアドレスを作れるのか調べてみた。 どれも日本のIPアドレスから調べているので、純粋にAccespt-Languageヘッダーの最初の言語による違いを表にしている。

ちゃんと取得完了できるかというのは、言語をfrに設定して、outlook.frドメインの電子メールアドレスを取得できたので、他もできそうに思う。

言語 ドメイン
en-us outlook.com hotmail.com
en outlook.com hotmail.com
ja outlook.jp outlook.com hotmail.com
ab outlook.com hotmail.com
ach outlook.com hotmail.com
aa outlook.com hotmail.com
af outlook.com hotmail.com
ak outlook.com hotmail.com
tw outlook.com hotmail.com
sq outlook.com hotmail.com
am outlook.com hotmail.com
ar-dz outlook.sa outlook.com hotmail.com
ar-bh outlook.sa outlook.com hotmail.com
ar-eg outlook.sa outlook.com hotmail.com
ar-iq outlook.sa outlook.com hotmail.com
ar-jo outlook.sa outlook.com hotmail.com
ar-kw outlook.sa outlook.com hotmail.com
ar-lb outlook.sa outlook.com hotmail.com
ar-ly outlook.sa outlook.com hotmail.com
ar-ma outlook.sa outlook.com hotmail.com
ar-om outlook.sa outlook.com hotmail.com
ar-qa outlook.sa outlook.com hotmail.com
ar-sa outlook.sa outlook.com hotmail.com
ar-sy outlook.sa outlook.com hotmail.com
ar-tn outlook.sa outlook.com hotmail.com
ar-ae outlook.sa outlook.com hotmail.com
ar-ye outlook.sa outlook.com hotmail.com
ar outlook.sa outlook.com hotmail.com
an outlook.com hotmail.com
hy outlook.com hotmail.com
as outlook.com hotmail.com
ast outlook.com hotmail.com
av outlook.com hotmail.com
ae outlook.com hotmail.com
ay outlook.com hotmail.com
az outlook.com hotmail.com
bm outlook.com hotmail.com
ba outlook.com hotmail.com
eu outlook.es outlook.com hotmail.com
be outlook.com hotmail.com
bn outlook.com hotmail.com
bi outlook.com hotmail.com
bs outlook.com hotmail.com
br outlook.com hotmail.com
bg outlook.com hotmail.com
my outlook.com hotmail.com
ca-valencia outlook.com hotmail.com
ca outlook.es outlook.com hotmail.com
ch outlook.com hotmail.com
ce outlook.com hotmail.com
ny outlook.com hotmail.com
zh-cn outlook.com hotmail.com
zh-hk outlook.com hotmail.com
zh-sg outlook.com hotmail.com
zh-tw outlook.com hotmail.com
zh outlook.com hotmail.com
cu outlook.com hotmail.com
cv outlook.com hotmail.com
kw outlook.com hotmail.com
co outlook.com hotmail.com
cr outlook.com hotmail.com
crh outlook.com hotmail.com
hr outlook.com hotmail.com
cs outlook.cz outlook.com hotmail.com
da outlook.dk outlook.com hotmail.com
dv outlook.com hotmail.com
nl-be outlook.be outlook.com hotmail.com
nl outlook.com hotmail.com
dz outlook.com hotmail.com
en-au outlook.com outlook.com.au hotmail.com
en-bz outlook.com hotmail.com
en-ca outlook.com hotmail.com
en-ie outlook.ie outlook.com hotmail.com
en-jm outlook.com hotmail.com
en-nz outlook.co.nz outlook.com hotmail.com
en-ph outlook.ph outlook.com hotmail.com
en-za outlook.com hotmail.com
en-tt outlook.com hotmail.com
en-gb outlook.com hotmail.com
en-zw outlook.com hotmail.com
eo outlook.com hotmail.com
et outlook.com hotmail.com
ee outlook.com hotmail.com
fo outlook.com hotmail.com
fj outlook.com hotmail.com
tl outlook.com hotmail.com
fi outlook.com hotmail.com
fr-be outlook.be outlook.com hotmail.com
fr-ca outlook.com hotmail.com
fr-fr outlook.fr outlook.com hotmail.com
fr-lu outlook.com hotmail.com
fr-mc outlook.fr outlook.com hotmail.com
fr-ch outlook.com hotmail.com
fr outlook.fr outlook.com hotmail.com
fy outlook.com hotmail.com
fur outlook.com hotmail.com
ff outlook.com hotmail.com
gl outlook.com hotmail.com
lg outlook.com hotmail.com
ka outlook.com hotmail.com
de-at outlook.com outlook.at hotmail.com
de-de outlook.de outlook.com hotmail.com
de-li outlook.de outlook.com hotmail.com
de-lu outlook.de outlook.com hotmail.com
de-ch outlook.com hotmail.com
de outlook.de outlook.com hotmail.com
el outlook.com.gr outlook.com hotmail.com
kl outlook.com hotmail.com
gn outlook.com hotmail.com
gu outlook.com outlook.in hotmail.com
ht outlook.com hotmail.com
ha outlook.com hotmail.com
haw outlook.com hotmail.com
he outlook.co.il outlook.com hotmail.com
hz outlook.com hotmail.com
hil outlook.com hotmail.com
hi outlook.com outlook.in hotmail.com
ho outlook.com hotmail.com
hu outlook.hu outlook.com hotmail.com
is outlook.com hotmail.com
io outlook.com hotmail.com
ig outlook.com hotmail.com
id outlook.co.id outlook.com hotmail.com
ia outlook.com hotmail.com
ie outlook.com hotmail.com
iu outlook.com hotmail.com
ik outlook.com hotmail.com
ga outlook.com hotmail.com
it-ch outlook.it outlook.com hotmail.com
it outlook.it outlook.com hotmail.com
jv outlook.com hotmail.com
kab outlook.com hotmail.com
kn outlook.com outlook.in hotmail.com
kr outlook.com hotmail.com
cak outlook.com hotmail.com
ks outlook.com hotmail.com
csb outlook.com hotmail.com
kk outlook.com hotmail.com
km outlook.com hotmail.com
ki outlook.com hotmail.com
rw outlook.com hotmail.com
ky outlook.com hotmail.com
rn outlook.com hotmail.com
tlh outlook.com hotmail.com
kv outlook.com hotmail.com
kg outlook.com hotmail.com
kok outlook.com hotmail.com
ko-kp outlook.com hotmail.com
ko-kr outlook.kr outlook.com hotmail.com
ko outlook.kr outlook.com hotmail.com
ku outlook.com hotmail.com
lo outlook.com hotmail.com
ltg outlook.com hotmail.com
la outlook.com hotmail.com
lv outlook.lv outlook.com hotmail.com
lij outlook.com hotmail.com
li outlook.com hotmail.com
ln outlook.com hotmail.com
lt outlook.com hotmail.com
dsb outlook.com hotmail.com
lu outlook.com hotmail.com
lb outlook.com hotmail.com
mk-mk outlook.com hotmail.com
mk outlook.com hotmail.com
mai outlook.com hotmail.com
mg outlook.com hotmail.com
ms outlook.my outlook.com hotmail.com
ml outlook.com outlook.in hotmail.com
mt outlook.com hotmail.com
gv outlook.com hotmail.com
mi outlook.com hotmail.com
mr outlook.com outlook.in hotmail.com
mh outlook.com hotmail.com
zam outlook.com hotmail.com
mix outlook.com hotmail.com
mn outlook.com hotmail.com
na outlook.com hotmail.com
nv outlook.com hotmail.com
nd outlook.com hotmail.com
nr outlook.com hotmail.com
ng outlook.com hotmail.com
ne outlook.com hotmail.com
no outlook.com hotmail.com
nb outlook.com hotmail.com
nn outlook.com hotmail.com
oc outlook.com hotmail.com
or outlook.com hotmail.com
oj outlook.com hotmail.com
om outlook.com hotmail.com
os outlook.com hotmail.com
pi outlook.com hotmail.com
ps outlook.com hotmail.com
fa-ir outlook.com hotmail.com
fa outlook.com hotmail.com
pl outlook.com hotmail.com
pt-br outlook.com outlook.com.br hotmail.com
pt-pt outlook.pt outlook.com hotmail.com
pt outlook.pt outlook.com hotmail.com
pa-in outlook.com outlook.in hotmail.com
pa-pk outlook.com hotmail.com
pa outlook.com hotmail.com
qu outlook.com hotmail.com
rm outlook.com hotmail.com
ro-md outlook.com hotmail.com
ro-ro outlook.com hotmail.com
ro outlook.com hotmail.com
ru-md outlook.com hotmail.com
ru outlook.com hotmail.com
sm outlook.com hotmail.com
sg outlook.com hotmail.com
sa outlook.com hotmail.com
sat outlook.com hotmail.com
skr outlook.com hotmail.com
sc outlook.com hotmail.com
sco outlook.com hotmail.com
gd outlook.com hotmail.com
sr outlook.com hotmail.com
ii outlook.com hotmail.com
szl outlook.com hotmail.com
sd outlook.com hotmail.com
si outlook.com hotmail.com
ss outlook.com hotmail.com
sk outlook.sk outlook.com hotmail.com
sl outlook.com hotmail.com
so outlook.com hotmail.com
son-ml outlook.com hotmail.com
son outlook.com hotmail.com
nso outlook.com hotmail.com
st outlook.com hotmail.com
meh outlook.com hotmail.com
es-ar outlook.com.ar outlook.com hotmail.com
es-bo outlook.com hotmail.com
es-cl outlook.cl outlook.com hotmail.com
es-co outlook.com hotmail.com
es-cr outlook.com hotmail.com
es-do outlook.com hotmail.com
es-ec outlook.com hotmail.com
es-sv outlook.com hotmail.com
es-gt outlook.com hotmail.com
es-hn outlook.com hotmail.com
es-mx outlook.com hotmail.com
es-ni outlook.com hotmail.com
es-pa outlook.com hotmail.com
es-py outlook.com hotmail.com
es-pe outlook.com hotmail.com
es-pr outlook.com hotmail.com
es-es outlook.es outlook.com hotmail.com
es-uy outlook.com hotmail.com
es-ve outlook.com hotmail.com
es outlook.es outlook.com hotmail.com
su outlook.com hotmail.com
sw outlook.com hotmail.com
sv-fi outlook.com hotmail.com
sv-se outlook.com hotmail.com
sv outlook.com hotmail.com
ty outlook.com hotmail.com
tg outlook.com hotmail.com
ta outlook.com outlook.in hotmail.com
tt outlook.com hotmail.com
te outlook.com outlook.in hotmail.com
th outlook.co.th outlook.com hotmail.com
bo outlook.com hotmail.com
tig outlook.com hotmail.com
ti outlook.com hotmail.com
to outlook.com hotmail.com
trs outlook.com hotmail.com
ts outlook.com hotmail.com
tn outlook.com hotmail.com
tr outlook.com outlook.com.tr hotmail.com
tk outlook.com hotmail.com
ug outlook.com hotmail.com
uk outlook.com hotmail.com
hsb outlook.com hotmail.com
ur outlook.com hotmail.com
uz outlook.com hotmail.com
ve outlook.com hotmail.com
vi outlook.com.vn outlook.com hotmail.com
vo outlook.com hotmail.com
wa outlook.com hotmail.com
cy outlook.com hotmail.com
wo outlook.com hotmail.com
xh outlook.com hotmail.com
yi outlook.com hotmail.com
yo outlook.com hotmail.com
za outlook.com hotmail.com
zu outlook.com hotmail.com

mu4eを日本語の電子メールに対して使ってみる

以前、mu4e使おうとしたことがあるのだが、日本語の電子メールを検索できないだけでなく、正常に表示もできなかったので、あきらめてしまっていた。 結局、Notmuchで試したら何も問題なく動いたので、Notmuchを使い始めて、今に至っている。

いつの間にか、mu4eもpkgsrc/mail/muとしてpkgsrcにも収録されるようになっているので、mu-1.14.1nb1を使ってみた。

いろいろ試してみると、以下のようにすれば日本語の電子メールも正しく扱えるようにデータベースを構築できた。 --support-ngrams trueを追加しておけば、XAPIAN_CJK_NGRAM環境変数を定義しておく必要はないようだ。

$ mu init --maildir ~/.maildir --personal-address my-first@example.com --personal-address my-second@example.org --personal-address my-third@example.jp --personal-address my-fourth@example.net --support-ngrams true
$ mu index

Emacsの設定は、特に特別なものである必要はないようだった。 ただ、私にはmu4eのキーバインディングは合わないので、やはりNotmuchを使うことにした。

Adobe Acrobat Readerのオフラインインストーラーを入手する

Adobe Acrobat Readerのオフラインインストーラーを入手したくて、https://get.adobe.com/jp/reader/enterprise/からダウンロードしようとすると、言語をAll Languages (MUI)に設定しないと、Windows 11用の64ビット版はダウンロードできない。

2026年5月18日時点では、以下のURIからダウンロードされるようだ。

https://ardownload3.adobe.com/pub/adobe/acrobat/win/AcrobatDC/2600121529/AcroRdrDCx642600121529_MUI.exe

以前は、その他のバージョンのダウンロードからオフラインインストーラーを入手できたのだが、今はスタブインストーラーしか入手できないようだ。

ftp.adobe.comの現状

かつては、ftp://ftp.adobe.comにアクセスして、いろいろなものがダウンロードできたのだが、ftp.adobe.comは既にftpではログインできなくなっている。

$ ftp ftp.adobe.com
Connected to ftpgen.wip4.adobe.com.
500 OOPS: failed to open xferlog log file:/apps/log/ftp/ftp.adobe.com/xferlog
ftp>

のようになるので、ftpdは動いているのだろうが、ちゃんと設定されていないということのようだ。

http://ftp.adobe.com/を開くと、http://download.adobe.com/にリダイレクトされる。 *.adobe.comに有効なDigiCert発行のTLS証明書が設定されているのでhttpsなアクセスもできる。だが、その表示はRed Hat Enterprise Linux Test Pageである。httpdはヘッダーを見る限りApache httpdのようだ。

Mosquittoに、Python Paho MQTT libraryを使ってアクセスする

あらかじめ起動しておいたMosquitto にPython Paho MQTT library (pkgsrc/net/py-paho-mqtt 2.1.0)を使って、Mosquittoの受信したデータを、InfluxDB 1 (pkgsrc/databases/influ...