Advertisement
Guest User

pythoncode

a guest
Jul 8th, 2014
638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.40 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import web, json, webiopi, time, sys, signal, os, io, picamera, threading, datetime, socket, ast, atexit, struct
  4. from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
  5. from webiopi.devices.sensor.onewiretemp import DS18B20
  6. from webiopi.devices.sensor.vcnl4000 import VCNL4000
  7.  
  8. vcn = VCNL4000()
  9.  
  10. temperatureSensor = DS18B20()
  11. GPIO = webiopi.GPIO
  12. camera=None
  13.  
  14. sys.path.append('/home/pi/piApp')
  15.  
  16. # Enable debug output
  17. #webiopi.setDebug()
  18.  
  19. urls = (
  20.     '/lights/(.*?)/(0|1)','Lights',
  21.     '/lights/(.*?)','Lights',
  22.     '/temperature','Temperature',
  23.     '/security/(0|1)','Security',
  24.     '/security','Security',
  25.     '/events/add','Events',
  26.     '/events','Events',
  27.     '/webcam', 'CamHandler'
  28.     )
  29.  
  30. app = web.application(urls, globals())
  31.  
  32. SETTINGS_FILE_STORE_PATH = '/home/pi/piApp/settings.json'
  33. EVENTS_FILE_STORE_PATH = '/home/pi/piApp/events.json'
  34. MIN_DISTANCE = 200
  35. DEFAULT_DISTANCE = -1
  36.  
  37. LIGHT_LED_PIN_NUMBER = 17
  38. ALARM_LED_PIN_NUMBER = 23
  39. VIDEO_LENGTH = 10 # in seconds
  40. VIDEO_WIDTH = 640
  41. VIDEO_HEIGHT = 480
  42.  
  43. class Lights:
  44.  
  45.     def GET(self, ledID):
  46.         web.header('Content-Type','application/json')
  47.         return json.dumps({"turnedOFF" : GPIO.digitalRead(int(ledID)) }, ensure_ascii=False).encode('utf8')
  48.  
  49.     def PUT(self, ledID, command):
  50.  
  51.         if ledID == LIGHT_LED_PIN_NUMBER or ALARM_LED_PIN_NUMBER:
  52.             GPIO.setFunction(int(ledID), int(command))
  53.             if command == "0":
  54.                 addEvent("S-a oprit instalatia de iluminat")
  55.             else:
  56.                 addEvent("S-a pornit instalatia de iluminat")
  57.  
  58. class Temperature:
  59.  
  60.     def GET(self):
  61.         web.header('Content-Type','application/json')
  62.         return json.dumps({"temperature": float(temperatureSensor.getCelsius())}, ensure_ascii=False).encode('utf8')
  63.  
  64. class Security:
  65.  
  66.     def GET(self):
  67.         web.header('Content-Type','application/json')
  68.         self.isAlarmON()
  69.  
  70. class Webcam:
  71.     def GET(self):
  72.             raise web.seeother('/static/webcam.html')
  73.  
  74. class Events:
  75.  
  76.     def GET(self):
  77.         web.header('Content-Type','application/json')
  78.         jsonFile = open(EVENTS_FILE_STORE_PATH, 'r')
  79.         jsonData = json.load(jsonFile)
  80.         jsonFile.close()
  81.         return json.dumps(jsonData, ensure_ascii=False).encode('utf8')
  82.  
  83. def retrieveEventsFromStore():
  84.     jsonFile = open(EVENTS_FILE_STORE_PATH, 'r')
  85.     jsonData = json.load(jsonFile)
  86.     jsonFile.close()
  87.     return jsonData
  88.  
  89. def writeEventsToStore(pythonJson):
  90.     with open(EVENTS_FILE_STORE_PATH, 'w') as jsonFile:
  91.         jsonFile.write(json.dumps(pythonJson))
  92.  
  93. def addEvent(eventTitle):
  94.     events = retrieveEventsFromStore()
  95.     eventID = 0
  96.  
  97.     if len(events) > 0:
  98.         for e in events:
  99.             if events[-1] == e:
  100.                 eventID = e['id']
  101.  
  102.     newEventID = int(eventID) + 1
  103.  
  104.     eventToBeAdded = json.dumps({"date": datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), "id": int(newEventID), "title": eventTitle})
  105.     currentEvents = events
  106.     currentEvents.append(ast.literal_eval(eventToBeAdded))
  107.     writeEventsToStore(currentEvents)
  108.  
  109. class Security:
  110.     def GET(self):
  111.         web.header('Content-Type','application/json')
  112.         jsonFile = open(SETTINGS_FILE_STORE_PATH, 'r')
  113.         jsonData = json.load(jsonFile)
  114.         jsonFile.close()
  115.         return json.dumps(jsonData, ensure_ascii=False).encode('utf8')
  116.  
  117.     def PUT(self, command):
  118.         if int(command) == 1:
  119.             jsonDataToWrite = json.dumps({"alarmON": True })
  120.             with open(SETTINGS_FILE_STORE_PATH, 'w') as jsonFile:
  121.                 jsonFile.write(jsonDataToWrite)
  122.                 jsonFile.close()
  123.  
  124.             addEvent("S-a pornit sistemul de alarma")
  125.  
  126.         elif int(command) == 0:
  127.             jsonDataToWrite = json.dumps({"alarmON": False })
  128.             with open(SETTINGS_FILE_STORE_PATH, 'w') as jsonFile:
  129.                 jsonFile.write(jsonDataToWrite)
  130.                 jsonFile.close()
  131.  
  132.             addEvent("S-a oprit sistemul de alarma")
  133.  
  134. def RecordVideo():
  135.     stream = io.BytesIO()
  136.     with picamera.PiCamera() as camera:
  137.         camera.resolution = (VIDEO_WIDTH, VIDEO_HEIGHT)
  138.         print 'Action!'
  139.         camera.start_recording(stream, format='h264', quantization=23)
  140.         camera.wait_recording(VIDEO_LENGTH)
  141.         camera.stop_recording()
  142.         print 'Cut!'
  143.  
  144. def StartVideo():
  145.     with picamera.PiCamera() as camera:
  146.         camera.resolution = (VIDEO_WIDTH,VIDEO_HEIGHT)
  147.         camera.start_preview()
  148.         camera.wait_recording(VIDEO_LENGTH)
  149.         camera.stop_recording()
  150.  
  151. def StopVideo():
  152.     print 'Stop me!'
  153.  
  154. class CamHandler(BaseHTTPRequestHandler):
  155.   def do_GET(self):
  156.     if self.path.endswith('.mjpg'):
  157.       self.send_response(200)
  158.       self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')
  159.       self.end_headers()
  160.       stream=io.BytesIO()
  161.       try:
  162.         start=time.time()
  163.         for foo in camera.capture_continuous(stream,'jpeg'):
  164.           self.wfile.write("--jpgboundary")
  165.           self.send_header('Content-type','image/jpeg')
  166.           self.send_header('Content-length',len(stream.getvalue()))
  167.           self.end_headers()
  168.           self.wfile.write(stream.getvalue())
  169.           stream.seek(0)
  170.           stream.truncate()
  171.           time.sleep(.5)
  172.       except KeyboardInterrupt:
  173.         pass
  174.       return
  175.     else:
  176.       print 'Simple stream!'
  177.       self.send_response(200)
  178.       self.send_header('Content-type','text/html')
  179.       self.end_headers()
  180.       self.wfile.write("""<html><head></head><body>
  181.        <img src="/cam.mjpg"/>
  182.      </body></html>""")
  183.       return
  184.  
  185. def isMotionDetected():
  186.     if vcn.getMillimeter() > 0:
  187.         return True
  188.     else:
  189.         return False
  190.  
  191. def isAlarmON():
  192.     jsonFile = open(SETTINGS_FILE_STORE_PATH, 'r')
  193.     jsonData = json.load(jsonFile)
  194.     jsonFile.close()
  195.     return bool(jsonData['alarmON'])
  196.  
  197. def shouldFireUpAlarm():
  198.     print 'shouldFireUpAlarm called'
  199.     threading.Timer(6.0, shouldFireUpAlarm).start()
  200.     if isAlarmON() and isMotionDetected():
  201.         addEvent("Sistemul de alarma s-a pornit")
  202.         GPIO.setFunction(ALARM_LED_PIN_NUMBER, GPIO.OUT)
  203.         os.system("aplay alarm_sound.wav")
  204.         GPIO.setFunction(ALARM_LED_PIN_NUMBER, GPIO.IN)
  205.         time.sleep(5.0)
  206.  
  207. #def signal_handler(signal, frame):
  208. #        print('You pressed Ctrl+C!')
  209. #       sys.exit(0)
  210. #signal.signal(signal.SIGINT, signal_handler)
  211. shouldFireUpAlarm()
  212. #RecordVideo()
  213. addEvent("Initializarea Raspbery Pi-ului")
  214. #print('Press Ctrl+C to exit')
  215. #signal.pause()
  216.  
  217. def main():
  218.   global camera
  219.   camera = picamera.PiCamera()
  220.   #camera.resolution = (1280, 960)
  221.   camera.resolution = (640, 480)
  222.   global img
  223.   try:
  224.     server = HTTPServer(('',8080),CamHandler)
  225.     print "server started"
  226.     server.serve_forever()
  227.   except KeyboardInterrupt:
  228.     camera.close()
  229.     server.socket.close()
  230.  
  231. if __name__ == "__main__":
  232.     main()
  233.     app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement