Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!usr/bin/python
- import paho.mqtt.publish as publish #implementation
- from flask import (
- Flask,
- render_template,
- request,
- )
- app = Flask(__name__)
- OFFICE_LIGHTS = 2 #Implementation
- OFFICE_RELAY = 3 #Implementation
- rgbOfficeLastSet = (255 * .75, 255 * .75, 255 * .75)
- rgbOfficeLightsOff = (0,0,0)
- deskCurentStatus = False
- officeBenchRelay1LastSet = False
- TOPIC = "/house" #implementation
- ##############################################################################
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/on
- @app.route('/house/office/on', methods=['GET', 'POST'])
- def houseOfficeOn():
- officeLightsToState(True)
- setOfficeRelay(True)
- return "Office On"
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/off
- @app.route('/house/office/off', methods=['GET', 'POST'])
- def houseOfficeOff():
- officeLightsToState(False)
- setOfficeRelay(False)
- return "Office Off"
- ##############################################################################
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/on
- @app.route('/house/office/desk/lights/on', methods=['GET', 'POST'])
- def houseOfficeDeskLightsOn():
- officeLightsToState(True)
- return "Desk On"
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/off
- @app.route('/house/office/desk/lights/off', methods=['GET', 'POST'])
- def houseOfficeDeskLightsOff():
- officeLightsToState(False)
- return "Desk Off"
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/toggle
- @app.route('/house/office/desk/lights/toggle', methods=['GET', 'POST'])
- def houseOfficeDeskLightsToggle():
- global deskCurentStatus
- deskCurentStatus = not deskCurentStatus
- officeLightsToState(deskCurentStatus)
- if(deskCurentStatus):
- return "Desk On"
- else:
- return "Desk Off"
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/levelcolor?level= {{NumberField}}&color= {{TextField}}
- @app.route('/house/office/desk/lights/levelcolor', methods=['GET', 'POST'])
- def houseOfficeDeskLightsLevelColor():
- global rgbOfficeLastSet
- color = request.values['color']
- #Scales and limits request (0-100% to 0-255)
- level = clamp(int(int(request.values['level']) * 2.55), 0, 255)
- rgbOfficeLastSet = calcRGBColorLevels(color, level)
- officeLightsToState(level > 0)
- return "Kitchen Lights set to %s and %s" % (level, color)
- def setHouseOfficeDeskLights(levels):
- r, g, b = levels
- publish.single(TOPIC, chr(int(r)) + chr(int(g)) + chr(int(b)) + chr(OFFICE_LIGHTS)) #implementation
- ###################################################################################
- #http://XXX.XXX.XXX.XXX:YYYY/house/office/bench/relay1/toggle
- @app.route('/house/office/bench/relay1/toggle', methods=['GET', 'POST'])
- def houseOfficeBenchRelay1Toggle():
- global officeBenchRelay1LastSet
- officeBenchRelay1LastSet = not officeBenchRelay1LastSet
- setOfficeRelay(officeBenchRelay1LastSet)
- if (officeBenchRelay1LastSet):
- return "Office Relay On"
- else:
- return "Office Relay Off"
- def setHouseOfficeBenchRelay1(value):
- publish.single(TOPIC, chr(int(value)) + chr(0) + chr(0) + chr(OFFICE_RELAY)) #implementation
- ###################################################################################
- def officeLightsToState(state):
- global rgbOfficeLastSet
- global rgbOfficeLightsOff
- global deskCurentStatus
- if(state):
- #Set Office Lights to last used setting and indicate they are currently on
- setHouseOfficeDeskLights(rgbOfficeLastSet)
- deskCurentStatus = True
- else:
- #Turn lights off and set current status variable
- setHouseOfficeDeskLights(rgbOfficeLightsOff)
- deskCurentStatus = False
- def setOfficeRelay(state):
- global officeBenchRelay1LastSet
- #turn relay on and set current status variable
- officeBenchRelay1LastSet = state
- setHouseOfficeBenchRelay1(officeBenchRelay1LastSet)
- def calcRGBColorLevels(color, level):
- levels = (level, level, level)
- if ("red" in color.lower()):
- levels = (level, 0, 0)
- elif ("orange" in color.lower()):
- levels = (level, level * .75,0)
- elif ("yellow" in color.lower()):
- levels = (level * .75,level,0)
- elif ("green" in color.lower()):
- levels = (0, level, 0)
- elif ("aqua" in color.lower()):
- levels = (0, level, level * .75)
- elif ("cyan" in color.lower()):
- levels = (0, level * .75, level)
- elif ("blue" in color.lower()):
- levels = (0, 0, level)
- elif ("purple" in color.lower()):
- levels = (level * .75, 0, level)
- elif ("pink" in color.lower()):
- levels = (level, 0, level * .75)
- return levels
- def clamp(n, minimum, maximum):
- return max(min(maximum, n), minimum)
- if __name__ == "__main__":
- app.run('0.0.0.0', 5300)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement