Google Cloud IoT Core verrà ritirato il 16 agosto 2023. Per saperne di più, contatta il team dedicato al tuo account Google Cloud.

Risolvere i problemi

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

  • Se il dispositivo ha problemi a stabilire una connessione TLS al bridge MQTT di Cloud IoT Core, il tuo ambiente potrebbe richiedere il 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 tuo dispositivo tenta di connettersi al bridge MQTT, ma la connessione non riesce. Purtroppo, il protocollo MQTT non consente report affidabili sugli errori, quindi questi problemi possono essere difficili da eseguire per il debug.

  • Assicurati di poter collegarti tramite SSL al bridge MQTT. Molti firewall aziendali bloccano la porta 8883. Puoi collaborare con il tuo 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 utilizzata) 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 del server. Rimarrà connesso e attenderà l'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 dei tuoi dispositivi e registri. 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 il debug.
  • Verifica che le credenziali del dispositivo non siano scadute utilizzando il comando devices describe. Se per le credenziali non è stata impostata alcuna scadenza, non scadranno mai.

  • Controlla la rivendicazione exp sul JWT che utilizzi per autenticare il tuo dispositivo. La durata massima di un token è di 24 ore. Per informazioni dettagliate, vedi Utilizzo di token web JSON.

  • Verifica che l'orologio del dispositivo sia corretto. L'orologio del dispositivo determina quando connettersi al client MQTT e pubblicare i dati del sensore, quindi tutti i dispositivi nella rete devono essere sincronizzati con il server MQTT. I client possono utilizzare il server pubblico NTP di Google per sincronizzare gli orologi del dispositivo con l'ora 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 con l'aggiornamento dei server e il bilanciamento del carico.

  • Controlla lo stato di errore più recente del dispositivo. Utilizza il comando gcloud 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 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 comporterà la disconnessione immediata del dispositivo. La versione è in genere impostata nelle opzioni client della libreria MQTT durante la connessione iniziale.

    • Ad esempio, se utilizzi il client Java di Paho, 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 appropriate impostate. Consulta la sezione Non ricevo 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 è di 24 ore. Per informazioni dettagliate, vedi Utilizzo di token web JSON. Alla scadenza di JWT, il dispositivo viene disconnesso e dovrà riconnettersi. 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 al dispositivo meno recente verrà chiusa automaticamente.

  • Verifica che il tuo dispositivo stia battendo il cuore abbastanza spesso. Le librerie client MQTT consentono all'utente di specificare un Heartbeat_interval e il dispositivo verrà disconnesso se il bridge MQTT non riceve un messaggio dal dispositivo in 1, 5 volte quel periodo di tempo. Molte librerie client inviano automaticamente un messaggio vuoto se non è stato inviato nessun altro messaggio (un messaggio MQTT PINGREQ); tuttavia, la libreria client potrebbe non eseguire questa operazione automaticamente. Inoltre, puoi provare ad aumentare Heartbeat_interval nella configurazione del client MQTT per assicurarti che il dispositivo riesca a tenere il passo.

Non ricevo dati di telemetria su Cloud Pub/Sub

Il dispositivo è connesso e sta pubblicando messaggi sul bridge MQTT; tuttavia, non li ricevi nell'argomento Cloud Pub/Sub. Questo di solito significa che Cloud Pub/Sub è configurato in modo errato o non rientra nella quota.

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

  • Nella pagina IAM di Google Cloud Console, verifica che il ruolo Agente di servizio Cloud IoT Core sia 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 Cloud IoT non viene visualizzato nell'elenco Membri, utilizza il ruolo di gcloud per aggiungere l'account di servizio cloudiot.serviceAgent a Questo ruolo include l'autorizzazione per la pubblicazione in argomenti Pub/Sub.

    Per informazioni su 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 tuo registro siano corretti:

    gcloud iot registries describe REGISTRY_ID \
      --project=PROJECT_ID \
      --region=REGION
    
  • Verifica di aver creato un abbonamento per i tuoi argomenti per la telemetria del dispositivo. Un messaggio Cloud Pub/Sub viene mantenuto fino a quando tutte le sottoscrizioni non lo hanno confermato; tuttavia, se non sono presenti iscritti, 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 riesci a estrarre i messaggi dalla tua sottoscrizione tramite gcloud. Se riesci a estrarli, ma non li ricevi nel tuo software client Pub/Sub, è possibile che il software 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:

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

    • Il registro dispositivi ha 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 verranno persi.

    Quando crei un registro dispositivi, devi aggiungere un argomento Pub/Sub predefinito. In caso contrario, puoi aggiungerne uno utilizzando Google Cloud Console, il comando gcloud iot registries update o il metodo DeviceRegistry patch. Per impostare il nuovo argomento Pub/Sub come predefinito per il registro di 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 sta ricevendo i vecchi eventi. Questo accade quando Cloud Pub/Sub crea un backlog. Cloud Pub/Sub garantisce che recapiti ogni messaggio almeno una volta per ogni sottoscrizione per un argomento e che, se i sottoscrittori non consumano messaggi o non li accettano, verranno ricaricati. Questo può accadere 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 utente è rimasto indietro, puoi cancellare il backlog eliminando l'abbonato e ricreandolo.

Altri problemi con Cloud Pub/Sub

Fai riferimento alla documentazione di Cloud Pub/Sub.