#!flask/bin/python from flask import Flask, request from app import yeelight, linux, denon import pprint, json class LoggingMiddleware(object): def __init__(self, app): self._app = app def __call__(self, environ, resp): errorlog = environ['wsgi.errors'] pprint.pprint(('REQUEST', environ), stream=errorlog) def log_response(status, headers, *args): pprint.pprint(('RESPONSE', status, headers), stream=errorlog) return resp(status, headers, *args) return self._app(environ, log_response) global devices devices = None def loadConfig(): with open('devices.json', encoding='utf-8') as data_file: devices = json.loads(data_file.read()) ##---------------------------------------------------------------------------------------## ## Config ##---------------------------------------------------------------------------------------## #bulbs = { # "fernseher" : { "ip" : "192.168.178.127" }, # "regal" : { "ip" : "192.168.178.128" }, # "monitor" : { "ip" : "192.168.178.126" }, # "bett" : { "ip" : "192.168.178.122" } # } brightnessDark = 1 brightnessBright = 100 temperatureWarm = 1700 temperatureNormal = 3000 temperatureCold = 6500 #sshIp = "192.168.178.81" #sshUser = "root" #wakeonlanMac = "38.EA.A7.A1.09.D7" # #denonIp = "192.168.178.69" ##---------------------------------------------------------------------------------------## ## Init ##---------------------------------------------------------------------------------------## def init(): app = Flask(__name__) yeelight = yeelight.Yeelight(devices['yeelight']['rgb']) wakeonlan = linux.WakeOnLan() sshcmd = linux.SSHCmd(devices['ssh']['nas']['ip'], devices['ssh']['nas']['user']) # fuer mehrere Verbindungen, mehrere Instanzen erzeugen! denon = denon.Denon(devices['denon']['ip']) ##---------------------------------------------------------------------------------------## ## HTTP REQUESTS ##---------------------------------------------------------------------------------------## ##-----------------------------------------------------------------------------------## ## Yeelight ##-----------------------------------------------------------------------------------## @app.route('/bulb/on', methods=['PUT', 'POST']) def httpBulbOn(): yeelight.power("on") return 'OK' @app.route('/bulb/off', methods=['PUT', 'POST']) def httpBulbOff(): yeelight.power("off") return 'OK' #@app.route('/bulb/brightness', methods=['PUT', 'POST']) #def httpBrightness(): # data = str(request.data) # brightness = int(data["brightness"]) # if brightness <= 100 and brightness >= 0: # yeelight.brightness(brightness) # return 'OK' @app.route('/bulb/dark', methods=['PUT', 'POST']) def httpBulbBrightnessDark(): yeelight.brightness(brightnessDark) return 'OK' @app.route('/bulb/bright', methods=['PUT', 'POST']) def httpBulbBrightnessBright(): yeelight.brightness(brightnessBright) return 'OK' @app.route('/bulb/blue', methods=['PUT', 'POST']) def httpBulbColorBlue(): yeelight.color(0,0,255) return 'OK' @app.route('/bulb/red', methods=['PUT', 'POST']) def httpBulbColorRed(): yeelight.color(255,0,0) return 'OK' @app.route('/bulb/warm', methods=['PUT', 'POST']) def httpBulbTempWarm(): yeelight.temperature(temperatureWarm) return 'OK' @app.route('/bulb/cold', methods=['PUT', 'POST']) def httpBulbTempCold(): yeelight.temperature(temperatureCold) return 'OK' @app.route('/bulb/normal', methods=['PUT', 'POST']) def httpBulbNormal(): yeelight.temperature(temperatureNormal) return 'OK' @app.route('/bulb/abend', methods=['PUT', 'POST']) def httpBulbEvening(): yeelight.color(0,0,255) return 'OK' @app.route('/bulb/nacht', methods=['PUT', 'POST']) def httpBulbNight(): yeelight.temperature(temperatureWarm) yeelight.brightness(brightnessDark) return 'OK' @app.route('/bulb/flowMorgen', methods=['PUT', 'POST']) def httpBulbFlowMorning(): yeelight.temperatureTransition(startTemp=1700, endTemp=6500, startBrightness=0, endBrightness=100, seconds=60*15) return 'OK' @app.route('/bulb/flowNacht', methods=['PUT', 'POST']) def httpBulbFlowNight(): yeelight.temperatureTransition(startTemp=1700, endTemp=1700, startBrightness=100, endBrightness=1, seconds=60*15) return 'OK' @app.route('/bulb/flowStopp', methods=['PUT', 'POST']) def httpBulbFlowStop(): yeelight.stopTransition() return 'OK' ##-----------------------------------------------------------------------------------## ## Denon ##-----------------------------------------------------------------------------------## @app.route('/denon/on', methods=['PUT', 'POST']) def httpReceiverOn(): denon.power("on") return 'OK' @app.route('/denon/off', methods=['PUT', 'POST']) def httpReceiverOff(): denon.power("off") return 'OK' @app.route('/denon/inet', methods=['PUT', 'POST']) def httpReceiverInet(): denon.setInput("Internet Radio") return 'OK' @app.route('/denon/tv', methods=['PUT', 'POST']) def httpReceiverTv(): denon.setInput("TV Audio") return 'OK' ##-----------------------------------------------------------------------------------## ## SSH ##-----------------------------------------------------------------------------------## @app.route('/wol/nas', methods=['PUT', 'POST']) def httpNasOn(): wakeonlan.wakeDevice(devices['wol']['nas']['mac']) return 'OK' @app.route('/nas/poweroff', methods=['PUT', 'POST']) def httpNasOff(): sshcmd.shutdown return 'OK' @app.route('/nas/reboot', methods=['PUT', 'POST']) def httpNasReboot(): sshcmd.reboot() return 'OK' @app.route('/nas/update', methods=['PUT', 'POST']) def httpNasUpdate(): sshcmd.upgrade() return 'OK' ##---------------------------------------------------------------------------------------## ## Main Program ##---------------------------------------------------------------------------------------## if __name__ == '__main__': #app.wsgi_app = LoggingMiddleware(app.wsgi_app) loadConfig() init() app.run(debug=True, host='0.0.0.0')