Не подключается cloud agent

Обнаружил, что WB стал “красным” в интерфейсе

  1. Перезапустил сервис, не помогло
  2. Переустановил пакет, не помогло
  3. Удалил из интерфейса контроллер, не помогло
root@wirenboard-ABEMEKY7:~# wb-cloud-agent 
Traceback (most recent call last):
  File "/usr/bin/wb-cloud-agent", line 9, in <module>
    sys.exit(main.main())
  File "/usr/lib/python3.9/dist-packages/wb/cloud_agent/main.py", line 411, in main
    make_start_up_request(settings, mqtt)
  File "/usr/lib/python3.9/dist-packages/wb/cloud_agent/main.py", line 280, in make_start_up_request
    raise ValueError("Not a 200 status while making start up request: " + str(http_status))
ValueError: Not a 200 status while making start up request: 400

Куда копать? Кажется, что началось после обновления (apt update && apt upgrade), но не уверен

Добрый день.
Проверьте, есть ли доступ выполнив

curl --cert /var/lib/wb-cloud-agent/device_bundle.crt.pem --key ATECCx08:00:02:C0:00 --engine ateccx08 --key-type ENG -w {"code":"%{response_code}"} https://agent.wirenboard.cloud/api-agent/v1/events/ -v

Ну и пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

root@wirenboard-ABEMEKY7:~# curl --cert /var/lib/wb-cloud-agent/device_bundle.crt.pem --key ATECCx08:00:02:C0:00 --engine ateccx08 --key-type ENG -w {"code":"%{response_code}"} https://agent.wirenboard.cloud/api-agent/v1/events/ -v
*   Trying 5.35.4.252:443...
* Connected to agent.wirenboard.cloud (5.35.4.252) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* failed to load private key from crypto engine
* Closing connection 0
curl: (58) failed to load private key from crypto engine

А как загрузить диагностический архив, чтобы он не был публичным?

Попробовал выполнить ту же команду на контроллере, нормально работающим с облаком - ошибка та же

Проверяю у себя:

curl --cert /var/lib/wb-cloud-agent/device_bundle.crt.pem --key ATECCx08:00:02:C0:00 --engine ateccx08 --key-type ENG -w {"code":"%{response_code}"} https://agent.wirenboard.cloud/api-agent/v1/events/ -v
*   Trying 5.35.4.252:443...
*   Trying 5.35.4.252:443...
* Connected to agent.wirenboard.cloud (5.35.4.252) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Request CERT (13):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS handshake, CERT verify (15):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=agent.wirenboard.cloud
*  start date: Sep 10 21:26:08 2024 GMT
*  expire date: Dec  9 21:26:07 2024 GMT
*  subjectAltName: host "agent.wirenboard.cloud" matched cert's "agent.wirenboard.cloud"
*  issuer: C=US; O=Let's Encrypt; CN=E6
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0xaaaae9145370)
> GET /api-agent/v1/events/ HTTP/2
> Host: agent.wirenboard.cloud
> user-agent: curl/7.74.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!

Нет. Как раз контроллер, который не зарегистрирован в облачном сервисе:

curl --cert /var/lib/wb-cloud-agent/device_bundle.crt.pem --key ATECCx08:00:02:C0:00 --engine ateccx08 --key-type ENG -w {"code":"%{response_code}"} https://agent.wirenboard.cloud/api-agent/v1/events/ -v
*   Trying 5.35.4.252:443...
* Connected to agent.wirenboard.cloud (5.35.4.252) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* failed to load private key from crypto engine
* Closing connection 0
curl: (58) failed to load private key from crypto engine

А если контроллер нормально работал с облаком, но отвалился?
Куда копать, чтобы полечить доступ к сертифу?

Для начала - проверить что время на контроллере успешно синхронизируется, это совершенно необходимо для работы сертификатов.
Ну и сам сертификат /var/lib/wb-cloud-agent/device_bundle.crt.pem - не пуст?

Время в порядке

Как должен выглядеть файл с сертифом?

он сейчас
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

т.е. два блока “CERTIFICATE”

Ну, сертификат - вполне нормально.
Судя по логу - контроллер не имеет доступа к cthdbce/
Он, сам сервис, пингуется?
Проверьте, не пуст ли /etc/wb-cloud-agent.conf
Должно быть

{
    "LOG_LEVEL": "INFO",
    "CLIENT_CERT_ENGINE_KEY": "ATECCx08:00:02:C0:00"
}

Что выводит просто запущенный

wb-cloud-agent

И что возвращается по

wget   https://wirenboard.cloud/ -O -
root@wirenboard-ABEMEKY7:~# cat /etc/wb-cloud-agent.conf
{
    "LOG_LEVEL": "INFO",
	"CLIENT_CERT_ENGINE_KEY": "ATECCx08:00:04:C0:00"
}

root@wirenboard-ABEMEKY7:~# wb-cloud-agent
Traceback (most recent call last):
  File "/usr/bin/wb-cloud-agent", line 9, in <module>
    sys.exit(main.main())
  File "/usr/lib/python3.9/dist-packages/wb/cloud_agent/main.py", line 411, in main
    make_start_up_request(settings, mqtt)
  File "/usr/lib/python3.9/dist-packages/wb/cloud_agent/main.py", line 280, in make_start_up_request
    raise ValueError("Not a 200 status while making start up request: " + str(http_status))
ValueError: Not a 200 status while making start up request: 400

root@wirenboard-ABEMEKY7:~# wget   https://wirenboard.cloud/ -O -

--2024-09-24 14:55:39--  https://wirenboard.cloud/
Распознаётся wirenboard.cloud (wirenboard.cloud)… 5.35.4.252
Подключение к wirenboard.cloud (wirenboard.cloud)|5.35.4.252|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 975 [text/html]
Сохранение в: «STDOUT»

-                                         0%[                                                                               ]       0  --.-KB/s               <!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- Favicon START -->
    <link rel="icon" href="/favicon.ico" sizes="any" />
    <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <link rel="manifest" href="/manifest.webmanifest" />
    <!-- Favicon END -->
    <title>Wiren Board</title>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&family=JetBrains+Mono&display=swap"
      rel="stylesheet" />
    <script type="module" crossorigin src="/assets/index-B3qsng3V.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-JnQD3n6V.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
-                                       100%[==============================================================================>]     975  --.-KB/s    за 0,002s  

/2024-09-24 14:55:40 (587 KB/s) - записан в stdout [975/975]

Как это проверить?

Судя по тому что http отдается - имеет.
Выткните пожалуйста то, что подключено в USB, затем перезапустите контроллер и не подключая выполните еще

i2cdetect -y 2

И покажите результаты.
Ну и сделайте ее один диагностический архив.

У меня нет физического доступа к контроллеру :frowning:

В контроллер воткнуты ИБП Hiden Control HS20-1012Р (12в, 1000Вт)(через через удлинитель USB-UTP-USB, отлично работает с wb-mqtt-serial) и wemos mini (ESP32 через переходник USB-Serial)

root@wirenboard-ABEMEKY7:~# i2cdetect -y 2
Error: Could not open file `/dev/i2c-2' or `/dev/i2c/2': No such file or directory
root@wirenboard-ABEMEKY7:~# ls /dev/i2c-
i2c-1  i2c-4  i2c-5  i2c-6  i2c-7  

Надо так:

верно, да.

root@wirenboard-ABEMEKY7:~# i2cdetect -y 4

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Отлично. В журналах вывод ядра загажен основательно ошибками от USB устройств - предполагаю что ни и влияют на работу с криптомодулем.

Где искать ошибки USB?

Логи в интерфейсе выглядят относительно спокойно

Оба устройства подключены больше года, а криптомодуль отвалился недавно…

вывод dmesg можно посмотреть.