def _GetParam(self, line): # pylint: disable=invalid-name """Sets a parameter for a specified inverter.""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use set_targets.') targets, args = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=True, select_all=True) args, param = cmd_client.SelectArgs(args, INVERTER_PARAMS.keys(), require_some=True, select_all=False) param = list(args)[0] modbus_param = INVERTER_PARAMS[param] failed_targets = [] for target in sorted(targets): print 'Getting %s from %s.' % (param, target) success = self._inverter_list[InverterNameToId( target)].TryGetParam(modbus_param) if not success: failed_targets.append(target) if failed_targets: raise GroundPowerClientError('Failed to get value %s from %s.' % (param, failed_targets))
def _GetParam(self, line, message): targets, args = cmd_client.SelectArgs(line.split(), LIGHTS, require_some=True, select_all=True) param, _ = cmd_client.SelectArgs(args, LIGHT_PARAMS.keys(), require_one=True, select_all=False) message.id = LIGHT_PARAMS[param] failed_targets = [] for target in targets: print 'Getting %s from %s...' % (param, target) success = True aio_target = AioNodeNameFromLightNickname(target) message.target = aio_node_helper.Value(aio_target) success = self._TryGetParam(message, 'kMessageTypeFaaLightGetParam', param, target, aio_target) if not success: failed_targets.append(target) if failed_targets: raise LightClientError('Failed to get %s from %s.' % (param, failed_targets))
def do_set_param(self, line): # pylint: disable=invalid-name """Sets a param for a specified servo, e.g. "set_param R1 XYZ 150".""" self._CheckState([ actuator_types.kActuatorStateInit, actuator_types.kActuatorStateError ]) servos, args = cmd_client.SelectArgs(line.split(), SERVOS, require_some=True, select_all=True) param, args = cmd_client.SelectArgs(args, SERVO_PARAMS, require_one=True, select_all=False) try: value = int(args[0], 0) except ValueError: raise ServoClientError('Invalid value: "%s".' % args[0]) message = pack_avionics_messages.ServoSetParamMessage() message.param = r22_param_helper.Value(param) message.value = value for target in servos: print 'Setting %s to %g on %s...' % (param, value, target) message.selected_servos = ServosAsBits([target]) ack_received = False for _ in xrange(self._NUM_RETRIES): self._set_param_aio_client.Send(message, 'kMessageTypeServoSetParam', OPERATOR) try: _, header, ack = self._ack_param_aio_client.Recv() if (header.source == aio_node_helper.Value( AioNodeNameFromServoNickname(target)) and header.type == message_type.kMessageTypeServoAckParam and ack.param == message.param): if ack.value == message.value: ack_received = True print '%s %s: %g' % (target, param, ack.value) break else: print 'Got response with incorrect value.' except socket.timeout: pass if not ack_received: raise ServoClientError('Failed to get %s from %s; giving up.' % (param, target))
def do_stop(self, line): # pylint: disable=invalid-name """Stops specified inverters, e.g. "stop Inv1 Inv2 Inv3".""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use "set_targets".') targets, _ = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=False, require_all=True, select_all=True, require_one=False) if not targets: raise GroundPowerClientError('No valid arguments selected.') if sorted(targets) == sorted(self._inverters_selected): for target in self._inverter_stop_sequence: try: self._inverter_list[InverterNameToId(target)].SetState( inverter_types.kInverterStatusStopped) except GroundPowerClientError: print 'Failed to stop %s.' % target else: target_order = line.split() for target in target_order: try: self._inverter_list[InverterNameToId(target)].SetState( inverter_types.kInverterStatusStopped) except GroundPowerClientError: print 'Failed to stop %s.' % target
def do_start(self, line): # pylint: disable=invalid-name """Starts specified inverters, e.g start Inv1 Inv2 Inv3.""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use "set_targets".') targets, _ = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=False, require_all=True, select_all=True, require_one=False) if not targets: raise GroundPowerClientError('No valid arguments selected.') if sorted(targets) == sorted(self._inverters_selected): for target in self._inverter_start_sequence: self._inverter_list[InverterNameToId(target)].SetState( inverter_types.kInverterStatusRunning) else: target_order = line.split() for target in target_order: self._inverter_list[InverterNameToId(target)].SetState( inverter_types.kInverterStatusRunning)
def do_get_param(self, line): # pylint: disable=invalid-name """Gets a param value for a servo, e.g. "get_param R1 VelocityVp".""" s, args = cmd_client.SelectArgs(line.split(), SERVOS, require_some=True, select_all=True) param, _ = cmd_client.SelectArgs(args, SERVO_PARAMS, require_one=True, select_all=False) msg = pack_avionics_messages.ServoGetParamMessage() msg.param = r22_param_helper.Value(param) for target in s: print 'Getting %s from %s...' % (param, target) msg.selected_servos = ServosAsBits([target]) success = False for _ in xrange(self._NUM_RETRIES): self._get_param_aio_client.Send(msg, 'kMessageTypeServoGetParam', OPERATOR) try: _, header, ack = self._ack_param_aio_client.Recv() if (header.source == aio_node_helper.Value( AioNodeNameFromServoNickname(target)) and header.type == message_type.kMessageTypeServoAckParam and ack.param == msg.param): print '%s %s: 0x%X' % (target, param, ack.value) success = True break except socket.timeout: pass if not success: raise ServoClientError('Failed to get %s from %s; giving up.' % (param, target))
def _SetParam(self, line, message): # pylint: disable=invalid-name """Sets a param for a specified light node.""" targets, args = cmd_client.SelectArgs(line.split(), LIGHTS, require_some=True, select_all=True) param, args = cmd_client.SelectArgs(args, LIGHT_PARAMS.keys(), require_one=True, select_all=False) try: value = float(args[0]) except ValueError: raise LightClientError('Invalid value: "%s".' % args[0]) message.id = LIGHT_PARAMS[param] message.value = value failed_targets = [] for target in targets: print 'Setting %s to %g on %s.' % (param, value, target) aio_target = AioNodeNameFromLightNickname(target) message.target = aio_node_helper.Value(aio_target) success = self._TrySetParam(message, 'kMessageTypeFaaLightSetParam', param, target, aio_target) if not success: failed_targets.append(target) if failed_targets: raise LightClientError('Failed to verify %s from %s.' % (param, failed_targets))
def _SetTargets(self, line, **kwargs): """Sets inverter targets. Args: line: User supplied arguments specifying target inverters. **kwargs: set_defaults present if defaults should be used. Raises: GroundPowerClientError: An invalid set of targets was supplied. """ if not kwargs['set_defaults']: if self._inverters_selected: self._ClearTargets() targets_selected, _ = cmd_client.SelectArgs(line.split(), DEFAULTS['targets'], require_some=True, require_all=True, select_all=True, require_one=False) self._inverters_selected = sorted(targets_selected) if self._inverters_selected == DEFAULTS['targets']: self._inverter_start_sequence = DEFAULTS['start_sequence'] self._inverter_stop_sequence = DEFAULTS['stop_sequence'] else: self._inverter_start_sequence = sorted(targets_selected) self._inverter_stop_sequence = sorted(targets_selected) else: self._inverters_selected = DEFAULTS['targets'] self._inverter_start_sequence = DEFAULTS['start_sequence'] self._inverter_stop_sequence = DEFAULTS['stop_sequence'] if self._inverters_selected: print 'Inverters selected: %s.' % ', '.join( sorted(self._inverters_selected)) print 'Start sequence: %s.' % ', '.join( self._inverter_start_sequence) print 'Stop sequence: %s.' % ', '.join( self._inverter_stop_sequence) self._ground_power_listener = Listener( set(self._inverters_selected)) self._inverter_list = [ Inverter(inverter_id, self._ground_power_listener) for inverter_id in xrange(inverter_types.kNumInverters) ]
def do_set_targets(self, line): # pylint: disable=invalid-name """Sets target servos, e.g. "set_targets A2 A4".""" self._CheckState([actuator_types.kActuatorStateInit]) servos_selected, _ = cmd_client.SelectArgs(line.split(), SERVOS, require_some=True, require_all=True, select_all=True, require_one=False) print 'Servos selected: [%s]' % ', '.join(sorted( list(servos_selected))) self._servos_selected = servos_selected self.TryStopThreads() self._runner = Runner(servos_selected) self._listener = Listener(self._servos_selected, self._runner.StopRun)
def do_set_stop_sequence(self, line): # pylint: disable=invalid-name """Sets stop sequence for selected inverters.""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use "set_targets".') targets_selected, _ = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=False, require_all=True, select_all=False, require_one=False) if len(targets_selected) != len(self._inverters_selected): print 'Stop sequence must contain all selected inverters.' else: self._inverter_stop_sequence = line.split() print 'Setting stop sequence to: %s.' % ', '.join( self._inverter_stop_sequence)
def do_get_faults(self, line): # pylint: disable=invalid-name """Gets faults for specified inverters, e.g "get_faults Inv1 Inv2 Inv3".""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use "set_targets".') targets, _ = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=False, require_all=True, select_all=True, require_one=False) if not targets: raise GroundPowerClientError('No valid arguments selected.') for target in sorted(targets): try: print self._inverter_list[InverterNameToId(target)].GetFaults() except GroundPowerClientError: print 'Failed to get faults from %s.' % target
def _SetParam(self, line, **kwargs): # pylint: disable=invalid-name """Sets a parameter for a specified inverter.""" if not self._inverters_selected: raise GroundPowerClientError( 'No targets selected. Use "set_targets".') targets, args = cmd_client.SelectArgs(line.split(), self._inverters_selected, require_some=True, select_all=True) if kwargs: param, args = cmd_client.SelectArgs(args, ['value'], require_one=True, select_all=False) if args: try: value = int(args[0]) except ValueError: raise GroundPowerClientError('Invalid value: ', args[0]) if value not in range(int(kwargs['lower_lim']), int(kwargs['upper_lim'])): raise GroundPowerClientError( 'Supplied value out of range.') if any('scaling' in k for k in kwargs): value = int(kwargs['scaling']) * value else: value = GetStrandedArgs(line) modbus_reg = INVERTER_SET_PARAMS[kwargs['param']] else: param, args = cmd_client.SelectArgs(args, INVERTER_SET_PARAMS.keys(), require_one=True, select_all=False) if args: try: value = int(args[0]) except ValueError: raise GroundPowerClientError('Invalid value: ', args[0]) else: value = GetStrandedArgs(line) modbus_reg = INVERTER_SET_PARAMS[param] failed_targets = [] for target in sorted(targets): print 'Setting %s to %g on %s.' % (param, value, target) success = self._inverter_list[InverterNameToId( target)].TrySetParam(modbus_reg, value) if not success: failed_targets.append(target) if failed_targets: raise GroundPowerClientError('Failed to verify %s from %s.' % (param, failed_targets))