-
Notifications
You must be signed in to change notification settings - Fork 0
/
agent.py
122 lines (102 loc) · 3.95 KB
/
agent.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
import paho.mqtt.client as mqtt
from init import *
from icecream import ic
from datetime import datetime
def time_format():
return f'{datetime.now()} Agent|> '
ic.configureOutput(prefix=time_format)
ic.configureOutput(includeContext=False) # use True for including script file context file
class Mqtt_client():
def __init__(self):
# broker IP adress:
self.broker=''
self.topic=''
self.port=''
self.clientname=''
self.username=''
self.password=''
self.subscribeTopic=''
self.publishTopic=''
self.publishMessage=''
self.on_connected_to_form = ''
self.connected = False
self.subscribed = False
# Setters and getters
def set_on_connected_to_form(self,on_connected_to_form):
self.on_connected_to_form = on_connected_to_form
def get_broker(self):
return self.broker
def set_broker(self,value):
self.broker= value
def get_port(self):
return self.port
def set_port(self,value):
self.port= value
def get_clientName(self):
return self.clientName
def set_clientName(self,value):
self.clientName= value
def get_username(self):
return self.username
def set_username(self,value):
self.username= value
def get_password(self):
return self.password
def set_password(self,value):
self.password= value
def get_subscribeTopic(self):
return self.subscribeTopic
def set_subscribeTopic(self,value):
self.subscribeTopic= value
def get_publishTopic(self):
return self.publishTopic
def set_publishTopic(self,value):
self.publishTopic= value
def get_publishMessage(self):
return self.publishMessage
def set_publishMessage(self,value):
self.publishMessage= value
def on_log(self, client, userdata, level, buf):
ic("log: "+buf)
def on_connect(self, client, userdata, flags, rc):
if rc==0:
ic("connected OK")
self.connected = True
self.on_connected_to_form();
else:
ic("Bad connection Returned code=",rc)
def on_disconnect(self, client, userdata, flags, rc=0):
self.connected = False
ic("DisConnected result code "+str(rc))
def on_message(self, client, userdata, msg):
topic=msg.topic
m_decode=str(msg.payload.decode("utf-8","ignore"))
ic("message from:"+topic, m_decode)
#mainwin.subscribeDock.update_mess_win(m_decode)
def connect_to(self):
# Init paho mqtt client class
self.client = mqtt.Client(self.clientname, clean_session=True) # create new client instance
self.client.on_connect=self.on_connect #bind call back function
self.client.on_disconnect=self.on_disconnect
self.client.on_log=self.on_log
self.client.on_message=self.on_message
self.client.username_pw_set(self.username,self.password)
ic("Connecting to broker ",self.broker)
self.client.connect(self.broker,self.port) #connect to broker
def disconnect_from(self):
self.client.disconnect()
def start_listening(self):
self.client.loop_start()
def stop_listening(self):
self.client.loop_stop()
def subscribe_to(self, topic):
if self.connected:
self.client.subscribe(topic)
self.subscribed = True
else:
ic("Can't subscribe. Connecection should be established first")
def publish_to(self, topic, message):
if self.connected:
self.client.publish(topic,message)
else:
ic("Can't publish. Connecection should be established first")