# CODE FOR TEMP SENSOR AND DATA SEND TO CLOUD SERVER AND RECIEVE LOGICS FROM CLOUD. import os # library for sensor data search. import glob import time #library for delay and sleep import cayenne.client # cloud servor and MQTT protocol library with python import RPi.GPIO as GPIO # library for using our Rpi GPIO. GPIO.setwarnings(False) #GPIO SETUP GPIO.setmode(GPIO.BCM) GPIO.setup(19,GPIO.OUT) #fans GPIO.setup(26,GPIO.OUT) #siren and alarm GPIO.setup(13,GPIO.OUT) #lights GPIO.setup(6,GPIO.OUT) #main door motor fwd #GPIO.setup(5,GPIO.OUT) #main door motor rev GPIO.setwarnings(False) GPIO.setup(21, GPIO.IN) GPIO.setup(20, GPIO.IN) GPIO.setup(16, GPIO.IN) GPIO.setup(12, GPIO.IN) # these two lines are for reading and connecting sensor to 1-wire interface of rpi. os.system('modprobe w1-gpio') os.system('modprobe w1-therm') # these lines get to path where sensor data is store in rpi w1-slave file. base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' # this function read temp from slave file and save in line variable def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines # this function check line with yes and then separate lines and search for value with unit T. def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 # divide by 1000 to get accurate value temp_f = temp_c * 9.0 / 5.0 + 32.0 print(temp_f) print(temp_c) return temp_c def mottion(): m=GPIO.input(21) if m==0: y=0 print("THEIR IS NO MOTION AT YOUR LOCATION") time.sleep(0.5) return y else: time.sleep(0.5) y=1 print("MOTION DETECTED AT LOCATION") return y def maingate(): gate=GPIO.input(20) if gate==0: g=0 print("NO MOTION AT GATE") time.sleep(0.5) return g else: time.sleep(0.5) g=1 print("MOTION DETECTED AT GATE") return g def soilwater(): water=GPIO.input(16) if water==0: #0 mean water is present send invert to cloud water=1 print(" WATER IN PLANTS IS GOOD") time.sleep(0.5) return water else: time.sleep(0.5) water=0 #1 at pin mean water is not present send invert to cloud print("NO WATER TURN PUMP ON") return water def fire_gas(): fire=GPIO.input(12) if fire==0: fg=0 print("No fire is there") time.sleep(0.5) return fg else: time.sleep(0.5) fg=1 print("FIRE DETECTED ") return fg def fan_on(): fanon=GPIO.input(19) if fanon==1: print("FAN IS ALREADY ON ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(19,GPIO.HIGH) print("FAN IS TURN ON NOW ") return 0 def fan_off(): fanoff=GPIO.input(19) if fanoff==0: print("FAN IS ALREADY OFF ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(19,GPIO.LOW) print("FAN IS TURN OFF NOW ") time.sleep(8) return 0 def siren_on(): sirenon=GPIO.input(26) if sirenon==1: print("ALARM IS ALREADY ON ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(26,GPIO.HIGH) print("ALARM IS TURN ON NOW ") return 0 def siren_off(): sirenoff=GPIO.input(26) if sirenoff==0: print("ALARM IS ALREADY OFF ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(26,GPIO.LOW) print("ALARM IS TURN OFF NOW ") time.sleep(8) return 0 def led_on(): ledon=GPIO.input(13) if ledon==1: print("light IS ALREADY ON ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(13,GPIO.HIGH) print("light IS TURN ON NOW ") return 0 def led_off(): ledoff=GPIO.input(13) if ledoff==0: print("light IS ALREADY OFF ") time.sleep(0.5) else: time.sleep(0.5) GPIO.output(13,GPIO.LOW) print("light IS TURN OFF NOW ") time.sleep(0.5) return 0 def monitor(): temp_c=read_temp() if temp_c > 35: siren_on() elif temp_c > 30: fan_on() siren_off() else: siren_off() fan_off() y=mottion() if y==1: led_on() else: led_off() return 0 #IOT cloud servor info # Cayenne authentication info. This should be obtained from the Cayenne Dashboard. MQTT_USERNAME = "bbcc2900-8a0c-11e8-8ef1-e535082a1602" MQTT_PASSWORD = "634fc0ed78da747c2f70992ac2f81a55679203a2" MQTT_CLIENT_ID = "8dffe890-9d85-11e8-83a8-5719c4d6e74d" #The callback for when a message is received from Cayenne. def on_message(message): print("hello") print("message received: " + str(message)) # If there is an error processing the message return an error string, otherwise return nothing. # Run mqtt protol and make rpi as client client = cayenne.client.CayenneMQTTClient() client.on_message = on_message client.begin(MQTT_USERNAME, MQTT_PASSWORD, MQTT_CLIENT_ID) # start as client while True: monitor() client.loop() value1=read_temp() client.celsiusWrite(1,value1) #Use mqtt channel 1 for data sending value2=45 client.luxWrite(2,value2) value3=mottion() client.luxWrite(3,value3) value4=maingate() client.luxWrite(4,value4) value5=soilwater() client.luxWrite(5,value5) value6=fire_gas() client.luxWrite(6,value6) value7=GPIO.input(26) client.luxWrite(7,value7) value8=GPIO.input(19) client.luxWrite(8,value8) value9=GPIO.input(13) client.luxWrite(9,value9) value10=GPIO.input(6) client.luxWrite(10,value10) time.sleep(2)