main()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 1
1
import paho.mqtt.client as mqtt
2
import argparse
3
import subprocess
4
import base64
5
import sys
6
7
def parse_args(argv):
8
    parser = argparse.ArgumentParser(description='Subscribe to an MQTT broker with a command line program')
9
    parser.add_argument('command', type=str)
10
    parser.add_argument('-H', '--host', type=str, default='localhost')
11
    parser.add_argument('-P', '--port', type=int, default=1883)
12
    parser.add_argument('-u', '--username', type=str, default=None)
13
    parser.add_argument('-p', '--password', type=str, default=None)
14
    parser.add_argument('-s', '--subscription', type=str, default='#')
15
    parser.add_argument('-i', '--client-id', type=str, default='')
16
    parser.add_argument('--no-clean-session', dest='clean_session', action='store_false')
17
    parser.set_defaults(clean_session=True)
18
19
    return parser.parse_args(argv)
20
21
def on_connect(client, userdata, flags, rc):
22
    client.subscribe(userdata.subscription)
23
24
def on_message(client, userdata, msg):
25
    p = subprocess.Popen([userdata.command, '-t', msg.topic, '-p', base64.b64encode(msg.payload)])
26
    p.wait()
27
28
def main():
29
    args = parse_args(sys.argv[1:])
30
31
    client = mqtt.Client(client_id=args.client_id, clean_session=args.clean_session, userdata=args)
32
33
    client.on_connect = on_connect
34
    client.on_message = on_message
35
36
    client.connect(args.host, args.port, 60)
37
38
    client.loop_forever()
39