]> git.michaelhowe.org Git - packages/p/paho-mqtt.git/commitdiff
Example program to clear retained topic trees.
authorRoger Light <roger@atchoo.org>
Sat, 22 Jun 2013 22:18:38 +0000 (23:18 +0100)
committerRoger Light <roger@atchoo.org>
Mon, 3 Feb 2014 21:17:08 +0000 (21:17 +0000)
examples/mqtt_clear_retain.py [new file with mode: 0755]

diff --git a/examples/mqtt_clear_retain.py b/examples/mqtt_clear_retain.py
new file mode 100755 (executable)
index 0000000..dc88a4b
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/python
+
+# Copyright (c) 2013 Roger Light <roger@atchoo.org>
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Distribution License v1.0
+# which accompanies this distribution. 
+#
+# The Eclipse Distribution License is available at 
+#   http://www.eclipse.org/org/documents/edl-v10.php.
+#
+# Contributors:
+#    Roger Light - initial implementation
+# Copyright (c) 2010,2011 Roger Light <roger@atchoo.org>
+# All rights reserved.
+
+import sys
+import getopt
+try:
+    import paho.mqtt.client as mqtt
+except ImportError:
+    # This part is only required to run the example from within the examples
+    # directory when the module itself is not installed.
+    import os
+    import inspect
+    cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"../src")))
+    if cmd_subfolder not in sys.path:
+        sys.path.insert(0, cmd_subfolder)
+    import paho.mqtt.client as mqtt
+
+
+final_mid = 0
+
+def on_connect(mqttc, userdata, rc):
+    if userdata == True:
+        print("rc: "+str(rc))
+
+def on_message(mqttc, userdata, msg):
+    global final_mid
+    if msg.retain == 0:
+        pass
+        #sys.exit()
+    else:
+        if userdata == True:
+            print("Clearing topic "+msg.topic)
+        (rc, final_mid) = mqttc.publish(msg.topic, None, 1, True)
+
+def on_publish(mqttc, userdata, mid):
+    global final_mid
+    if mid == final_mid:
+        sys.exit()
+
+def on_log(mqttc, userdata, level, string):
+    print(string)
+
+def print_usage():
+    print("mqtt_clear_retain.py [-d] [-h hostname] [-i clientid] [-k keepalive] [-p port] [-u username [-P password]] [-v] -t topic")
+
+def main(argv):
+    debug = False
+    host = "localhost"
+    client_id = None
+    keepalive = 60
+    port = 1883
+    password = None
+    topic = None
+    username = None
+    verbose = False
+
+    try:
+        opts, args = getopt.getopt(argv, "dh:i:k:p:P:t:u:v", ["debug", "id", "keepalive", "port", "password", "topic", "username", "verbose"])
+    except getopt.GetoptError as s:
+        print_usage()
+        sys.exit(2)
+    for opt, arg in opts:
+        if opt in ("-d", "--debug"):
+            debug = True
+        elif opt in ("-h", "--host"):
+            host = arg
+        elif opt in ("-i", "--id"):
+            client_id = arg
+        elif opt in ("-k", "--keepalive"):
+            keepalive = int(arg)
+        elif opt in ("-p", "--port"):
+            port = int(arg)
+        elif opt in ("-P", "--password"):
+            password = arg
+        elif opt in ("-t", "--topic"):
+            topic = arg
+            print(topic)
+        elif opt in ("-u", "--username"):
+            username = arg
+        elif opt in ("-v", "--verbose"):
+            verbose = True
+
+    if topic == None:
+        print("You must provide a topic to clear.")
+        sys.exit(2)
+
+    mqttc = mqtt.Client(client_id)
+    mqttc._userdata = verbose
+    mqttc.on_message = on_message
+    mqttc.on_publish = on_publish
+    mqttc.on_connect = on_connect
+    if debug:
+        mqttc.on_log = on_log
+
+    if username:
+        mqttc.username_pw_set(username, password)
+    mqttc.connect(host, port, keepalive)
+    mqttc.subscribe(topic)
+    mqttc.loop_forever()
+
+if __name__ == "__main__":
+    main(sys.argv[1:])
+