プログラム
subscribe_log.py
#! /usr/bin/python
#
# subscribe_log.py
#
# Dec/14/2022
#
# ------------------------------------------------------------------
import sys
import json
from time import sleep
import paho.mqtt.client as mqtt
import time
# ------------------------------------------------------------------
def log_write_proc(json_str):
# print(json_str)
unit_aa = json.loads(json_str)
#
print(unit_aa)
#
fp_out = open(file_log,mode='a', encoding='utf-8')
fp_out.write(json_str + "\n")
fp_out.close()
# ------------------------------------------------------------------
def on_connect(client, userdata, flags, respons_code):
# print('status {0}'.format(respons_code))
client.subscribe(topic)
# ------------------------------------------------------------------
def on_message(client, userdata, msg):
# print(msg.topic + ' ' + str(msg.payload,'utf-8'))
log_write_proc(str(msg.payload,'utf-8'))
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#host = '35.75.37.18'
# topic = 'esp32/test'
host = sys.argv[1]
topic = sys.argv[2]
port = 1883
file_log = "/tmp/" + topic + ".log"
sys.stderr.write(host + "\n")
sys.stderr.write(topic + "\n")
sys.stderr.write(file_log + "\n")
#
client = mqtt.Client(protocol=mqtt.MQTTv311)
client.on_connect = on_connect
client.on_message = on_message
client.connect(host, port=port, keepalive=60)
client.loop_forever()
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
使い方
broker: example.com
topic: example/test
とすると、
./subscribe_log.py example.com example/test
実行前に、/tmp/example を作成して下さい。
次のファイルが作成されます。
/tmp/example/test.log
Systemd で動かす
プログラムを、
/usr/local/subscribe
に置いて下さい。
/etc/systemd/system/subscribe_temperature_log.service
[Unit]
Description = start up mqtt_client subscribe_temperature_log
[Service]
WorkingDirectory=/var/tmp/subscribe_log
ExecStart=/usr/local/subscribe/subscribe_log.py example.com example/test
Type=simple
[Install]
WantedBy=default.target
作業用の Directory を作成
mkdir /var/tmp/subscribe_log
起動
sudo systemctl start subscribe_temperature_log
起動したことを確認
sudo systemctl status subscribe_temperature_log