Advertisement
tonyschoborg

Blog - Home Automation Raspberry Pi Python Code

Jan 21st, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.83 KB | None | 0 0
  1. #!usr/bin/python
  2.  
  3. import paho.mqtt.publish as publish #implementation
  4.  
  5. from flask import (
  6.     Flask,
  7.     render_template,
  8.     request,
  9. )
  10.  
  11. app = Flask(__name__)
  12.  
  13. OFFICE_LIGHTS = 2 #Implementation
  14. OFFICE_RELAY = 3 #Implementation
  15.  
  16. rgbOfficeLastSet = (255 * .75, 255 * .75, 255 * .75)
  17. rgbOfficeLightsOff = (0,0,0)
  18. deskCurentStatus = False
  19.  
  20. officeBenchRelay1LastSet = False
  21.  
  22. TOPIC = "/house" #implementation
  23.  
  24. ##############################################################################
  25.  
  26. #http://XXX.XXX.XXX.XXX:YYYY/house/office/on
  27. @app.route('/house/office/on', methods=['GET', 'POST'])
  28. def houseOfficeOn():
  29.     officeLightsToState(True)
  30.     setOfficeRelay(True)
  31.     return "Office On"
  32.  
  33. #http://XXX.XXX.XXX.XXX:YYYY/house/office/off
  34. @app.route('/house/office/off', methods=['GET', 'POST'])
  35. def houseOfficeOff():
  36.     officeLightsToState(False)
  37.     setOfficeRelay(False)
  38.     return "Office Off"
  39.  
  40. ##############################################################################
  41.  
  42.  
  43. #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/on
  44. @app.route('/house/office/desk/lights/on', methods=['GET', 'POST'])
  45. def houseOfficeDeskLightsOn():
  46.     officeLightsToState(True)
  47.     return "Desk On"
  48.  
  49. #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/off
  50. @app.route('/house/office/desk/lights/off', methods=['GET', 'POST'])
  51. def houseOfficeDeskLightsOff():
  52.     officeLightsToState(False)
  53.     return "Desk Off"
  54.  
  55. #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/toggle
  56. @app.route('/house/office/desk/lights/toggle', methods=['GET', 'POST'])
  57. def houseOfficeDeskLightsToggle():
  58.     global deskCurentStatus
  59.     deskCurentStatus = not deskCurentStatus
  60.     officeLightsToState(deskCurentStatus)
  61.     if(deskCurentStatus):
  62.         return "Desk On"
  63.     else:
  64.         return "Desk Off"
  65.    
  66.  
  67. #http://XXX.XXX.XXX.XXX:YYYY/house/office/desk/lights/levelcolor?level= {{NumberField}}&color= {{TextField}}
  68. @app.route('/house/office/desk/lights/levelcolor', methods=['GET', 'POST'])
  69. def houseOfficeDeskLightsLevelColor():
  70.     global rgbOfficeLastSet
  71.     color = request.values['color']
  72.     #Scales and limits request (0-100% to 0-255)
  73.     level = clamp(int(int(request.values['level']) * 2.55), 0, 255)
  74.    
  75.     rgbOfficeLastSet = calcRGBColorLevels(color, level)
  76.     officeLightsToState(level > 0)
  77.    
  78.     return "Kitchen Lights set to %s and %s" % (level, color)
  79.  
  80.    
  81. def setHouseOfficeDeskLights(levels):
  82.     r, g, b = levels
  83.     publish.single(TOPIC, chr(int(r)) + chr(int(g)) + chr(int(b)) + chr(OFFICE_LIGHTS)) #implementation
  84.  
  85.  
  86. ###################################################################################
  87.  
  88. #http://XXX.XXX.XXX.XXX:YYYY/house/office/bench/relay1/toggle
  89. @app.route('/house/office/bench/relay1/toggle', methods=['GET', 'POST'])
  90. def houseOfficeBenchRelay1Toggle():
  91.     global officeBenchRelay1LastSet
  92.    
  93.     officeBenchRelay1LastSet =  not officeBenchRelay1LastSet
  94.     setOfficeRelay(officeBenchRelay1LastSet)
  95.    
  96.     if (officeBenchRelay1LastSet):
  97.         return "Office Relay On"
  98.     else:
  99.         return "Office Relay Off"
  100.  
  101.  
  102. def setHouseOfficeBenchRelay1(value):
  103.     publish.single(TOPIC, chr(int(value)) + chr(0) + chr(0) + chr(OFFICE_RELAY)) #implementation
  104.  
  105.  
  106. ###################################################################################
  107.  
  108.  
  109. def officeLightsToState(state):
  110.     global rgbOfficeLastSet
  111.     global rgbOfficeLightsOff
  112.     global deskCurentStatus
  113.    
  114.     if(state):
  115.         #Set Office Lights to last used setting and indicate they are currently on
  116.         setHouseOfficeDeskLights(rgbOfficeLastSet)
  117.         deskCurentStatus = True
  118.     else:
  119.         #Turn lights off and set current status variable
  120.         setHouseOfficeDeskLights(rgbOfficeLightsOff)
  121.         deskCurentStatus = False
  122.  
  123. def setOfficeRelay(state):
  124.     global officeBenchRelay1LastSet
  125.     #turn relay on and set current status variable
  126.     officeBenchRelay1LastSet = state
  127.     setHouseOfficeBenchRelay1(officeBenchRelay1LastSet)
  128.  
  129.  
  130. def calcRGBColorLevels(color, level):
  131.     levels = (level, level, level)
  132.  
  133.     if ("red" in color.lower()):
  134.         levels = (level, 0, 0)
  135.     elif ("orange" in color.lower()):
  136.         levels = (level, level * .75,0)
  137.     elif ("yellow" in color.lower()):
  138.         levels = (level * .75,level,0)
  139.     elif ("green" in color.lower()):
  140.         levels = (0, level, 0)
  141.     elif ("aqua" in color.lower()):
  142.         levels = (0, level, level * .75)
  143.     elif ("cyan" in color.lower()):
  144.         levels = (0, level * .75, level)
  145.     elif ("blue" in color.lower()):
  146.         levels = (0, 0, level)
  147.     elif ("purple" in color.lower()):
  148.         levels = (level * .75, 0, level)
  149.     elif ("pink" in color.lower()):
  150.         levels = (level, 0, level * .75)
  151.     return levels
  152.    
  153. def clamp(n, minimum, maximum):
  154.     return max(min(maximum, n), minimum)
  155.    
  156. if __name__ == "__main__":
  157.     app.run('0.0.0.0', 5300)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement