😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

raspberry pi broker μ—μ„œ pub μ—μ„œ 받은 값을 sub 둜 sqlite 에 μ €μž₯ν•˜κΈ° λ³Έλ¬Έ

πŸ‘©‍πŸ’» IoT (Embedded)/Raspberry Pi

raspberry pi broker μ—μ„œ pub μ—μ„œ 받은 값을 sub 둜 sqlite 에 μ €μž₯ν•˜κΈ°

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 12. 12. 14:15
728x90
λ°˜μ‘ν˜•

πŸ§‘‍πŸŽ„ python paho-mqtt μ‚¬μš©ν•˜κΈ°

sudo apt-get install python3-pip
pip3 install paho-mqtt

 

λ§Œμ•½. μœ„μ™€ κ΄€λ ¨λœ 였λ₯˜κ°€ λ‚˜μ˜¨λ‹€λ©΄

sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED

이걸둜 ν•΄κ²°!

 

λ‹€μ‹œ paho-mqtt μ„€μΉ˜ν•˜λ©΄ λœλ‹€

 

πŸ§‘‍πŸŽ„ pubμ—μ„œ 받은 값을 sqlite3에 μ €μž₯ν•˜κΈ°

# main.c

import paho.mqtt.client as mqtt
import sqlite3
from time import time

MQTT_HOST = '192.168.0.154'
MQTT_PORT = 1883
MQTT_CLIENT_ID = 'sqlClient'
MQTT_USER = 'YOUR MQTT USER'
MQTT_PASSWORD = 'YOUR MQTT USER PASSWORD'
TOPIC = 'sensor/#'

DATABASE_FILE = 'mqtt.db'


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, int(time())))
    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()

 

sqlite3 mqtt.db
// database μƒνƒœ 확인
.database

// ν…Œμ΄λΈ” 확인
.tables

 

728x90
λ°˜μ‘ν˜•
Comments