Files
weather_station_MK2/software/test_software/mqtt_control_simple.py
2025-08-11 21:31:31 +02:00

90 lines
2.3 KiB
Python

# python 3.11
import random
import time
from paho.mqtt import client as mqtt_client
from paho.mqtt.client import CallbackAPIVersion
broker = 'mqtt.meezenest.nl'
port = 1883
topic = "python/mqtt"
# Generate a Client ID with the publish prefix.
client_id = f'publish-{random.randint(0, 1000)}'
# username = 'emqx'
# password = 'public'
msg_count = 1
def connect_mqtt():
def on_connect(client, userdata, flags, rc, properties):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
def on_disconnect(client, userdata, rc):
print("Disconnected with result code: %s", rc)
reconnect_count, reconnect_delay = 0, FIRST_RECONNECT_DELAY
while reconnect_count < MAX_RECONNECT_COUNT:
print("Reconnecting in %d seconds...", reconnect_delay)
time.sleep(reconnect_delay)
try:
client.reconnect()
print("Reconnected successfully!")
return
except Exception as err:
logging.error("%s. Reconnect failed. Retrying...", err)
reconnect_delay *= RECONNECT_RATE
reconnect_delay = min(reconnect_delay, MAX_RECONNECT_DELAY)
reconnect_count += 1
print("Reconnect failed after %s attempts. Exiting...", reconnect_count)
global FLAG_EXIT
FLAG_EXIT = True
client = mqtt_client.Client(CallbackAPIVersion.VERSION2, client_id)
# client.username_pw_set(username, password)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(broker, port, 120)
return client
def publish(client):
global msg_count
#while True:
time.sleep(1)
msg = f"messages: {msg_count}"
result = client.publish(topic, msg)
# result: [0, 1]
status = result[0]
if status == 0:
print(f"Send `{msg}` to topic `{topic}`")
else:
print(f"Failed to send message to topic {topic}")
msg_count += 1
if msg_count > 5:
#break
msg_count=1
def run():
client = connect_mqtt()
client.loop_start()
while 1:
if client.is_connected():
print(client.is_connected())
publish(client)
#else:
#client.loop_stop()
client.loop_stop()
if __name__ == '__main__':
run()