# SoftBank Robotics documentation What's new in NAOqi 2.8?

# Using qicli commands

qicli commands allows you to:

- see information,
- use methods, and
- watch signals.a

## How to run qicli

### Prerequisite

Make sure NAOqi is running.

### Running qicli

Two possible methods:

- Connect on SSH to your robot.

- Use qicli on your computer and connect remotely on a robot.

      $ ./qicli cmd args --qi-url IPofYourRobot

## qicli info

qicli info is used to display:

- a list of services,
- a detailed list of methods and signals of specific services,
- information about:
  - method parameters, return type or return type members,
  - signal type,
  - property type or property type members.

With no argument, it lists services:

    $ qicli info
    > 001 [ServiceDirectory]
      002 [LogManager]
      003 [ALFileManager]
      004 [ALMemory]
      005 [ALLogger]
      ...

This is equivalent to:

    $ qicli info --list
    $ qicli info -l
    $ qicli # Without any argument

With a service name as argument, it gives:

    $ qicli info ServiceDirectory
    > 001 [ServiceDirectory]
      * Info:
       machine   37814cee-e5a8-4183-9862-65d10460f0e5
       process   3665
       endpoints tcp://127.0.0.1:9559
                 tcp://198.18.0.1:9559
                 tcp://10.2.1.177:9559
      * Methods:
       100 service            (String)
       101 services          List<> ()
       102 registerService   UInt32 ()
       103 unregisterService Void (UInt32)
       104 serviceReady      Void (UInt32)
       105 updateServiceInfo Void ()
       108 machineId         String ()
      * Signals:
       106 serviceAdded   (UInt32,String)
       107 serviceRemoved (UInt32,String)

There is always 3 parts:

- Info: general information about service,
- Methods: list of methods,
- Signals: list of signals.

The 2 last parts may be empty.

Methods and Signal follow the format:

    [id] name    [return_type] ([parameters_types...])

If the name of the service is a bit long, identifiers can be used instead:

    $ qicli info ServiceDirectory
    $ qicli info 1

Command also accept several services’ names simultaneously:

    $ qicli info ServiceDirectory LogManager
    > 001 [ServiceDirectory]
        * Info:
         machine   37814cee-e5a8-4183-9862-65d10460f0e5
         process   3665
         endpoints tcp://127.0.0.1:9559
                   tcp://198.18.0.1:9559
                   tcp://10.2.1.177:9559
        * Methods:
         100 service            (String)
         101 services          List<> ()
         102 registerService   UInt32 ()
         103 unregisterService Void (UInt32)
         104 serviceReady      Void (UInt32)
         105 updateServiceInfo Void ()
         108 machineId         String ()
        * Signals:
         106 serviceAdded   (UInt32,String)
         107 serviceRemoved (UInt32,String)
      002 [LogManager]
        * Info:
         machine   37814cee-e5a8-4183-9862-65d10460f0e5
         process   3665
         endpoints tcp://127.0.0.1:9559
                   tcp://198.18.0.1:9559
                   tcp://10.2.1.177:9559
        * Methods:
         100 log            Void (LogMessage)
         101 getListener    Object ()
         102 addProvider    Int32 (Object)
         103 removeProvider Void (Int32)
        * Signals:

Globing can also be used:

    $ qicli info "LogMa*"
    > 002 [LogManager]
        * Info:
         machine   37814cee-e5a8-4183-9862-65d10460f0e5
         process   3665
         endpoints tcp://127.0.0.1:9559
                   tcp://198.18.0.1:9559
                   tcp://10.2.1.177:9559
        * Methods:
         100 log            Void (LogMessage)
         101 getListener    Object ()
         102 addProvider    Int32 (Object)
         103 removeProvider Void (Int32)
        * Signals:

The parameter can also be the name of a service followed by the name of a member of that service separated by a dot. In this case it displays information about that member.

For example, used with the name of a method, it displays information about its return type and its parameters:

    $ qicli info ServiceDirectory.service
    > [ServiceDirectory.service]
        100 service ServiceInfo (String)
        return type ServiceInfo
          members
            name      String
            serviceId UInt32
            machineId String
            processId UInt32
            endpoints List<String>
            sessionId String
        parameters
          1: String

Used on a property or a signal, it displays information about its type:

    $ qicli info ALMood.valenceLevel
    > [ALMood.valenceLevel]
        114 valenceLevel ValueConfidence<float>
          members
            value      Float
            confidence Float
    $ qicli info ALMood.currentFocusedUserMood
    > [ALMood.currentFocusedUserMood]
        112 currentFocusedUserMood (String)
        signal type(s)
          1: String

This syntax can also be chained to get information about a member submember:

    $ qicli info ALMood.personStateFromUserSession.bodyLanguageState
    > [ALMood.personStateFromUserSession.bodyLanguageState]
        BodyLanguageState
          members
            ease BodyLanguageEase
    $ qicli info ALMood.personStateFromUserSession.bodyLanguageState.ease
    > [ALMood.personStateFromUserSession.bodyLanguageState.ease]
        BodyLanguageEase
          members
            level      Float
            confidence Float

- Extra options:

      --show-doc

  Show documentation for methods, signals and properties.

      --hidden

  Show hidden services, methods, signals and properties.

      --raw-signature

  Show the raw signature.

      -z

  Prints the result in a parseable format

## qicli call

This command allows you to call service’s methods ans signals.

Returned values follow json format.

    $ qicli call ALFileManager.ping
    > ALFileManager.ping: true

More complex return values can also be returned.

    $ qicli call ALMemory.getEventList
    > ALMemory.getEventList: [ "/Preferences", "ALAnimatedSpeech/EndOfAnimatedSpeech", "ALAudioSourceLocalization/SoundLocated", "ALAudioSourceLocalization/SoundsLocated", ...]

Where

[ ... ] is a list in json.

Identifiers can also be used instead of names:

    $ qicli call 4.123
    > ALMemory.getEventList: [ "/Preferences", "ALAnimatedSpeech/EndOfAnimatedSpeech", "ALAudioSourceLocalization/SoundLocated", "ALAudioSourceLocalization/SoundsLocated", ...]

Several arguments can be given:

    $ qicli call ServiceDirectory.service PackageManager
    > ServiceDirectory.service: [ "PackageManager", 41, "4fd62363-f74d-4c6d-81d1-c1b9304c77d2", 3840, [ "tcp://10.0.252.216:34510", "tcp://127.0.0.1:34510" ], "0967f415-db38-43a4-b5a9-7ac70539891d" ]

Complex arguments (list, objects) of methods must be given in JSON with option –json.

Warning

JSON and terminals do not work well together.

    $ qicli call --json ALMemory.insertListData "[[\"foo\",true],[\"bar\",1]]"
    > ALMemory.insertListData: null

In order to call a hidden method, add –hidden

- Extra options:

      --method arg

  Method’s name.

      --arg arg

  Method’s args.

      --bench arg

  Bench the call time using given iteration count.

      --continue**

  Continue on error.

## qicli watch

Qicli watch is used to see when a signal is triggered.

For example, to get information each time a package is installed on your robot, use:

    $ qicli watch PackageManager.onPackageInstalled

- Extra options:

      -s [ --signal ] arg

  Service’s name.

      -t [ --time ]

  Print time.

      --hidden

  Watch hidden signals if they match the given pattern.

      --continue

  Continue on error.

      --almemory

  Watch ALMemory events.

## qicli log-view

Qicli log-view is used to display logs.

    $ qicli log-view

- Extra options:

      -v [ --verbose ]

  Set maximum logs verbosity shown to verbose.

      -d [ --debug ]

  Set maximum logs verbosity shown to debug.

      -l [ --level ]

  arg (=4) Change the log minimum level: [0-6] (default:4). This option accept the same arguments’ format than –qi-log-level.

      -f [ --filters ] arg

  Set log filtering options. This option accepts the same arguments’ format than –qi-log-filters.

## qicli log-send

Qicli log-send is used to send logs.

for sending a message:

    $ qicli log-send hello

This is equivalent to:

    $ qicli log-send --message hello
    $ qicli log-send -m hello

To send a message with your own Message’s category (default: “qicli.qilog.logsend”):

    $ qicli log-send --category MyCategory -m MyMessage
    $ qicli log-send -c MyCategory -m MyMessage

- Extra options:

      -v [ --verbose ]

  Set message verbosity to verbose.

      -d [ --debug ]

  Set message verbosity to debug.

      -l [ --level ] arg (=4)

  Change the log minimum level: [0-6] (default:4). This option accepts the same arguments’ format than –qi-log-level.

Glossary Site map Index Support Contact Legal Notices