From 27a65d4ccb8f1d7c3693436af982eec9ed246c72 Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Fri, 12 Jul 2024 19:08:50 +0100 Subject: [PATCH] Add missing "on_publish" event callback in IO_MQTT - Fixes #122 --- adafruit_io/adafruit_io.py | 8 ++++++++ .../adafruit_io_mqtt/adafruit_io_feed_callback.py | 10 ++++++++++ examples/adafruit_io_mqtt/adafruit_io_groups.py | 10 ++++++++++ examples/adafruit_io_mqtt/adafruit_io_location.py | 10 ++++++++++ .../adafruit_io_mqtt/adafruit_io_pubsub_rp2040.py | 12 ++++++++++++ .../adafruit_io_simpletest_cellular.py | 12 ++++++++++++ .../adafruit_io_simpletest_esp32s2.py | 12 ++++++++++++ .../adafruit_io_mqtt/adafruit_io_simpletest_eth.py | 12 ++++++++++++ examples/adafruit_io_mqtt/adafruit_io_time.py | 10 ++++++++++ examples/adafruit_io_simpletest.py | 10 ++++++++++ 10 files changed, 106 insertions(+) diff --git a/adafruit_io/adafruit_io.py b/adafruit_io/adafruit_io.py index 67b014c..28822a4 100755 --- a/adafruit_io/adafruit_io.py +++ b/adafruit_io/adafruit_io.py @@ -98,12 +98,14 @@ def __init__(self, mqtt_client): self.on_message = None self.on_subscribe = None self.on_unsubscribe = None + self.on_publish = None # MQTT event callbacks self._client.on_connect = self._on_connect_mqtt self._client.on_disconnect = self._on_disconnect_mqtt self._client.on_message = self._on_message_mqtt self._client.on_subscribe = self._on_subscribe_mqtt self._client.on_unsubscribe = self._on_unsubscribe_mqtt + self._client.on_publish = self._on_publish_mqtt self._connected = False def __enter__(self): @@ -201,6 +203,12 @@ def _on_message_mqtt(self, client, topic: str, payload: str): ) self.on_message(self, topic_name, message) + # pylint: disable=not-callable, unused-argument + def _on_publish_mqtt(self, client, user_data, topic, pid): + """Runs when the client calls on_publish.""" + if self.on_publish is not None: + self.on_publish(self, user_data, topic, pid) + # pylint: disable=not-callable def _on_subscribe_mqtt(self, client, user_data, topic, qos): """Runs when the client calls on_subscribe.""" diff --git a/examples/adafruit_io_mqtt/adafruit_io_feed_callback.py b/examples/adafruit_io_mqtt/adafruit_io_feed_callback.py index a58f38c..442ca91 100644 --- a/examples/adafruit_io_mqtt/adafruit_io_feed_callback.py +++ b/examples/adafruit_io_mqtt/adafruit_io_feed_callback.py @@ -76,6 +76,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def on_message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -116,6 +125,7 @@ def on_battery_msg(client, topic, message): io.on_subscribe = subscribe io.on_unsubscribe = unsubscribe io.on_message = on_message +io.on_publish = publish # Connect to Adafruit IO print("Connecting to Adafruit IO...") diff --git a/examples/adafruit_io_mqtt/adafruit_io_groups.py b/examples/adafruit_io_mqtt/adafruit_io_groups.py index 15fd7d9..0634ac1 100755 --- a/examples/adafruit_io_mqtt/adafruit_io_groups.py +++ b/examples/adafruit_io_mqtt/adafruit_io_groups.py @@ -72,6 +72,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -105,6 +114,7 @@ def message(client, feed_id, payload): io.on_connect = connected io.on_disconnect = disconnected io.on_message = message +io.on_publish = publish # Group name group_name = "weatherstation" diff --git a/examples/adafruit_io_mqtt/adafruit_io_location.py b/examples/adafruit_io_mqtt/adafruit_io_location.py index f4e58f7..4b78463 100755 --- a/examples/adafruit_io_mqtt/adafruit_io_location.py +++ b/examples/adafruit_io_mqtt/adafruit_io_location.py @@ -72,6 +72,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -105,6 +114,7 @@ def message(client, feed_id, payload): io.on_connect = connected io.on_disconnect = disconnected io.on_message = message +io.on_publish = publish # Connect to Adafruit IO io.connect() diff --git a/examples/adafruit_io_mqtt/adafruit_io_pubsub_rp2040.py b/examples/adafruit_io_mqtt/adafruit_io_pubsub_rp2040.py index 18cd1c1..0fba44a 100644 --- a/examples/adafruit_io_mqtt/adafruit_io_pubsub_rp2040.py +++ b/examples/adafruit_io_mqtt/adafruit_io_pubsub_rp2040.py @@ -43,17 +43,28 @@ def connected(client): print("Connected to Adafruit IO! ") +# pylint: disable=unused-argument def subscribe(client, userdata, topic, granted_qos): # This method is called when the client subscribes to a new feed. print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos)) +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def disconnected(client): # Disconnected function will be called when the client disconnects. print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument def on_led_msg(client, topic, message): # Method called whenever user/feeds/led has a new value print("New message on topic {0}: {1} ".format(topic, message)) @@ -90,6 +101,7 @@ def on_led_msg(client, topic, message): io.on_connect = connected io.on_disconnect = disconnected io.on_subscribe = subscribe +io.on_publish = publish # Set up a callback for the led feed io.add_feed_callback("led", on_led_msg) diff --git a/examples/adafruit_io_mqtt/adafruit_io_simpletest_cellular.py b/examples/adafruit_io_mqtt/adafruit_io_simpletest_cellular.py index bfe565b..634de5b 100644 --- a/examples/adafruit_io_mqtt/adafruit_io_simpletest_cellular.py +++ b/examples/adafruit_io_mqtt/adafruit_io_simpletest_cellular.py @@ -59,11 +59,13 @@ def connected(client): client.subscribe("DemoFeed") +# pylint: disable=unused-argument def subscribe(client, userdata, topic, granted_qos): # This method is called when the client subscribes to a new feed. print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos)) +# pylint: disable=unused-argument def unsubscribe(client, userdata, topic, pid): # This method is called when the client unsubscribes from a feed. print("Unsubscribed from {0} with PID {1}".format(topic, pid)) @@ -75,6 +77,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -104,6 +115,7 @@ def message(client, feed_id, payload): io.on_subscribe = subscribe io.on_unsubscribe = unsubscribe io.on_message = message +io.on_publish = publish # Connect to Adafruit IO print("Connecting to Adafruit IO...") diff --git a/examples/adafruit_io_mqtt/adafruit_io_simpletest_esp32s2.py b/examples/adafruit_io_mqtt/adafruit_io_simpletest_esp32s2.py index 1ecb026..e032926 100644 --- a/examples/adafruit_io_mqtt/adafruit_io_simpletest_esp32s2.py +++ b/examples/adafruit_io_mqtt/adafruit_io_simpletest_esp32s2.py @@ -56,11 +56,13 @@ def connected(client): client.subscribe("DemoFeed") +# pylint: disable=unused-argument def subscribe(client, userdata, topic, granted_qos): # This method is called when the client subscribes to a new feed. print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos)) +# pylint: disable=unused-argument def unsubscribe(client, userdata, topic, pid): # This method is called when the client unsubscribes from a feed. print("Unsubscribed from {0} with PID {1}".format(topic, pid)) @@ -72,6 +74,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -103,6 +114,7 @@ def message(client, feed_id, payload): io.on_subscribe = subscribe io.on_unsubscribe = unsubscribe io.on_message = message +io.on_publish = publish # Connect to Adafruit IO print("Connecting to Adafruit IO...") diff --git a/examples/adafruit_io_mqtt/adafruit_io_simpletest_eth.py b/examples/adafruit_io_mqtt/adafruit_io_simpletest_eth.py index ad9bcdc..07ff0f7 100755 --- a/examples/adafruit_io_mqtt/adafruit_io_simpletest_eth.py +++ b/examples/adafruit_io_mqtt/adafruit_io_simpletest_eth.py @@ -43,11 +43,13 @@ def connected(client): client.subscribe("DemoFeed") +# pylint: disable=unused-argument def subscribe(client, userdata, topic, granted_qos): # This method is called when the client subscribes to a new feed. print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos)) +# pylint: disable=unused-argument def unsubscribe(client, userdata, topic, pid): # This method is called when the client unsubscribes from a feed. print("Unsubscribed from {0} with PID {1}".format(topic, pid)) @@ -59,6 +61,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -89,6 +100,7 @@ def message(client, feed_id, payload): io.on_subscribe = subscribe io.on_unsubscribe = unsubscribe io.on_message = message +io.on_publish = publish # Connect to Adafruit IO print("Connecting to Adafruit IO...") diff --git a/examples/adafruit_io_mqtt/adafruit_io_time.py b/examples/adafruit_io_mqtt/adafruit_io_time.py index cd0ea42..d457865 100755 --- a/examples/adafruit_io_mqtt/adafruit_io_time.py +++ b/examples/adafruit_io_mqtt/adafruit_io_time.py @@ -86,6 +86,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + # This method is called when the client publishes data to a feed. + print("Published to {0} with PID {1}".format(topic, pid)) + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -119,6 +128,7 @@ def message(client, feed_id, payload): io.on_connect = connected io.on_disconnect = disconnected io.on_message = message +io.on_publish = publish # Connect to Adafruit IO io.connect() diff --git a/examples/adafruit_io_simpletest.py b/examples/adafruit_io_simpletest.py index 85382dd..2dc56b3 100755 --- a/examples/adafruit_io_simpletest.py +++ b/examples/adafruit_io_simpletest.py @@ -84,6 +84,15 @@ def disconnected(client): print("Disconnected from Adafruit IO!") +# pylint: disable=unused-argument +def publish(client, userdata, topic, pid): + """This method is called when the client publishes data to a feed.""" + print(f"Published to {topic} with PID {pid}") + if userdata is not None: + print("Published User data: ", end="") + print(userdata) + + # pylint: disable=unused-argument def message(client, feed_id, payload): # Message function will be called when a subscribed feed has a new value. @@ -120,6 +129,7 @@ def message(client, feed_id, payload): io.on_subscribe = subscribe io.on_unsubscribe = unsubscribe io.on_message = message +io.on_publish = publish # Connect to Adafruit IO print("Connecting to Adafruit IO...")