Controle do hub - Integrações gerenciadas para AWS IoT Device Management

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Controle do hub

O controle do Hub é uma extensão do SDK do dispositivo final de integrações gerenciadas que permite a interface com o MQTTProxy componente no SDK do Hub. Com o controle de hub, você pode implementar código usando o SDK do dispositivo final e controlar seu hub por meio da nuvem de integrações gerenciadas como um dispositivo separado. O SDK de controle do hub será fornecido como um pacote separado dentro do SDK do Hub, rotulado como. iot-managed-integrations-hub-control-x.x.x

Pré-requisitos

Para configurar o controle do hub, você precisa do seguinte:

  • Um hub integrado ao Hub SDK, versão 0.4.0 ou superior.

  • Baixe a versão mais recente do SDK do dispositivo final no Console de gerenciamento da AWS.

  • Um componente proxy MQTT em execução no hub, versão 0.5.0 ou superior.

Componentes do SDK do dispositivo final

Use os seguintes componentes do SDK do dispositivo final:

  • Gerador de código para o modelo de dados

  • Manipulador de modelos de dados

Como o Hub SDK já tem um processo de integração e uma conexão com a nuvem, você não precisa dos seguintes componentes:

  • Provisionado

  • Interface PKCS

  • Manipulador de trabalhos

  • Agente MQTT

Integre com o SDK do dispositivo final

  1. Siga as instruções no Gerador de código para modelo de dados para gerar o código C de baixo nível.

  2. Siga as instruções em Integração do SDK do dispositivo final para:

    1. Configurar o ambiente de construção

      Crie o código no Amazon Linux 2023/x86_64 como seu host de desenvolvimento. Instale as dependências de compilação necessárias:

      dnf install make gcc gcc-c++ cmake
    2. Desenvolva funções de retorno de chamada de hardware

      Antes de implementar as funções de retorno de chamada do hardware, entenda como a API funciona. Este exemplo usa o On/Off cluster e o OnOff atributo para controlar a função de um dispositivo. Para obter detalhes da API, consulteFunção C de baixo nível APIs.

      struct DeviceState { struct iotmiDev_Agent *agent; struct iotmiDev_Endpoint *endpointLight; /* This simulates the HW state of OnOff */ bool hwState; }; /* This implementation for OnOff getter just reads the state from the DeviceState */ iotmiDev_DMStatus exampleGetOnOff(bool *value, void *user) { struct DeviceState *state = (struct DeviceState *)(user); *value = state->hwState; return iotmiDev_DMStatusOk; }
    3. Configure endpoints e conecte funções de retorno de chamada de hardware

      Depois de implementar as funções, crie endpoints e registre seus retornos de chamada. Conclua estas tarefas:

      1. Crie um agente de dispositivo

      2. Preencha os pontos de função de retorno de chamada para cada estrutura de cluster que você deseja suportar

      3. Configure endpoints e registre clusters compatíveis

      struct DeviceState { struct iotmiDev_Agent * agent; struct iotmiDev_Endpoint *endpoint1; /* OnOff cluster states*/ bool hwState; }; /* This implementation for OnOff getter just reads the state from the DeviceState */ iotmiDev_DMStatus exampleGetOnOff( bool * value, void * user ) { struct DeviceState * state = ( struct DeviceState * ) ( user ); *value = state->hwState; printf( "%s(): state->hwState: %d\n", __func__, state->hwState ); return iotmiDev_DMStatusOk; } iotmiDev_DMStatus exampleGetOnTime( uint16_t * value, void * user ) { *value = 0; printf( "%s(): OnTime is %u\n", __func__, *value ); return iotmiDev_DMStatusOk; } iotmiDev_DMStatus exampleGetStartUpOnOff( iotmiDev_OnOff_StartUpOnOffEnum * value, void * user ) { *value = iotmiDev_OnOff_StartUpOnOffEnum_Off; printf( "%s(): StartUpOnOff is %d\n", __func__, *value ); return iotmiDev_DMStatusOk; } void setupOnOff( struct DeviceState *state ) { struct iotmiDev_clusterOnOff clusterOnOff = { .getOnOff = exampleGetOnOff, .getOnTime = exampleGetOnTime, .getStartUpOnOff = exampleGetStartUpOnOff, }; iotmiDev_OnOffRegisterCluster( state->endpoint1, &clusterOnOff, ( void * ) state); } /* Here is the sample setting up an endpoint 1 with OnOff cluster. Note all error handling code is omitted. */ void setupAgent(struct DeviceState *state) { struct iotmiDev_Agent_Config config = { .thingId = IOTMI_DEVICE_MANAGED_THING_ID, .clientId = IOTMI_DEVICE_CLIENT_ID, }; iotmiDev_Agent_InitDefaultConfig(&config); /* Create a device agent before calling other SDK APIs */ state->agent = iotmiDev_Agent_new(&config); /* Create endpoint#1 */ state->endpoint1 = iotmiDev_Agent_addEndpoint( state->agent, 1, "Data Model Handler Test Device", (const char*[]){ "Camera" }, 1 ); setupOnOff(state); }

Exemplo: controle de hub de construção

O controle do hub é fornecido como parte do pacote Hub SDK. O subpacote de controle do hub é rotulado iot-managed-integrations-hub-control-x.x.x e contém bibliotecas diferentes do SDK do dispositivo não modificado.

  1. Mova os arquivos gerados pelo código para a example pasta:

    cp codegen/out/* example/dm
  2. Para criar o controle do hub, execute os seguintes comandos:

    cd <hub-control-root-folder>
    mkdir build
    cd build
    cmake -DBUILD_EXAMPLE_WITH_MQTT_PROXY=ON -DIOTMI_USE_MANAGED_INTEGRATIONS_DEVICE_LOG=ON ..
    cmake -build .
  3. Execute os exemplos com o MQTTProxy componente no hub, com os MQTTProxy componentes HubOnboarding e em execução.

    ./examples/iotmi_device_sample_camera/iotmi_device_sample_camera

Consulte Modelo de dados de integrações gerenciadas o modelo de dados. Siga a Etapa 5 Comece a usar o SDK do dispositivo final para configurar endpoints e gerenciar as comunicações entre o usuário final e. iot-managed-integrations

Exemplos compatíveis

Os exemplos a seguir foram criados e testados:

  • iotmi_device_dm_purificador_demo

  • diagnóstico básico do dispositivo iotmi

  • iotmi_device_dm_camera_demo

Plataformas compatíveis

A tabela a seguir mostra as plataformas suportadas para o controle do hub.

Arquitetura Sistema operacional Versão GCC Versão Binutils

X86_64

Linux

10.5.0

2,37

aarch64

Linux

10.5.0

2,37