domingo, 20 de agosto de 2017

Tutorial #17 ESP8266 (Parte7) – Integrar MQTT con MySQL usando Python

Este es el séptimo tutorial de IOT (internet de las cosas) usando MQTT en un ESP8266; en estos videos (Parte A y B) explico cómo integrar MQTT (usando el bróker CloudMQTT) con MySQL, para eso vamos a usar Python y dos librerías, “paho-mqtt 1.3.0” para conectarse con MQTT y “MySQL-python 1.2.5” para trabajar con la base de datos. En la parte B del tutorial termino de explicar cómo crear la base de datos usando la herramienta phpMyAdmin incluida en el servidor local WAMP “Uniform Server – Coral 8.9.2”; y agrego lo que falta del código de Python como trabajar con la base de datos.

Parte A:


Parte B:


tutorial17.py:

#!/usr/bin/env python 1
# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt
import sys

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Conectado - Codigo de resultado: "+str(rc))

    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("/#")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

try:
    client.connect("m13.cloudmqtt.com", 11948, 60)
except:
    print("No se pudo conectar con el MQTT Broker...")
    print("Cerrando...")
    sys.exit()
    
client.username_pw_set("lqeamtbn", "vh0cU_Vcszxp")

try:
    client.loop_forever()
except KeyboardInterrupt:  #precionar Crtl + C para salir
    print("Cerrando...")

tutorial17b.py:

#!/usr/bin/env python 1
# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt
import sys
import MySQLdb

# Abrir conexión con bases de datos
try:
    db = MySQLdb.connect("127.0.0.1","root","root","tutorial17")
except:
    print("No se pudo conectar con la base de datos")
    print("Cerrando...")
    sys.exit()

# Preparando cursor
cursor = db.cursor()

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Conectado - Codigo de resultado: "+str(rc))

    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("/#")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    lista = msg.topic.split("/")

    sql = """INSERT INTO `tutorial17`.`tabla` (`id`, `usuario`, `topic`, `mensaje`, `fecha`) VALUES (NULL, '""" + lista[1]+ """', '""" + lista[2] + """', '""" + str(msg.payload) + """', CURRENT_TIMESTAMP);"""

    try:
        # Ejecutar un comando SQL
        cursor.execute(sql)
        db.commit()
        print("Guardando en base de datos...OK")
    except:
        db.rollback()
        print("Guardando en base de datos...Falló")
        
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

try:
    client.connect("m13.cloudmqtt.com", 11948, 60)
except:
    print("No se pudo conectar con el MQTT Broker...")
    print("Cerrando...")
    db.close()
    sys.exit()   
    
client.username_pw_set("lqeamtbn", "vh0cU_Vcszxp")

try:
    client.loop_forever()
except KeyboardInterrupt:  #precionar Crtl + C para salir
    print("Cerrando...")
    db.close()

Python y Librerías:


Enlaces externos:

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

4 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. que servidor externo podria funcionar???? ya probe infinitum y no funciona

    ResponderEliminar
  3. Muy buenos tutoriales Alejandro. Una consulta por favor, si quisiera hacer funcionar python desde un servidor remoto, que es necesario hacer? Ya que para que funcione en servidor local el script de python debe estar corriendo. Es necesario configurar o subir algo en el servidor remoto? Agradecere mucho tu ayuda. Saludos

    ResponderEliminar
  4. No es tan fácil, necesitas un servidor en el que corras Python en el backend. No creo que encuentres uno gratuito. Deberías hacerlo vos, o contratar algo en la nube. Saludos.

    ResponderEliminar