Controllo dell'hub - Integrazioni gestite per AWS IoT Device Management

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Controllo dell'hub

Hub control è un'estensione delle integrazioni gestite End device SDK che gli consente di interfacciarsi con il MQTTProxy componente dell'Hub SDK. Con Hub Control, puoi implementare il codice utilizzando l'SDK del dispositivo finale e controllare l'hub tramite il cloud delle integrazioni gestite come dispositivo separato. L'hub control SDK verrà fornito come pacchetto separato all'interno dell'Hub SDK, etichettato come. iot-managed-integrations-hub-control-x.x.x

Prerequisiti

Per configurare Hub Control, è necessario quanto segue:

  • Un hub integrato nell'Hub SDK, versione 0.4.0 o successiva.

  • Scarica la versione più recente dell'SDK per dispositivi finali dal. Console di gestione AWS

  • Un componente proxy MQTT in esecuzione sull'hub, versione 0.5.0 o successiva.

Componenti SDK del dispositivo finale

Utilizza i seguenti componenti dell'SDK del dispositivo finale:

  • Generatore di codice per il modello di dati

  • Gestore del modello di dati

Poiché Hub SDK dispone già di un processo di onboarding e di una connessione al cloud, non sono necessari i seguenti componenti:

  • Fornitore

  • Interfaccia PKCS

  • Gestore dei lavori

  • Agente MQTT

Integrazione con l'SDK del dispositivo finale

  1. Segui le istruzioni in Code generator for Data Model per generare il codice C di basso livello.

  2. Segui le istruzioni riportate in Integrazione dell'SDK del dispositivo finale per:

    1. Configura l'ambiente di compilazione

      Crea il codice su Amazon Linux 2023/x86_64 come host di sviluppo. Installa le dipendenze di compilazione necessarie:

      dnf install make gcc gcc-c++ cmake
    2. Sviluppa funzioni di callback hardware

      Prima di implementare le funzioni di callback hardware, scopri come funziona l'API. Questo esempio utilizza il On/Off cluster e l' OnOff attributo per controllare una funzione del dispositivo. Per i dettagli sull'API, consultaFunzione C di basso livello 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. Configura gli endpoint e aggancia le funzioni di callback hardware

      Dopo aver implementato le funzioni, crea gli endpoint e registra i callback. Completa queste attività:

      1. Crea un agente del dispositivo

      2. Riempi i punti della funzione di callback per ogni struttura del cluster che desideri supportare

      3. Configura gli endpoint e registra i cluster supportati

      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); }

Esempio: Build Hub Control

Il controllo dell'hub è fornito come parte del pacchetto Hub SDK. Il sottopacchetto Hub Control è etichettato con iot-managed-integrations-hub-control-x.x.x e contiene librerie diverse rispetto all'SDK del dispositivo non modificato.

  1. Sposta i file generati dal codice nella cartella: example

    cp codegen/out/* example/dm
  2. Per creare il controllo dell'hub, esegui i seguenti comandi:

    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. Esegui gli esempi con il MQTTProxy componente sull'hub, con i MQTTProxy componenti HubOnboarding e in esecuzione.

    ./examples/iotmi_device_sample_camera/iotmi_device_sample_camera

Vedi Modello di dati di integrazioni gestite per il modello di dati. Segui il Passaggio 5 Inizia a usare End device SDK per configurare gli endpoint e gestire le comunicazioni tra l'utente finale e. iot-managed-integrations

Esempi supportati

I seguenti esempi sono stati creati e testati:

  • iotmi_device_dm_air_purifier_demo

  • iotmi_device_basic_diagnostica

  • iotmi_device_dm_camera_demo

Piattaforme supportate

La tabella seguente mostra le piattaforme supportate per il controllo dell'hub.

Architettura Sistema operativo Versione GCC Versione Binutils

X86_64

Linux

10.5.0

2,37

aarch64

Linux

10,5,0

2,37