diff --git a/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/mqttHandler.py b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/mqttHandler.py index 74997041..9f236018 100644 --- a/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/mqttHandler.py +++ b/modules/samples/doormanager/feature/feature/src/main/resources/agent/src/mqttHandler.py @@ -20,13 +20,19 @@ **/ """ -import paho.mqtt.client as mqtt import time +#import RPi.GPIO as GPIO +import paho.mqtt.client as mqtt import iotUtils global mqttClient mqttClient = mqtt.Client() + +global TOPIC_TO_PUBLISH_STREAM1 +global TOPIC_TO_PUBLISH_STREAM2 + + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # The callback for when the client receives a CONNACK response from the server. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -34,52 +40,107 @@ def on_connect(mqttClient, userdata, flags, rc): print("MQTT_LISTENER: Connected with result code " + str(rc)) # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. - print ("MQTT_LISTENER: Subscribing with topic " + TOPIC_TO_SUBSCRIBE) - mqttClient.subscribe(TOPIC_TO_SUBSCRIBE) + print ("MQTT_LISTENER: Subscribing with topic " + SUBSCRIBE_FOR_LOCKER_COMMAND) + mqttClient.subscribe(SUBSCRIBE_FOR_LOCKER_COMMAND) + print ("MQTT_LISTENER: Subscribing with topic " + SUBSCRIBE_FOR_FAN_COMMAND) + mqttClient.subscribe(SUBSCRIBE_FOR_FAN_COMMAND) + print ("MQTT_LISTENER: Subscribing with topic " + SUBSCRIBE_FOR_BULB_COMMAND) + mqttClient.subscribe(SUBSCRIBE_FOR_BULB_COMMAND) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # The callback for when a PUBLISH message is received from the server. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def on_message(mqttClient, userdata, msg): - print( "MQTT_LISTENER: " + msg.topic + " " + str(msg.payload)) + print("MQTT_LISTENER: " + msg.topic + " " + str(msg.payload)) + if msg.topic == SUBSCRIBE_FOR_LOCKER_COMMAND: + request = str(msg.payload) + resource = "" + state = request.upper() + if state == "LOCK": + # GPIO.output(iotUtils.DOOR_LOCKER_2_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.DOOR_LOCKER_1_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.LOCK_STATE_OFF_NOTIFY_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.LOCK_STATE_ON_NOTIFY_PORT, GPIO.LOW) + #mqttClient.publish(TOPIC_TO_PUBLISH, "Locker:LOCKED") + print "Door is locked" + elif state == "UNLOCK": + # GPIO.output(iotUtils.DOOR_LOCKER_2_PORT, GPIO.LOW) + # GPIO.output(iotUtils.DOOR_LOCKER_1_PORT, GPIO.LOW) + # GPIO.output(iotUtils.LOCK_STATE_OFF_NOTIFY_PORT, GPIO.LOW) + # GPIO.output(iotUtils.LOCK_STATE_ON_NOTIFY_PORT, GPIO.HIGH) + #mqttClient.publish(TOPIC_TO_PUBLISH, "Locker:UNLOCKED") + print "Door is unlocked" + else: + print "MQTT message in the wrong format" + print "MQTT_LISTENER: Resource- " + resource + elif msg.topic == SUBSCRIBE_FOR_FAN_COMMAND: + request = str(msg.payload) + resource = "" + state = request.upper() + if state == "ON": + # GPIO.output(iotUtils.DOOR_LOCKER_2_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.DOOR_LOCKER_1_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.LOCK_STATE_OFF_NOTIFY_PORT, GPIO.HIGH) + # GPIO.output(iotUtils.LOCK_STATE_ON_NOTIFY_PORT, GPIO.LOW) + #mqttClient.publish(TOPIC_TO_PUBLISH, "Locker:LOCKED") + print "Fan is locked" + elif state == "OFF": + # GPIO.output(iotUtils.DOOR_LOCKER_2_PORT, GPIO.LOW) + # GPIO.output(iotUtils.DOOR_LOCKER_1_PORT, GPIO.LOW) + # GPIO.output(iotUtils.LOCK_STATE_OFF_NOTIFY_PORT, GPIO.LOW) + # GPIO.output(iotUtils.LOCK_STATE_ON_NOTIFY_PORT, GPIO.HIGH) + #mqttClient.publish(TOPIC_TO_PUBLISH, "Locker:UNLOCKED") + print "Fan is off" + else: + print "MQTT message in the wrong format" + print "MQTT_LISTENER: Resource- " + resource + elif msg.topic == SUBSCRIBE_FOR_BULB_COMMAND: + request = str(msg.payload) + print "bulb is to blow" + resource = "" + print request # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # The callback for when a PUBLISH message to the server when door is open or close # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -def on_publish(mqttClient, stream1PlayLoad, stream2PlayLoad): - mqttClient.publish(TOPIC_TO_PUBLISH_STREAM1, stream1PlayLoad) - mqttClient.publish(TOPIC_TO_PUBLISH_STREAM2, stream2PlayLoad) +def on_publish(mqttClient, topic, msg): + mqttClient.publish(topic, msg) -def sendSensorValue(stream1PlayLoad, stream2PlayLoad): + +def sendLockerStatus(msg): global mqttClient - on_publish(mqttClient,stream1PlayLoad, stream2PlayLoad) + on_publish(mqttClient, msg) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # The Main method of the server script -# This method is invoked from Agent.py on a new thread +# This method is invoked from DoorLockerAgent.py on a new thread # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def main(): - MQTT_ENDPOINT = iotUtils.MQTT_EP.split(":") - MQTT_IP = MQTT_ENDPOINT[1].replace('//','') + MQTT_IP = MQTT_ENDPOINT[1].replace('//', '') MQTT_PORT = int(MQTT_ENDPOINT[2]) DEV_OWNER = iotUtils.DEVICE_OWNER DEV_ID = iotUtils.DEVICE_ID DEV_TYPE =iotUtils.DEVICE_TYPE TANENT_DOMAIN = iotUtils.SERVER_NAME - global TOPIC_TO_SUBSCRIBE - TOPIC_TO_SUBSCRIBE = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/command" + + global SUBSCRIBE_FOR_LOCKER_COMMAND + SUBSCRIBE_FOR_LOCKER_COMMAND = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/command" + global SUBSCRIBE_FOR_FAN_COMMAND + SUBSCRIBE_FOR_FAN_COMMAND = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/fan/command" + global SUBSCRIBE_FOR_BULB_COMMAND + SUBSCRIBE_FOR_BULB_COMMAND = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/bulb/command" global TOPIC_TO_PUBLISH_STREAM1 TOPIC_TO_PUBLISH_STREAM1 = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/smartLock" global TOPIC_TO_PUBLISH_STREAM2 TOPIC_TO_PUBLISH_STREAM2 = TANENT_DOMAIN + "/" + DEV_TYPE + "/" + DEV_ID + "/smartFan" print ("MQTT_LISTENER: MQTT_ENDPOINT is " + str(MQTT_ENDPOINT)) - print ("MQTT_LISTENER: MQTT_TOPIC is " + TOPIC_TO_SUBSCRIBE) + print ("MQTT_LISTENER: MQTT_TOPIC is " + SUBSCRIBE_FOR_LOCKER_COMMAND) global mqttClient mqttClient.username_pw_set(iotUtils.AUTH_TOKEN, password = "") mqttClient.on_connect = on_connect @@ -89,6 +150,10 @@ def main(): try: mqttClient.connect(MQTT_IP, MQTT_PORT, 60) print "MQTT_LISTENER: " + time.asctime(), "Connected to MQTT Broker - %s:%s" % (MQTT_IP, MQTT_PORT) + # Blocking call that processes network traffic, dispatches callbacks and + # handles reconnecting. + # Other loop*() functions are available that give a threaded interface and a + # manual interface. mqttClient.loop_forever() except (KeyboardInterrupt, Exception) as e: @@ -102,4 +167,3 @@ def main(): if __name__ == '__main__': main() - diff --git a/pom.xml b/pom.xml index c6fe2951..0c2bd215 100644 --- a/pom.xml +++ b/pom.xml @@ -1076,8 +1076,8 @@ 4.5.8 - 1.1.1-SNAPSHOT - [1.1.1, 2.0.0) + 1.1.2-SNAPSHOT + [1.1.2, 2.0.0) 1.0.0-SNAPSHOT