From 6a11b9e059e011c8a6fde216ebe379dd05f642dd Mon Sep 17 00:00:00 2001 From: Roger Light Date: Sat, 22 Jun 2013 23:18:38 +0100 Subject: [PATCH] Example program to clear retained topic trees. --- examples/mqtt_clear_retain.py | 116 ++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 examples/mqtt_clear_retain.py diff --git a/examples/mqtt_clear_retain.py b/examples/mqtt_clear_retain.py new file mode 100755 index 0000000..dc88a4b --- /dev/null +++ b/examples/mqtt_clear_retain.py @@ -0,0 +1,116 @@ +#!/usr/bin/python + +# Copyright (c) 2013 Roger Light +# +# 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 +# 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:]) + -- 2.39.5