import network
import time
from machine import Pin
import ujson
from umqtt.simple import MQTTClient
led_rojo = Pin(16, Pin.OUT)
led_verde = Pin(13, Pin.OUT)
led_azul = Pin(17, Pin.OUT)
parpadeo_activo_rojo = False # Variables de estado para controlar los parpadeos
parpadeo_activo_verde = False
parpadeo_activo_azul = False
# Identificar el cliente mqqt con el que vamos a trabajar
MQTT_CLIENT_ID = ""
# Conectarnos al broker
MQTT_BROKER = "broker.mqttdashboard.com"
# No definimos un nombre de usuario ni una contraseña
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "freepbx/calls/status" # Topic al que nos suscribimos
# Función callback que se ejecutará cuando llegue un mensaje al topic
def sub_cb(topic, msg):
print(f"Mensaje recibido en el topic {topic}: {msg}")
# Decodificar el mensaje JSON
data = ujson.loads(msg)
# Obteniendo el valor del campo status del json mandado desde Node-Red
campo = data.get('status', 'Valor predeterminado')
# Acción para cada estado que recibamos.
evaluacionLlamadas(campo)
# Función para realizar toda la lógica
def evaluacionLlamadas(campo):
global parpadeo_activo_rojo, parpadeo_activo_verde, parpadeo_activo_azul
if campo == "Ringing":
parpadeo_activo_verde = False
parpadeo_activo_azul = False
parpadeo_activo_rojo = True
elif campo == "InUse":
parpadeo_activo_rojo = False
parpadeo_activo_azul = False
parpadeo_activo_verde = True
elif campo == "Idle":
parpadeo_activo_rojo = False
parpadeo_activo_verde = False
parpadeo_activo_azul = True
print("Conectándonos al WIFI", end="")
red = network.WLAN(network.STA_IF) # De tipo cliente
red.active(True)
red.connect('Wokwi-GUEST', '')
while not red.isconnected(): # Mientras la red no esté conectada
print(".", end="")
time.sleep(0.5)
print("Conectado")
# Creando objeto de tipo cliente llamado client
print("Conectándome a MQTT", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(sub_cb)
client.connect()
# Suscribirse al topic
client.subscribe(MQTT_TOPIC)
print("Esperando mensajes...")
try:
while True:
client.check_msg()
if parpadeo_activo_rojo:
led_rojo.value(1)
time.sleep(0.5)
led_rojo.value(0)
time.sleep(0.5)
if parpadeo_activo_verde:
led_verde.value(1)
time.sleep(0.5)
led_verde.value(0)
time.sleep(0.5)
if parpadeo_activo_azul:
led_azul.value(1)
time.sleep(0.5)
led_azul.value(0)
time.sleep(0.5)
else:
led_rojo.value(0)
led_verde.value(0)
led_azul.value(0)
time.sleep(1) # Agregar un pequeño retraso para evitar bucles demasiado rápidos
except KeyboardInterrupt:
print("Desconectando...")
client.disconnect()
red.active(False)
print("Desconectado")