# Yakut

По аналогии с CAN utils для отладки и проверки корректности сообщений, отправленных через cyphal используется инструмент [Yakut](https://github.com/OpenCyphal/yakut/tree/main).

Yakut - это простой кроссплатформенный инструмент с интерфейсом командной строки (CLI) для диагностики и отладки сетей Cyphal. Благодаря тому, что Yakút основан на PyCyphal, он поддерживает все транспорты Cyphal (UDP, serial, CAN, ...) и совместим со всеми основными функциями протокола. Он разработан для использования в GNU/Linux, Windows и macOS.

Перед установкой yakut, убедитесь что версия python >=3.8 и установите дополнительные пакеты:

<pre class="language-shellscript"><code class="lang-shellscript"><strong>sudo apt update
</strong><strong>sudo apt upgrade
</strong><strong>sudo apt install libsdl2-dev libasound2-dev libjack-dev can-utils jq
</strong>sudo apt install python3-jsonnet
</code></pre>

Инструкция по установке yakut <https://pypi.org/project/yakut/>

Если **возникают ошибки** при использолвании команды `pip install yakut,`

воспользуйтесь `pipx:`

```python
sudo apt install pipx
pipx install yakut
pipx ensurepath
```

Прописанные в файле .bashrc экспорты должны выглядеть примерно так(в зависимости от ваших настроек):

```
export PATH="$PATH:/home/pi/.local/bin"
export YAKUT_FORMAT=json
export UAVCAN__CAN__IFACE=socketcan:can0
export UAVCAN__NODE__ID=101
export UAVCAN__CAN__MTU=64
export UAVCAN__CAN__BITRATE="500000 4000000"

export CYPHAL_PATH="$HOME/.cyphal:$CYPHAL_PATH"
```

Репозитоий, содержащий определения регламентированных типов данных Cyphal вы найдете по ссылке: <https://github.com/OpenCyphal/public_regulated_data_types/tree/master>

О том, как пользоваться yakut написано здесь

{% @github-files/github-code-block %}

Давайте разберем три основные команды - yakut monitor (y mon), yakut subscribe (y sub) и yakut publish (y pub).

## Yakut monitor

Сокращенный вариант этой команды&#x20;

&#x20;`y mon`

Она используется для отображения всей активности в сети. Она отслеживает узлы, находящиеся в режиме онлайн, и ведет в реальном времени статистику всех передач, которыми обменивается каждый узел в сети. Она также может обнаружить некоторые распространенные проблемы конфигурации сети, например, "зомби-узлы" (узлы, не публикующие uavcan.node.Heartbeat).&#x20;

<figure><img src="/files/4leqUfg2qsc7ThvHw2gm" alt=""><figcaption></figcaption></figure>

Подробно узнать о том, какая информация отображается на экране, какие есть опции у команды вы можете введя команду

```
y mon --help
```

## Yakut subscribe

Сокращенный вариант команды

```
y sub
```

Этой командой вы подписываетесь на конкретный топик (ID) и можете видеть что в него отправляется.&#x20;

Приведем пример. У нас есть программа, которая по ID 1111 отправляет угол поворота мотора в радианах. Прочитать какие данные туда приходят можно командой:

```
 y sub 1111:uavcan.si.sample.angle.scalar
```

*uavcan.si.sample.angle.scalar* - это тип получаемого сообщения. Выше дана ссылка на репозиторий, содержащий определения регламентированных типов данных Cyphal. Настоятельно рекомендуем ознакомиться с написанной там документацией, чтобы понимать каким образом устроена структура сообщений и их ID.

Результат введенной команды:

<figure><img src="/files/85ttQ4XYB2vpBn4llB4U" alt=""><figcaption></figcaption></figure>

Подробнее познакомиться с командой и посмотреть больше примеров вы можете, введя

```
y sub --help
```

## Yakut publish

Сокращенный вариант&#x20;

```
y pub
```

Примеры и описание вы можете посмотреть, набрав&#x20;

```
y pub --help
```

Рассмотрим один пример. Введите в терминале

```
 yakut pub 33:uavcan.si.unit.angle.scalar 2.31 uavcan.diagnostic.Record 'text: "2.31 radian"'
```

В топик 33 будет публиковаться сообщение типа uavcan.si.unit.angle.scalar, значение угла 2.31 радиан. Также будет публиковаться сообщение типа uavcan.diagnostic.Record. Для такого типа зарезервирован топик 8184 (см в документации о регламентированных типах данных).&#x20;

{% hint style="info" %}
Если вы публикуете отрицательное число, то в yakut возникнет неправильная интерпретация аргументов. Проблема в том, что отрицательное число (`-10, например`) воспринимается как опция, а не как значение. Чтобы исправить это, нужно явно указать, что это аргумент значения, а не флаг опции:
{% endhint %}

`yakut pub 2004:uavcan.si.unit.angular_velocity.scalar -- "-10"`

Откройте второй терминал и введите команду&#x20;

```
yakut sub 33 8184
```

На экране вы должны будете увидеть публкуемые вами сообщения:

<figure><img src="/files/9Bskl3y6UfiooduSR1wV" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/vbcores/tutorials/yakut.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
