89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
#
|
|
# Installare libreria paho-mqtt, configparser:
|
|
# sudo pip install paho-mqtt configparser
|
|
#
|
|
|
|
import paho.mqtt.client as mqttClient
|
|
import time
|
|
import subprocess
|
|
import configparser
|
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
|
|
if rc == 0:
|
|
|
|
print("Connected to broker")
|
|
|
|
global Connected # Use global variable
|
|
Connected = True # Signal connection
|
|
|
|
else:
|
|
|
|
print("Connection failed")
|
|
|
|
def on_message(client, userdata, message):
|
|
print "Topic : " + message.topic
|
|
print "Message received: " + message.payload
|
|
if message.topic.startswith("pigarden/command/"):
|
|
print "pigarden command: " + message.payload
|
|
cmd = ""
|
|
cmd = message.payload
|
|
if pigarden_user != "" and pigarden_pwd != "":
|
|
cmd = pigarden_user + '\n' + pigarden_pwd + '\n' + cmd
|
|
|
|
p = subprocess.Popen([ pigarden_path + "mqttconnector/exec_command.sh", cmd ], stdout=subprocess.PIPE)
|
|
(output, err) = p.communicate()
|
|
|
|
## Wait for date to terminate. Get return returncode ##
|
|
p_status = p.wait()
|
|
print "Command : '" + cmd + "'"
|
|
print "Command output : ", output
|
|
print "Command exit status/return code : ", p_status
|
|
|
|
|
|
|
|
|
|
config = configparser.ConfigParser()
|
|
config.read('/etc/piGardenMqttconnector.ini')
|
|
|
|
|
|
Connected = False # global variable for the state of the connection
|
|
|
|
broker_address = config['mqtt']['broker_address']
|
|
port = int(config['mqtt']['port'])
|
|
user = config['mqtt']['user']
|
|
password = config['mqtt']['password']
|
|
client_id = config['mqtt']['client_id']
|
|
|
|
pigarden_path = config['pigarden']['path']
|
|
pigarden_user = config['pigarden']['user']
|
|
pigarden_pwd = config['pigarden']['pwd']
|
|
|
|
client = mqttClient.Client(client_id) # create new instance
|
|
client.username_pw_set(user, password=password) # set username and password
|
|
client.on_connect = on_connect # attach function to callback
|
|
client.on_message = on_message # attach function to callback
|
|
|
|
print broker_address, port, user, password
|
|
|
|
client.connect(broker_address, port=port) # connect to broker
|
|
|
|
client.loop_start() #start the loop
|
|
|
|
while Connected != True: #Wait for connection
|
|
time.sleep(0.1)
|
|
|
|
client.subscribe("pigarden/command/+")
|
|
|
|
try:
|
|
while True:
|
|
time.sleep(1)
|
|
|
|
except KeyboardInterrupt:
|
|
print "exiting"
|
|
client.disconnect()
|
|
client.loop_stop()
|
|
|
|
|
|
|