ラズベリーパイのrc.localでpythonの自動実行を試しているのですがなかなか上手く行きません。
やりたいことは、アクセスポイント化したラズパイが外部端末から受け取ったmqttデータをsqlite3に保存するプログラムをラズパイの起動に合わせて自動で実行するといった内容です。
使用機器 ラズパイ3b+
rc.localの設定内容とpythonのスクリプトを掲載しておきます。
よろしくおねがいします。
rc.localの設定
service mosquitto stop service dhcpcd stop service hostapd stop service dnsmasq stop sleep 8 service dnsmasq start service hostapd start service dhcpcd start service mosquitto start sleep 10 python main3.py
pythonのスクリプト
import paho.mqtt.client as mqtt import sqlite3 import datetime MQTT_HOST = 'ラズパイのアドレス' MQTT_PORT = ポート番号 MQTT_CLIENT_ID = '任意のID' MQTT_USER = 'ユーザー名' MQTT_PASSWORD = 'パスワード' TOPIC = 'トピック' DATABASE_FILE = 'データベースファイルのパス' def on_connect(mqtt_client, user_data, flags, conn_result): mqtt_client.subscribe(TOPIC) def on_message(mqtt_client, user_data, message): payload = message.payload.decode('utf-8') db_conn = user_data['db_conn'] sql = 'INSERT INTO sensors_data (topic, payload, created_at) VALUES (?, ?, ?)' cursor = db_conn.cursor() cursor.execute(sql, (message.topic, payload, datetime.datetime.now())) db_conn.commit() cursor.close() def main(): db_conn = sqlite3.connect(DATABASE_FILE) sql = """ CREATE TABLE IF NOT EXISTS sensors_data ( id INTEGER PRIMARY KEY AUTOINCREMENT, topic TEXT NOT NULL, payload TEXT NOT NULL, created_at INTEGER NOT NULL ) """ cursor = db_conn.cursor() cursor.execute(sql) cursor.close() mqtt_client = mqtt.Client(MQTT_CLIENT_ID) mqtt_client.username_pw_set(MQTT_USER, MQTT_PASSWORD) mqtt_client.user_data_set({'db_conn': db_conn}) mqtt_client.on_connect = on_connect mqtt_client.on_message = on_message mqtt_client.connect(MQTT_HOST, MQTT_PORT) mqtt_client.loop_forever() main()
回答1件
あなたの回答
tips
プレビュー