Risolvere i problemi

Questa sezione descrive i problemi comuni che potresti riscontrare quando utilizzi Cloud IoT Core.

  • Se il tuo dispositivo ha problemi a stabilire una connessione TLS al bridge MQTT Cloud IoT Core, il tuo ambiente potrebbe avere bisogno del certificato radice. Puoi installare il certificato radice di Google dal sito di Google Internet Authority.

Il mio dispositivo non riesce a connettersi al bridge MQTT

Il dispositivo tenta di connettersi al bridge MQTT, ma la connessione non riesce. Purtroppo il protocollo MQTT non consente report affidabili sugli errori, pertanto questi problemi possono essere difficili da eseguire.

  • Verifica di essere in grado di connetterti tramite SSL al bridge MQTT. Molti firewall aziendali bloccano la porta 8883. Puoi collaborare con il team IT interno per consentire l'accesso alla porta 8883 oppure puoi utilizzare la porta 443. Esegui uno dei seguenti comandi (a seconda della porta in uso) per testare la connessione TLS al bridge MQTT.

    openssl s_client -connect mqtt.googleapis.com:8883
    
    openssl s_client -connect mqtt.googleapis.com:443
    

    Se la connessione all'endpoint MQTT ha esito positivo, questo comando stampa la catena di certificati e le informazioni del certificato server. Rimarrà connesso e attenderà il input. Questo test conferma che sei in grado di stabilire una connessione TLS a Cloud IoT Core.

  • Verifica di avere installato i certificati radice di Google. Puoi scaricarli dal sito di Google Internet Authority.
  • Utilizza gcloud per controllare gli errori e verificare l'esistenza di dispositivi e registry. Se provi a connetterti con un ID dispositivo non valido, la connessione verrà chiusa immediatamente.

    gcloud iot registries describe REGISTRY_ID \
          --project=PROJECT_ID \
          --region=REGION
    
     gcloud iot devices describe DEVICE_ID \
          --project=PROJECT_ID \
          --region=REGION \
          --registry=REGISTRY_ID
    • Il comando devices describe potrebbe mostrare ulteriori messaggi di errore che possono essere utilizzati per eseguire il debug.
  • Verifica che le credenziali del tuo dispositivo non siano scadute utilizzando il comando devices describe. Se le credenziali non sono impostate, non scadranno mai.

  • Controlla la rivendicazione exp sul JWT che utilizzi per autenticare il tuo dispositivo. La durata massima di un token è 24 ore. Per maggiori dettagli, consulta la sezione Utilizzare i token web JSON.

  • Verifica che l'orologio del dispositivo sia corretto. L'orologio del tuo dispositivo determina quando connettersi al client MQTT e pubblicare i dati dei sensori, quindi tutti i dispositivi nella rete devono essere sincronizzati con il server MQTT. I client possono utilizzare il Google Public NTP Server per sincronizzare gli orologi dei dispositivi con il fuso orario UTC (Coordinated Universal Time).

Il mio dispositivo è disconnesso dal bridge MQTT

Il tuo dispositivo è in grado di connettersi al bridge MQTT, ma si disconnette immediatamente o inaspettatamente. Tieni presente che sono previste disconnessioni molto occasionali in quanto i server vengono aggiornati e bilanciati.

  • Controlla lo stato di errore più recente del dispositivo. Utilizza il comando gcloud riportato di seguito per esaminare lo stato e il messaggio di errore più recenti di un dispositivo. Assicurati di annotare il timestamp; questo campo non è cancellato e potrebbe fare riferimento a un errore precedente.

    gcloud iot devices describe DEVICE_ID \
      --project=PROJECT_ID \
      --region=REGION \
      --registry=REGISTRY_ID
    
  • Esegui i passaggi descritti nella sezione precedente per assicurarti che il dispositivo possa connettersi.

  • Se il dispositivo si disconnette subito dopo la connessione, verifica che la libreria client MQTT utilizzi MQTT 3.1.1. Molte librerie utilizzano per impostazione predefinita MQTT 3.1, che non è supportato da Cloud IoT Core e comporta la disconnessione immediata del dispositivo. La versione è generalmente impostata nelle opzioni del client della libreria MQTT quando si connette per la prima volta.

    • Ad esempio, se utilizzi il client Paho Java, dovrai chiamare connectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
  • Se il dispositivo si disconnette subito dopo aver inviato i dati di telemetria, verifica di aver creato un argomento Cloud Pub/Sub per la telemetria del dispositivo con le autorizzazioni corrette impostate. Consulta I'm non riceve i dati di telemetria su Cloud Pub/Sub.

  • Controlla la rivendicazione exp sul JWT che utilizzi per autenticare il tuo dispositivo. La durata massima di un token è 24 ore. Per maggiori dettagli, consulta la sezione Utilizzare i token web JSON. Dopo la scadenza di JWT, il dispositivo verrà scollegato e dovrà essere ricollegato. Si tratta di un comportamento previsto; il dispositivo dovrebbe creare un nuovo JWT e riconnettersi.

  • Il bridge MQTT consente solo una singola connessione per un determinato ID dispositivo. Se un secondo dispositivo si connette con l'ID di un dispositivo già connesso, la connessione precedente del dispositivo verrà chiusa automaticamente.

  • Verifica che il dispositivo stia battendo il battito cardiaco con una frequenza sufficiente. Le librerie client di MQTT consentono all'utente di specificare un heartbeat_interval e il dispositivo si disconnetterà se il bridge MQTT non riceverà un messaggio dal dispositivo in 1, 5 volte di tempo. Molte librerie client inviano automaticamente un messaggio vuoto se non è stato inviato nessun altro messaggio (un messaggio MQTT PINGREQ), tuttavia potrebbe non funzionare automaticamente. Inoltre, puoi provare ad aumentare il heartbeat_interval nella configurazione del client MQTT per assicurarti che il tuo dispositivo sia in grado di tenere il passo.

I{/3} non riceve dati di telemetria su Cloud Pub/Sub

Il dispositivo è connesso e pubblica messaggi nel bridge MQTT; tuttavia, non li ricevi nell'argomento Cloud Pub/Sub. Questo di solito significa che Cloud Pub/Sub non è configurato correttamente o non ha superato la quota.

  • Utilizza le sezioni precedenti per verificare che il dispositivo sia in grado di connettersi e che non venga scollegato. Le librerie client forniscono connessioni di disconnessione e disconnessione; utilizzale per assicurarti che il dispositivo si connetta correttamente.

  • Nella pagina IAM in Google Cloud Console, verifica che il ruolo Agente di servizio principale di Cloud IoT venga visualizzato nell'elenco Membri per l'account di servizio del progetto pertinente. Cerca l'account di servizio del progetto che termina con @gcp-sa-cloudiot.iam.gserviceaccount.com.

    Se il ruolo Agente di servizio principale di Cloud IoT non compare nell'elenco Membri, utilizza gcloud per aggiungere il ruolo cloudiot.serviceAgent all'account di servizio di progetto pertinente. Questo ruolo include l'autorizzazione per pubblicare su argomenti Pub/Sub.

    Per trovare PROJECT_ID e PROJECT_NUMBER, consulta questo articolo del Centro assistenza.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent
    
  • Verifica che gli argomenti configurati per il Registro di sistema siano corretti:

    gcloud iot registries describe REGISTRY_ID \
      --project=PROJECT_ID \
      --region=REGION
    
  • Verifica di aver creato una sottoscrizione per gli argomenti per la telemetria del dispositivo. Cloud Pub/Sub conserverà un messaggio fino a quando tutte le sottoscrizioni non lo avranno confermato, ma se non ci sono sottoscrittori, il messaggio non verrà mantenuto.

    • Per elencare le iscrizioni:

      gcloud pubsub topics list-subscriptions \
         projects/my-iot-project/topics/TOPIC_NAME
    • Per creare una sottoscrizione per un argomento:

      gcloud pubsub subscriptions create \
         projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME \
         --topic TOPIC_NAME
      
  • Controlla se sei in grado di estrarre i messaggi dalla tua sottoscrizione tramite gcloud. Se sei in grado di recuperarle, ma non le ricevi nel software client Pub/Sub, è possibile che il software client sia configurato in modo errato.

    gcloud pubsub subscriptions pull \
       projects/my-iot-project/subscriptions/SUBSCRIPTION_NAME
    
  • Se hai configurato il registro dispositivi per avere più argomenti Pub/Sub, verifica che siano soddisfatte le seguenti condizioni:

    • La sottocartella HTTP o MQTT in cui stai pubblicando i dati di telemetria ha un argomento Pub/Sub corrispondente

    • Il registro dispositivi dispone di un argomento Pub/Sub predefinito

    L'argomento Pub/Sub predefinito verrà utilizzato per gli eventi di telemetria pubblicati che non hanno una sottocartella o se la sottocartella specificata non ha un argomento corrispondente. Se non selezioni un argomento Pub/Sub predefinito, questi eventi di telemetria andranno persi.

    Quando crei un registro dispositivi, devi aggiungere un argomento Pub/Sub predefinito. Se non lo hai fatto, puoi aggiungerne uno utilizzando Google Cloud Console, il comando gcloud iot registries update o il metodo patchRegistry patch. Per rendere il nuovo argomento Pub/Sub predefinito per il registro dispositivi, non specificare una sottocartella quando aggiungi l'argomento.

Ricevo vecchi dati di telemetria da Cloud Pub/Sub

Puoi ricevere eventi di telemetria da Cloud Pub/Sub, ma il tuo abbonato riceve eventi precedenti. Questo accade quando Cloud Pub/Sub crea un backlog. Cloud Pub/Sub garantisce che ogni messaggio venga recapitato almeno una volta a ogni sottoscrizione per un argomento e, se i sottoscrittori non consumano i messaggi o li riconoscono, verranno riConsegnati. Ciò può verificarsi se l'abbonato non è in esecuzione o sta elaborando i messaggi troppo lentamente.

  • Verifica che il tuo sottoscrittore Cloud Pub/Sub accetti i messaggi che ha elaborato.
  • Se il tuo abbonato è rimasto indietro, puoi cancellare il backlog eliminando l'abbonato e ricreandolo.

Altri problemi di Cloud Pub/Sub

Consulta la documentazione di Cloud Pub/Sub.