diff --git a/cli/commands/create-fake-nrfcloud-health-check-device.ts b/cli/commands/create-fake-nrfcloud-health-check-device.ts index 7e466f3ba..11f607b11 100644 --- a/cli/commands/create-fake-nrfcloud-health-check-device.ts +++ b/cli/commands/create-fake-nrfcloud-health-check-device.ts @@ -5,6 +5,7 @@ import { } from '@aws-sdk/client-iot' import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm' import chalk from 'chalk' +import { randomUUID } from 'node:crypto' import { STACK_NAME } from '../../cdk/stacks/stackConfig.js' import { updateSettings, @@ -22,6 +23,8 @@ export const createFakeNrfCloudHealthCheckDevice = ({ }): CommandDefinition => ({ command: 'create-fake-nrfcloud-health-check-device', action: async () => { + const deviceId = `health-check-${randomUUID()}` + const fakeTenantParameter = `/${STACK_NAME}/fakeTenant` const tenantId = ( await ssm.send( @@ -62,7 +65,7 @@ export const createFakeNrfCloudHealthCheckDevice = ({ const settings: Settings = { healthCheckClientCert: credentials.certificatePem, healthCheckPrivateKey: pk, - healthCheckClientId: 'health-check', + healthCheckClientId: deviceId, healthCheckModel: 'PCA20035+solar', healthCheckFingerPrint: '29a.ch3ckr', } diff --git a/cli/commands/create-health-check-device.ts b/cli/commands/create-health-check-device.ts index aebf71819..6d199ec7b 100644 --- a/cli/commands/create-health-check-device.ts +++ b/cli/commands/create-health-check-device.ts @@ -1,6 +1,7 @@ import { SSMClient } from '@aws-sdk/client-ssm' import type { Environment } from 'aws-cdk-lib' import chalk from 'chalk' +import { randomUUID } from 'node:crypto' import { readFile } from 'node:fs/promises' import path from 'node:path' import { apiClient } from '../../nrfcloud/apiClient.js' @@ -44,7 +45,7 @@ export const createHealthCheckDevice = ({ chalk.blue(caCertificates.certificate), ) - const deviceId = `health-check` + const deviceId = `health-check-${randomUUID()}` console.log(chalk.yellow('Device ID:'), chalk.blue(deviceId)) // Device private key @@ -114,7 +115,7 @@ export const createHealthCheckDevice = ({ path.join(deviceCertificates.privateKey), 'utf-8', ), - healthCheckClientId: 'health-check', + healthCheckClientId: deviceId, healthCheckModel: 'PCA20035+solar', healthCheckFingerPrint: '29a.ch3ckr', } diff --git a/lambda/healthCheck.ts b/lambda/healthCheck.ts index 59188c4ee..9339e9a1e 100644 --- a/lambda/healthCheck.ts +++ b/lambda/healthCheck.ts @@ -91,22 +91,26 @@ const publishDeviceMessage = key: devicePrivateKey, cert: deviceCert, ca: amazonRootCA1, + connectTimeout: 5000, }) - mqttClient.on('connect', () => { - const topic = `${nrfCloudSettings.mqttTopicPrefix}m/d/${deviceId}/d2c` - log.debug('mqtt publish', { mqttMessage: message, topic }) - mqttClient.publish(topic, JSON.stringify(message), (error) => { - if (error) return reject(error) - mqttClient.end() - return resolve() + mqttClient + .on('connect', () => { + const topic = `${nrfCloudSettings.mqttTopicPrefix}m/d/${deviceId}/d2c` + log.debug('mqtt publish', { mqttMessage: message, topic }) + mqttClient.publish(topic, JSON.stringify(message), (error) => { + if (error !== undefined) return reject(error) + mqttClient.end() + return resolve() + }) + }) + .on('error', (error) => { + log.error(`mqtt error`, { error }) + reject(error) + }) + .on('reconnect', () => { + log.debug(`mqtt reconnect`) }) - }) - - mqttClient.on('error', (error) => { - log.error(`mqtt error`, { error }) - reject(error) - }) await promise }