sql >> データベース >  >> RDS >> Mysql

MQTT Mosquitto公開イベントをMySQLに保存する方法は?

    私は過去数日間に似たようなことをしました:

    • ライブ収集気象観測所-pywwsを使用したデータ
    • pywws.service.mqttを使用してmqtt-Brokerに公開する
    • python-script NASでデータを収集して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. SQLServerでANY/SOME論理演算子を使用する方法-SQLServer/TSQLチュートリアルパート127

    2. Postgresデータベース内のすべてのテーブルを切り捨てる

    3. SQLインジェクションを防ぐためにmysql_real_escape_stringをどこで使用しますか?

    4. PHPの使用方法MySQLに挿入された単語ペア(文字列)配列をカウントします