class Coup(): relay_plate_id = 0 light_names = [ 'Run Light 1', 'Run Light 2', 'Coup Light 1', 'Coup Light 2' ] coup_dict = { 'Coup': { 'Lights': {}, 'Doors': {}, 'Temperatures': {}, 'Plate Status': {}, 'LEDs': { 'Relay Plate {} LED'.format(relay_plate_id): False } } } RELAY.clrLED(relay_plate_id) def get_status(self): relay_state = RELAY.relaySTATE(self.relay_plate_id) self.coup_dict['Coup']['Plate Status'] = relay_state i = 0 status = {} for light_name in self.light_names: status[light_name] = pow(2, i) & relay_state > 0 i += 1 self.coup_dict['Coup']['Lights'] = status return json.dumps(self.coup_dict) # TODO: Invert state to only check passed in state--take away requirement to pass in fully built json state def set_state(self, desired_state_json): desired_state = json.loads(desired_state_json) current_state = json.loads(self.get_status()) lights = current_state['Coup']['Lights'] for light, state in lights.items(): if state != desired_state['Coup']['Lights'][light]: self.set_light(light, desired_state['Coup']['Lights'][light]) def set_light(self, name, value): light = self.light_names.index(name) + 1 if value: RELAY.relayON(self.relay_plate_id, light) else: RELAY.relayOFF(self.relay_plate_id, light) def set_light_mode(self, mode): self.set_state(mode) # c = Coup() # c.set_state('{"Coup": {"Lights": {"Coup Light 2": true, "Run Light 2": true, "Coup Light 1": true, "Run Light 1": false}, "Doors": {}, "Temperatures": {}}}')
while True: try: line = sys.stdin.readline() # TODO: add error handling for invalid JSON msg = json.loads(line) addr = msg['addr'] plate_type = msg['plate_type'] cmd = msg['cmd'] args = msg['args'] resp = {} if (plate_type == "RELAY"): if (cmd == "setLED"): RP.setLED(addr) resp['LED'] = 1 elif (cmd == "clrLED"): RP.clrLED(addr) resp['LED'] = 0 elif (cmd == "toggleLED"): RP.toggleLED(addr) resp['LED'] = "UNKNOWN" elif (cmd == "getID"): resp['ID'] = RP.getID(addr) elif (cmd == "getHWrev"): resp['HWrev'] = RP.getHWrev(addr) elif (cmd == "getFWrev"): resp['FWrev'] = RP.getFWrev(addr) elif (cmd == "getPMrev"): resp['PMrev'] = RP.getPMrev() elif (cmd == "getADDR"): resp['ADDR'] = RP.getADDR(addr) elif ("relay" in cmd):