sql >> Database >  >> RDS >> Mysql

Hoe bewaart u MQTT Mosquitto-publicatiegebeurtenissen in MySQL?

Ik heb de afgelopen dagen iets soortgelijks gedaan:

  • live-verzamelen van weerstationgegevens met pywws
  • publiceren met pywws.service.mqtt naar mqtt-Broker
  • python-script op NAS de gegevens verzamelen en schrijven naar MariaDB
#!/usr/bin/python -u

import mysql.connector as mariadb
import paho.mqtt.client as mqtt
import ssl

mariadb_connection = mariadb.connect(user='USER', password='PW', database='MYDB')
cursor = mariadb_connection.cursor()

# MQTT Settings 
MQTT_Broker = "192.XXX.XXX.XXX"
MQTT_Port = 8883
Keep_Alive_Interval = 60
MQTT_Topic = "/weather/pywws/#"

# Subscribe
def on_connect(client, userdata, flags, rc):
  mqttc.subscribe(MQTT_Topic, 0)

def on_message(mosq, obj, msg):
  # Prepare Data, separate columns and values
  msg_clear = msg.payload.translate(None, '{}""').split(", ")
  msg_dict =    {}
  for i in range(0, len(msg_clear)):
    msg_dict[msg_clear[i].split(": ")[0]] = msg_clear[i].split(": ")[1]

  # Prepare dynamic sql-statement
  placeholders = ', '.join(['%s'] * len(msg_dict))
  columns = ', '.join(msg_dict.keys())
  sql = "INSERT INTO pws ( %s ) VALUES ( %s )" % (columns, placeholders)

  # Save Data into DB Table
  try:
      cursor.execute(sql, msg_dict.values())
  except mariadb.Error as error:
      print("Error: {}".format(error))
  mariadb_connection.commit()

def on_subscribe(mosq, obj, mid, granted_qos):
  pass

mqttc = mqtt.Client()

# Assign event callbacks
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe

# Connect
mqttc.tls_set(ca_certs="ca.crt", tls_version=ssl.PROTOCOL_TLSv1_2)
mqttc.connect(MQTT_Broker, int(MQTT_Port), int(Keep_Alive_Interval))

# Continue the network loop & close db-connection
mqttc.loop_forever()
mariadb_connection.close()


  1. Introductie van MariaDB Platform X5:de database voor elke workload, nu op elke schaal

  2. Deze door PDO voorbereide instructie retourneert false maar geeft geen fout

  3. Verbinding maken met MySQL veroorzaakt fout Gegevensbronnaam niet gevonden en geen standaardstuurprogramma opgegeven

  4. Wanneer u NetBeans gebruikt om PHP-scripts te debuggen om tabelrecords te wijzigen, verandert 'affected_rows' van 1 in -1