Friday, 30 August 2013

Making a raspberry temperature sensor (step 8- lights and e-mail)

On sen.se make 2 more feeds. Set these up so that they e-mail you whenever data is recieved, this is quite easy on sen.se. Put led's into the gpio's 23, 24 and 25 preferably red, yellow and green (we are making a traffic light system). Then edit your code from the previous step and put in the new feed id's into feed_id 2 and 3.

import httplib
import json as simplejson
from random import randint
import time
import os
import glob
import wiringpi2 as wiringpi

wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(23, 1) #red
wiringpi.pinMode(24, 1) #yellow
wiringpi.pinMode(25, 1) #green
wiringpi.digitalWrite(23, 0)
wiringpi.digitalWrite(24, 0)
wiringpi.digitalWrite(25, 0)

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

run_number = 0

SENSE_API_KEY =
FEED_ID1 = #actual graph
FEED_ID2 = #min
FEED_ID3 = #max

def read_temp_raw():
     f = open(device_file, 'r')
     lines = f.readlines()
     f.close()
     return lines

def read_temp(): 
      lines = read_temp_raw()
      while lines[0].strip()[-3:]!= 'YES':
           time.sleep(1)
           lines = read_temp_raw()
       equals_pos = lines[1].find('t=')
        if equals_pos != -1:
              temp_string = lines[1][equals_pos+2:]
              tempC = float(temp_string)/1000.0
              return tempC

def send_to_opensense(data):
     try:
         datalist = [{"feed_id" :FEED_ID1, "value" :data['C']},]
         headers = {"sense_key": SENSE_API_KEY,"content-type":"appliaction/json"}
         conn = httplib.HTTPConnection("api.sen.se")
         conn.request("POST", "/events/", simplejson.dumps(datalist),headers)
         response = conn.getresponse()
         conn.close()
     except:
         pass

ef send_to_opensense2(data): #do not edit please
     try:
           datalist = [{"feed_id" :FEED_ID2, "value" :data['C']},]
           headers = {"sense_key": SENSE_API_KEY,"content-type":"appliaction/json"}
           conn = httplib.HTTPConnection("api.sen.se")
           conn.request("POST", "/events/", simplejson.dumps(datalist),headers)
           response = conn.getresponse()
           conn.close()
     except:
           pass

def send_to_opensense3(data):
      try:
            datalist = [{"feed_id" :FEED_ID3, "value" :data['C']},]
             headers = {"sense_key": SENSE_API_KEY,"content-type":"appliaction/json"}
             conn = httplib.HTTPConnection("api.sen.se")
             conn.request("POST", "/events/", simplejson.dumps(datalist),headers)
             response = conn.getresponse()
             conn.close()
      except:
             pass

while(True):
       try:
            run_number = run_number + 1
            tempC = read_temp()
            print "RasPI(2) Ambient Run:",run_number," tempC:",tempC
            data = {'C' : tempC}
            send_to_opensense(data)
        if 26.5 <= tempC and 29.5 >= tempC: # good range of 26.5-29.5 change for if range wants to change
               wiringpi.digitalWrite(25, 1)
               wiringpi.digitalWrite(24, 0)
               wiringpi.digitalWrite(23, 0)
        if 26 <= tempC and 26.5 > tempC: # okay range of 26 - 26.5 change if range wants to change
               wiringpi.digitalWrite(25, 0)
               wiringpi.digitalWrite(24, 1)
               wiringpi.digitalWrite(23, 0)
        if 26 > tempC: # bad range less than 26 change if range needs to change
               wiringpi.digitalWrite(25, 0)
               wiringpi.digitalWrite(24, 0)
               wiringpi.digitalWrite(23, 1)
               send_to_opensense2(data)
         if 29.5 < tempC and 30 >= tempC: # okay range of 29.5 - 30 change if range wants to change
               wiringpi.digitalWrite(25, 0)
               wiringpi.digitalWrite(24, 1)
               wiringpi.digitalWrite(23, 0)
         if 30 < tempC: # bad range more than 30 change if range needs to change
               wiringpi.digitalWrite(25, 0)
               wiringpi.digitalWrite(24, 0)
               wiringpi.digitalWrite(23, 1)
               send_to_opensense3(data) #
               time.sleep(10) #frequency of reading in seconds, change if required
# if ranges are changed, please make sure that ranges are continuous and do not edit the inequality signs
        except:
               pass

No comments:

Post a Comment