diff --git a/CHANGELOG.md b/CHANGELOG.md index d364a73..0155f8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 0.5.8 - xx/07/2018 +# 0.5.8 - 19/07/2018 - Added "openweathermap" driver for impement check weather condition from openweatermap api # 0.5.7 - 01/06/2018 diff --git a/mqttconnector/.gitignore b/mqttconnector/.gitignore new file mode 100644 index 0000000..c167fb8 --- /dev/null +++ b/mqttconnector/.gitignore @@ -0,0 +1 @@ +piGardenMqttconnector.ini diff --git a/mqttconnector/exec_command.sh b/mqttconnector/exec_command.sh new file mode 100755 index 0000000..c969855 --- /dev/null +++ b/mqttconnector/exec_command.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e "$1" | ../piGarden.sh socket_server_command diff --git a/mqttconnector/mqttconnector.py b/mqttconnector/mqttconnector.py new file mode 100644 index 0000000..89ddc99 --- /dev/null +++ b/mqttconnector/mqttconnector.py @@ -0,0 +1,88 @@ +# +# 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() + + + diff --git a/mqttconnector/piGardenMqttconnector.ini.example b/mqttconnector/piGardenMqttconnector.ini.example new file mode 100644 index 0000000..ce87974 --- /dev/null +++ b/mqttconnector/piGardenMqttconnector.ini.example @@ -0,0 +1,12 @@ +[mqtt] +broker_address=m20.cloudmqtt.com +port=13554 +user=ucorgnpg +password=K5iJrLxNnhbM +client_id=Python + +[pigarden] +path=/home/pi/piGarden/ +user=a +pwd=b +