«Недопустимый gcp.key» из ОС Mon goose при подключении ESP32 к Google Cloud Platform - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь подключить устройство ESP32 к облачной платформе Google (GCP) с ОС Mon goose. Я новичок в ОС Mon goose, но дошел до постройки и запуска кода sh, а также подключения к Wi-Fi. Но у меня возникают проблемы, когда я добавляю информацию в файл mos.yml для подключения к GCP. Это ошибка:

mgos.gcp. c: 361 Invalid gcp.key (0xffffc200)

Я создал пару ключей со следующими командами:

openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
openssl ec -in ec_private.pem -pubout -out ec_public.pem

Это мой mos.yml:

author: HiMinds.com
description: Test application for connecting to Google IoT Core via MQTT-bridge
version: 0.1
arch: esp32

libs_version: ${mos.version}
modules_version: ${mos.version}
mongoose_os_version: ${mos.version}

# Optional. List of tags for online search.
tags:

  - js
  - c

# List of files / directories with C sources. No slashes at the end of dir names.
sources:
  - src

# List of dirs. Files from these dirs will be copied to the device filesystem
filesystem:
  - fs

config_schema:
  - ["pins", "o", {title: "Pins layout"}]
  - ["pins.button", "i", 0, {title: "Button GPIO pin"}]
  - ["pins.button_pull_up", "b", true, {title: "True if button is pulled up when inactive"}]
  - ["pins.led", "i", 5, {title: "LED GPIO pin"}]
  - ["wifi.ap.enable", false]
  - ["wifi.sta.enable", true]
  - ["wifi.sta.ssid", "my_SSID"]
  - ["wifi.sta.pass", "my_password"]
  - ["device.id", "esp32"]
  - ["mqtt.enable.", true]
  - ["mqtt.server", "mqtt.googleapis.com:8883"]
  - ["mqtt.ssl_ca_cert", "roots.pem"]
  - ["gcp.enable", true]
  - ["gcp.project", "project_name"]
  - ["gcp.region", "europe-west1"]
  - ["gcp.registry", "registry_name"]
  - ["gcp.device", "esp32"]
  - ["gcp.key", "ec_private.pem"]
  - ["provision.max_state", 3]

libs:
 # - origin: https://github.com/mongoose-os-libs/ca-bundle
  - origin: https://github.com/mongoose-os-libs/core
  - origin: https://github.com/mongoose-os-libs/provision
  - origin: https://github.com/mongoose-os-libs/rpc-service-config
  - origin: https://github.com/mongoose-os-libs/rpc-service-fs
  - origin: https://github.com/mongoose-os-libs/rpc-service-gpio
  - origin: https://github.com/mongoose-os-libs/rpc-uart

  #IoT 
  - origin: https://github.com/mongoose-os-libs/adc
  - origin: https://github.com/mongoose-os-libs/mjs
  - origin: https://github.com/mongoose-os-libs/mqtt
  - origin: https://github.com/mongoose-os-libs/wifi
  - origin: https://github.com/mongoose-os-libs/gcp
  - origin: https://github.com/mongoose-os-libs/sntp

# Used by the mos tool to catch mos binaries incompatible with this file format
manifest_version: 2017-09-29

Чего мне не хватает?

Я запустил mos put full_path_to_key/ec_private.pem, чтобы отправить ключ на устройство, который работает только когда я излучаю строки GCP из моего "mos.yml". Нужно ли мне повторно отправлять ключ после восстановления и перепрошивки нового кода, включая строки GCP? Я также отправил загруженный файл сертификата root «roots.pem» (но фактически нигде не читал, что вы должны отправить этот файл на устройство).

Я также не уверен, что пути к ключу file (и файл roots.pem) должны быть полными на моем компьютере, или если они ссылаются на файлы на самом устройстве, и этого достаточно только с именем файла без пути. Однако ни одна из опций не работает.

В качестве примечания, я также получаю эту ошибку, даже без информации GCP в mos.yml, если это может иметь какое-либо отношение к ней:

M JS ошибка: не удалось запустить c файл "api_ aws. js": не удалось прочитать файл "api_ aws. js"

1 Ответ

1 голос
/ 26 марта 2020

Итак, оказалось, что мне не нужно было устанавливать всю эту информацию GCP в "mos.yml", но она была установлена ​​для меня при запуске

mos gcp-iot-setup --gcp-project YOUR_PROJECT_ID --gcp-region YOUR_REGION --gcp-registry YOUR_REGISTRY

Если я попытался выполнить эту команду с информацией о GCP в mos.yml у меня появилось сообщение об ошибке

Ошибка: запись / dev / ttyUSB0: файл уже закрыт

Поэтому мне пришлось удалить GCP info, затем запустите команду, и соединение было установлено!

Файл ключа был сгенерирован при выполнении вышеуказанной команды, поэтому нет необходимости передавать его на устройство. Файл корневого сертификата также, похоже, обрабатывается командой.

...