Skip to content

Useful grpcurl commands

Sinnx3 edited this page Jan 27, 2023 · 3 revisions

This page lists a few grpcurl commands that may be of interest to users of this project.

Dish Control

The following commands perform equivalent operations to those in the dish_control.py script.

Reboot the dish:

grpcurl -plaintext -d {\"reboot\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle

Stow the dish:

grpcurl -plaintext -d {\"dish_stow\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle

Unstow the dish:

grpcurl -plaintext -d {\"dish_stow\":{\"unstow\":true}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle

Get GPS (Lat/Lon/Alt) data from the dish:

grpcurl -plaintext -emit-defaults -d '{"getLocation":{}}' 192.168.100.1:9200 SpaceX.API.Device.Device/Handle

Inspecting the Protocol

If you want to poke around in the gRPC protocol the dish uses, you can list out what is available using the following commands.

To start at the top, you can list available services:

grpcurl -plaintext 192.168.100.1:9200 list

then list methods in the relevant service:

grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Device

The relevant method is Handle, which takes a single request message and returns a specific response message depending on which request was issued.

To list possible requests:

grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Request

and the respective responses:

grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Response

and then you can go on to describe the individual requests or responses, for example:

grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.DishGetStatusResponse

Note that not all of the requests are implemented on the dish. Some are specific to the router, some are just not implemented, and some fail with a "not authorized" error. Note also that even requests that are implemented may have individual fields that are not implemented, and thus will always return the default for the field's data type.