def set_command(self,command, args=''): ''' transmit or execute commands from websocket or gpio interfaces ''' if command == 'stop': if self.playing: self.midifactory.command('play 0') self.playing = False if self.recording: self.midifactory.command('record 0') self.recording = False if self.opened: pass elif command in ('play','record'): self.midifactory.command(command+' 1') if command == 'play': self.playing = True else: self.analyzed['cocktail'] = 0 self.analyzed['result'] = '' if self.recording == False: self.recording = True self.notes = [] elif command == 'cocktail': if self.analyzed['cocktail'] > 0: d = threads.deferToThread(self.serve, *(self.analyzed['cocktail'],)) d.addCallback(self.wsfactory.sendmessage) self.wsfactory.sendmessage(u'Service en cours...\n') else: if self.recording: self.midifactory.command('record 0') self.recording = False if self.analyzed['cocktail'] == 0 : reactor.callLater(1, self.set_command, 'cocktail') #@UndefinedVariable elif command[:4] == 'test': cont = dbUtils.getPump(self.dbsession, command[6:]) if len(cont) > 1: if cont[0] == 'gpio_in': try: try: self.set_command(cont[4].split(",")[0],cont[4].split(",")[1]) except: self.set_command(cont[4].split(",")[0]) except Exception, err: print(err.message) elif command[5] == '-': switchcontrol(cont,debug=self.debug) self.serving = False else: switchcontrol(cont,on=1,debug=self.debug) self.serving = True else: log.msg("i2c error: no data found for pump n°:%s" % command[6:])
def render_POST(self, request): param = False if self.debug: log.msg(request.content) log.msg("POST received Headers: " + str(request.getAllHeaders())+"\n") log.msg("POST received Args: " + str(request.args)+"\n") log.msg("POST received Content: " + str(request.content.getvalue())+"\n") try : ''' Global exception handler to avoid letting bad connections open ''' try: ''' Check if it is a url-encoded or json-encoded request ''' client = request.args['client'][0] action = request.args['action'][0] try : command = request.args['command'][0] except : command = False try: param = request.args['param'][0] except : if command: if command == 'setrecipe': param = request.args if self.debug: log.msg("url-encoded request: %s" % action) except: dictreq = json.load(request.content) #log.msg(dictreq) client = dictreq['client'] action = dictreq['action'] command = dictreq['command'] param = dictreq['params'] if self.debug: log.msg("json-encoded request: %s" % action) if client == 'web': if action in ('status', 'close', 'play', 'record', 'reload', 'cocktail', 'stop', 'config', 'pump', 'test'): if action == 'config': if param : ''' Update Data ''' if self.debug: log.msg("request processed param = "+str(param)) self.updateDB(request,command, param) else: ''' Get Data ''' if self.debug: log.msg("request without parameter") self.queryDB(request,command) elif action == 'pump': if command : control = dbUtils.getPump(self.parent.dbsession, command[1:]) if self.debug: log.msg("pump command: "+command) try: switchcontrol(control, int(not self.parent.serving), self.debug) self.parent.serving = not self.parent.serving #log.msg("serving = %s" % self.parent.serving) request.write('0') except: log.msg("i2c system error") request.write('1') request.finish() elif action == 'cocktail': d = threads.deferToThread(self.parent.serve, *(command,)) d.addCallbacks(self.resultOk, errback=self.resultFailed, callbackArgs=(request,), errbackArgs=(request,)) else : request.write("bad command") request.finish() except Exception, err: log.msg("Error: " + err.message) request.write("network error") request.finish()