iT邦幫忙

0

python MQTT Mosquitto

  • 分享至 

  • xImage

你好
目前正在學習MQTT與PYTHON串接,我先在電腦上安裝Mosquitto 啟動後
進行發布與訂閱,並將資料寫入postgresql。

單一發布與訂閱、寫入是可動作的,但是...
我新增了另一個主題test1,同時訂閱test1/test2 是可以在terminal上收到資料,但是要怎麼把test1/test2 的資料分開,寫入不同table??

請各位給方向或解決方法
更新:以程式碼替換圖片

publish code:

import paho.mqtt.client as mqtt
import random
import json
import datetime
import time

ISOTIMEFORMAT = '%m/%d %H:%M:%S'
client = mqtt.Client()
client.username_pw_set("try","xxxx")
client.connect("127.0.0.1", 1883, 60)

while True:
    t0 = random.randint(0,30)
    t = datetime.datetime.now().strftime(ISOTIMEFORMAT)
    payload = {'Temperature' : t0 , 'Time' : t}
    print (json.dumps(payload))
    #要發布的主題和內容
    client.publish("test", json.dumps(payload))
    #新建立的topic,test1
    client.publish("test", json.dumps(payload))
    time.sleep(5)

subscribe code

import paho.mqtt.client as mqtt
import psycopg2
import pandas as pd

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("test")
    #新訂閱test1
    client.subscribe("test1")
    
# 以上都可以在terminal 上接收topic test1/test2的資訊,但要寫入postgresql同一個database不同table的時候,就寫不進去,在terminal上會繼續跑接收到的資訊,但在資料庫是部會有資料寫入,寫請問這部分怎麼解??

# 當接收到從伺服器發送的訊息時要進行的動作
def on_message(client, userdata, msg):
    # 轉換編碼utf-8才看得懂中文
    print(msg.payload.decode('utf-8'))
    original = eval(msg.payload.decode('utf-8'))
    try:
        connection = psycopg2.connect(user="postgres",  # 預設使用者
                                      password="",  # 登入密碼
                                      host="127.0.0.1",
                                      port="5432",
                                      database="database_test")  # 要連結的資料庫

        cursor = connection.cursor()
        postgreSQL_insert_Query = '''INSERT INTO mqtttest(time,temperature) VALUES (%s,%s)'''
        recods_to_insert = (original['Time'], original['Temperature'])
        cursor.execute(postgreSQL_insert_Query, recods_to_insert)
        connection.commit()
        count = cursor.rowcount
        print(count, "record inserted successfully")
    except (Exception, psycopg2.Error) as error:
        print("Error while connecting to PostgreSQL", error)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("try","xxxx")
client.connect("127.0.0.1", 1883, 60)
client.loop_forever()
程式碼盡量不要用圖片 請把程式碼貼出來方便大家測試
new_p iT邦新手 5 級 ‧ 2020-08-21 16:02:01 檢舉
好的~已換成code
new_p iT邦新手 5 級 ‧ 2020-11-02 14:51:04 檢舉
有人追蹤,我想也有人跟我同樣問題吧...自己回解決方法
參考https://stackoverflow.com/questions/47434920/python-mqtt-broker-messages-bulk-insert-into-mysql-database
結案
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答