1
0

More than 1 year has passed since last update.

MQTT で受信したデータをファイルに書き出す

Last updated at Posted at 2022-12-14

プログラム

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0