-
Notifications
You must be signed in to change notification settings - Fork 726
/
Copy pathclient_mqtt_clear_retain.py
executable file
·133 lines (109 loc) · 3.18 KB
/
client_mqtt_clear_retain.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Copyright (c) 2013 Roger Light <[email protected]>
#
# 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 <[email protected]>
# All rights reserved.
# This shows an example of an MQTT client that clears all of the retained messages it receives.
import getopt
import sys
import context # Ensures paho is in PYTHONPATH
import paho.mqtt.client as mqtt
final_mid = 0
def on_connect(mqttc, userdata, flags, rc):
if userdata:
print("rc: " + str(rc))
def on_message(mqttc, userdata, msg):
global final_mid
if msg.retain == 0:
pass
# sys.exit()
else:
if userdata:
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 = "mqtt.eclipseprojects.io"
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:
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 not topic:
print("You must provide a topic to clear.\n")
print_usage()
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:])