import paho.mqtt.client as mqtt
last_message_sent = time.time()
class SuperClient(mqtt.Client):
def loop(self, timeout=1.0, max_packets=1):
return super(SuperClient, self).loop()
self.old_temperature = 0.0
return self.old_humidity != self.humidity or self.old_temperature != self.temperature
if time.time() - self.last_update > 5:
self.old_humidity = self.humidity
self.old_temperature = self.temperature
humidity, temperature = Adafruit_DHT.read(sensor=Adafruit_DHT.DHT22, pin=self.pin)
if None not in [humidity, temperature]:
self.humidity = round(float(humidity), 1)
self.temperature = round(float(temperature), 1)
self.last_update = time.time()
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
# The callback for when the client receives a CONNACK response from the server.
def on_disconnect(client, userdata, rc):
client_id = "rasp-" + str(uuid.uuid4())
mqtt_client = SuperClient(client_id=client_id, clean_session=True)
mqtt_client.on_connect = on_connect
mqtt_client.on_disconnect = on_disconnect
mqtt_client._keepalive = 60
#mqtt_client.max_queued_messages_set(queue_size=1)
def update_via_mqtt(sensor: DHTSensor):
mqtt_client.publish(topic=f"rasp/dht/humidity/{sensor.pin}", payload=f"{sensor.humidity}", qos=0, retain=True)
mqtt_client.publish(topic=f"rasp/dht/temperature/{sensor.pin}", payload=f"{sensor.temperature}", qos=0, retain=True)
set_client(host="x.x.x.x")
sensors = [DHTSensor(pin=19), DHTSensor(pin=26)]
update_via_mqtt(sensor=sensor)
if time.time() - last_message_sent > 10:
update_via_mqtt(sensor=sensor)
last_message_sent = time.time()