74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import sys
 | |
| from flask import Flask, request, render_template, send_file, redirect, send_from_directory
 | |
| 
 | |
| import source # take a look in source/__init__.py
 | |
| from brewCamera import BrewCamera
 | |
| from brewSensor import BrewSensor
 | |
| from brewRelay import BrewRelay
 | |
| import source.loader as loader
 | |
| 
 | |
| def isItInArgv(it):
 | |
|     return it in sys.argv
 | |
| 
 | |
| app = Flask(__name__)
 | |
| brewCamera = BrewCamera(20)
 | |
| 
 | |
| externalPeripherals = loader.load('brew.yaml')
 | |
| sensors = externalPeripherals['sensors']
 | |
| relays = externalPeripherals['relays']
 | |
| 
 | |
| if isItInArgv('-d') or isItInArgv('--daemon'):
 | |
|     brewCamera.spawnBackgroundCapture()
 | |
| 
 | |
|     for sensor in sensors:
 | |
|         try:
 | |
|             sensor.spawnBackgroundSensorLog()
 | |
|         except Error as error:
 | |
|             print('Error while spawning sensor background task:', error)
 | |
| 
 | |
| def sensorTemp(location):
 | |
|     sensor = BrewSensor.getSensorByItsLocation(sensors, location)
 | |
|     if sensor:
 | |
|         return sensor.temp
 | |
|     return 'not found :('
 | |
| 
 | |
| @app.route('/toggle/<controls>', methods=['POST', 'GET'])
 | |
| def toggle(controls):
 | |
|     if request.method == 'GET':
 | |
|         return redirect('/')
 | |
| 
 | |
|     relay = BrewRelay.getRelayByWhatItControls(relays, controls)
 | |
|     if relay:
 | |
|         relay.set(not relay.state)
 | |
|         if relay.controls == 'light':
 | |
|             brewCamera.capture()
 | |
|     else:
 | |
|         print('relay {} not found'.format(controls))
 | |
| 
 | |
|     return redirect('/')
 | |
| 
 | |
| @app.route('/assets/<filename>')
 | |
| def assets(filename):
 | |
|     return send_file('./assets/{}'.format(filename))
 | |
| 
 | |
| @app.route('/favicon.ico')
 | |
| def favicon():
 | |
|     faviconPath = os.path.join(app.root_path, 'assets/favicon')
 | |
|     return send_from_directory(faviconPath, 'favicon.ico')
 | |
| 
 | |
| @app.route('/feed')
 | |
| def feed():
 | |
|     return send_file('./foo.jpg')
 | |
| 
 | |
| @app.route('/')
 | |
| def index():
 | |
|     return render_template('./index.html',
 | |
|             sensors=sensors,
 | |
|             sensorTemp=sensorTemp,
 | |
|             relays=relays,
 | |
|             captureInterval=brewCamera.interval)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     app.run(host='0.0.0.0')
 |