Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import web, json, webiopi, time, sys, signal, os, io, picamera, threading, datetime, socket, ast, atexit, struct
- from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
- from webiopi.devices.sensor.onewiretemp import DS18B20
- from webiopi.devices.sensor.vcnl4000 import VCNL4000
- vcn = VCNL4000()
- temperatureSensor = DS18B20()
- GPIO = webiopi.GPIO
- camera=None
- sys.path.append('/home/pi/piApp')
- # Enable debug output
- #webiopi.setDebug()
- urls = (
- '/lights/(.*?)/(0|1)','Lights',
- '/lights/(.*?)','Lights',
- '/temperature','Temperature',
- '/security/(0|1)','Security',
- '/security','Security',
- '/events/add','Events',
- '/events','Events',
- '/webcam', 'CamHandler'
- )
- app = web.application(urls, globals())
- SETTINGS_FILE_STORE_PATH = '/home/pi/piApp/settings.json'
- EVENTS_FILE_STORE_PATH = '/home/pi/piApp/events.json'
- MIN_DISTANCE = 200
- DEFAULT_DISTANCE = -1
- LIGHT_LED_PIN_NUMBER = 17
- ALARM_LED_PIN_NUMBER = 23
- VIDEO_LENGTH = 10 # in seconds
- VIDEO_WIDTH = 640
- VIDEO_HEIGHT = 480
- class Lights:
- def GET(self, ledID):
- web.header('Content-Type','application/json')
- return json.dumps({"turnedOFF" : GPIO.digitalRead(int(ledID)) }, ensure_ascii=False).encode('utf8')
- def PUT(self, ledID, command):
- if ledID == LIGHT_LED_PIN_NUMBER or ALARM_LED_PIN_NUMBER:
- GPIO.setFunction(int(ledID), int(command))
- if command == "0":
- addEvent("S-a oprit instalatia de iluminat")
- else:
- addEvent("S-a pornit instalatia de iluminat")
- class Temperature:
- def GET(self):
- web.header('Content-Type','application/json')
- return json.dumps({"temperature": float(temperatureSensor.getCelsius())}, ensure_ascii=False).encode('utf8')
- class Security:
- def GET(self):
- web.header('Content-Type','application/json')
- self.isAlarmON()
- class Webcam:
- def GET(self):
- raise web.seeother('/static/webcam.html')
- class Events:
- def GET(self):
- web.header('Content-Type','application/json')
- jsonFile = open(EVENTS_FILE_STORE_PATH, 'r')
- jsonData = json.load(jsonFile)
- jsonFile.close()
- return json.dumps(jsonData, ensure_ascii=False).encode('utf8')
- def retrieveEventsFromStore():
- jsonFile = open(EVENTS_FILE_STORE_PATH, 'r')
- jsonData = json.load(jsonFile)
- jsonFile.close()
- return jsonData
- def writeEventsToStore(pythonJson):
- with open(EVENTS_FILE_STORE_PATH, 'w') as jsonFile:
- jsonFile.write(json.dumps(pythonJson))
- def addEvent(eventTitle):
- events = retrieveEventsFromStore()
- eventID = 0
- if len(events) > 0:
- for e in events:
- if events[-1] == e:
- eventID = e['id']
- newEventID = int(eventID) + 1
- eventToBeAdded = json.dumps({"date": datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), "id": int(newEventID), "title": eventTitle})
- currentEvents = events
- currentEvents.append(ast.literal_eval(eventToBeAdded))
- writeEventsToStore(currentEvents)
- class Security:
- def GET(self):
- web.header('Content-Type','application/json')
- jsonFile = open(SETTINGS_FILE_STORE_PATH, 'r')
- jsonData = json.load(jsonFile)
- jsonFile.close()
- return json.dumps(jsonData, ensure_ascii=False).encode('utf8')
- def PUT(self, command):
- if int(command) == 1:
- jsonDataToWrite = json.dumps({"alarmON": True })
- with open(SETTINGS_FILE_STORE_PATH, 'w') as jsonFile:
- jsonFile.write(jsonDataToWrite)
- jsonFile.close()
- addEvent("S-a pornit sistemul de alarma")
- elif int(command) == 0:
- jsonDataToWrite = json.dumps({"alarmON": False })
- with open(SETTINGS_FILE_STORE_PATH, 'w') as jsonFile:
- jsonFile.write(jsonDataToWrite)
- jsonFile.close()
- addEvent("S-a oprit sistemul de alarma")
- def RecordVideo():
- stream = io.BytesIO()
- with picamera.PiCamera() as camera:
- camera.resolution = (VIDEO_WIDTH, VIDEO_HEIGHT)
- print 'Action!'
- camera.start_recording(stream, format='h264', quantization=23)
- camera.wait_recording(VIDEO_LENGTH)
- camera.stop_recording()
- print 'Cut!'
- def StartVideo():
- with picamera.PiCamera() as camera:
- camera.resolution = (VIDEO_WIDTH,VIDEO_HEIGHT)
- camera.start_preview()
- camera.wait_recording(VIDEO_LENGTH)
- camera.stop_recording()
- def StopVideo():
- print 'Stop me!'
- class CamHandler(BaseHTTPRequestHandler):
- def do_GET(self):
- if self.path.endswith('.mjpg'):
- self.send_response(200)
- self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')
- self.end_headers()
- stream=io.BytesIO()
- try:
- start=time.time()
- for foo in camera.capture_continuous(stream,'jpeg'):
- self.wfile.write("--jpgboundary")
- self.send_header('Content-type','image/jpeg')
- self.send_header('Content-length',len(stream.getvalue()))
- self.end_headers()
- self.wfile.write(stream.getvalue())
- stream.seek(0)
- stream.truncate()
- time.sleep(.5)
- except KeyboardInterrupt:
- pass
- return
- else:
- print 'Simple stream!'
- self.send_response(200)
- self.send_header('Content-type','text/html')
- self.end_headers()
- self.wfile.write("""<html><head></head><body>
- <img src="/cam.mjpg"/>
- </body></html>""")
- return
- def isMotionDetected():
- if vcn.getMillimeter() > 0:
- return True
- else:
- return False
- def isAlarmON():
- jsonFile = open(SETTINGS_FILE_STORE_PATH, 'r')
- jsonData = json.load(jsonFile)
- jsonFile.close()
- return bool(jsonData['alarmON'])
- def shouldFireUpAlarm():
- print 'shouldFireUpAlarm called'
- threading.Timer(6.0, shouldFireUpAlarm).start()
- if isAlarmON() and isMotionDetected():
- addEvent("Sistemul de alarma s-a pornit")
- GPIO.setFunction(ALARM_LED_PIN_NUMBER, GPIO.OUT)
- os.system("aplay alarm_sound.wav")
- GPIO.setFunction(ALARM_LED_PIN_NUMBER, GPIO.IN)
- time.sleep(5.0)
- #def signal_handler(signal, frame):
- # print('You pressed Ctrl+C!')
- # sys.exit(0)
- #signal.signal(signal.SIGINT, signal_handler)
- shouldFireUpAlarm()
- #RecordVideo()
- addEvent("Initializarea Raspbery Pi-ului")
- #print('Press Ctrl+C to exit')
- #signal.pause()
- def main():
- global camera
- camera = picamera.PiCamera()
- #camera.resolution = (1280, 960)
- camera.resolution = (640, 480)
- global img
- try:
- server = HTTPServer(('',8080),CamHandler)
- print "server started"
- server.serve_forever()
- except KeyboardInterrupt:
- camera.close()
- server.socket.close()
- if __name__ == "__main__":
- main()
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement