test.on_mqtt_disconnect()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nop 3
1
import simplejson as json
2
import config
3
import time
4
from datetime import datetime
5
import paho.mqtt.client as mqtt
6
import random
7
import decimal
8
9
10
# global flag indicates the connectivity with the MQTT broker
11
mqtt_connected_flag = False
12
13
14
# the on_connect callback function for MQTT client
15
# refer to http://www.steves-internet-guide.com/client-connections-python-mqtt/
16
def on_mqtt_connect(client, userdata, flags, rc):
17
    global mqtt_connected_flag
18
    if rc == 0:
19
        mqtt_connected_flag = True  # set flag
20
        print("MQTT connected OK")
21
    else:
22
        print("Bad MQTT connection Returned code=", rc)
23
        mqtt_connected_flag = False
24
25
26
# the on_disconnect callback function for MQTT client
27
# refer to http://www.steves-internet-guide.com/client-connections-python-mqtt/
28
def on_mqtt_disconnect(client, userdata, rc=0):
29
    global mqtt_connected_flag
30
31
    print("DisConnected, result code "+str(rc))
32
    mqtt_connected_flag = False
33
34
35
########################################################################################################################
36
# Test Procedures
37
# Step 1: Connect the MQTT broker
38
# Step 2: Publish test topic messages
39
# Step 3: Run 'mosquitto_sub -h 192.168.0.1 -v -t myems/point/# -u admin -P Password1' to receive test messages
40
########################################################################################################################
41
42
def main():
43
    global mqtt_connected_flag
44
    mqc = None
45
    try:
46
        mqc = mqtt.Client(client_id='MYEMS' + "-" + str(time.time()))
47
        mqc.username_pw_set(config.myems_mqtt_broker['username'], config.myems_mqtt_broker['password'])
48
        mqc.on_connect = on_mqtt_connect
49
        mqc.on_disconnect = on_mqtt_disconnect
50
        mqc.connect_async(config.myems_mqtt_broker['host'], config.myems_mqtt_broker['port'], 60)
51
        # The loop_start() starts a new thread, that calls the loop method at regular intervals for you.
52
        # It also handles re-connects automatically.
53
        mqc.loop_start()
54
55
    except Exception as e:
56
        print("MQTT Client Connection error " + str(e))
57
    while True:
58
        if mqtt_connected_flag:
59
            try:
60
                # publish real time value to mqtt broker
61
                payload = json.dumps({"data_source_id": 1,
62
                                      "point_id": 3,
63
                                      "utc_date_time": datetime.utcnow().isoformat(timespec='seconds'),
64
                                      "value": decimal.Decimal(random.randrange(0, 10000))})
65
                print('payload=' + str(payload))
66
                info = mqc.publish('myems/point/' + str(3),
67
                                   payload=payload,
68
                                   qos=0,
69
                                   retain=True)
70
            except Exception as e:
71
                print("MQTT Publish Error : " + str(e))
72
                # ignore this exception, does not stop the procedure
73
                pass
74
            time.sleep(1)
75
        else:
76
            print('MQTT Client Connection error')
77
            time.sleep(1)
78
79
80
if __name__ == "__main__":
81
    main()
82