From 0f125f4d4ef6e289cd7c5166a9b746dc7907dec8 Mon Sep 17 00:00:00 2001 From: Markus Tacker Date: Fri, 22 Mar 2024 10:10:25 +0100 Subject: [PATCH] fix(nrplus): gateway now scans on its own --- cdk/BackendLambdas.d.ts | 1 - cdk/backend.ts | 1 - cdk/resources/NRPlusGateway.ts | 43 ---------------------------------- lambda/nrplusGatewayScan.ts | 37 ----------------------------- 4 files changed, 82 deletions(-) delete mode 100644 lambda/nrplusGatewayScan.ts diff --git a/cdk/BackendLambdas.d.ts b/cdk/BackendLambdas.d.ts index a9ddd1a..47b4244 100644 --- a/cdk/BackendLambdas.d.ts +++ b/cdk/BackendLambdas.d.ts @@ -11,7 +11,6 @@ type BackendLambdas = { onNewNetworkSurvey: PackedLambda onNetworkSurveyLocated: PackedLambda parseSinkMessages: PackedLambda - nrplusGatewayScan: PackedLambda updatesToLwM2M: PackedLambda publishLwM2MShadowsToJSON: PackedLambda memfault: PackedLambda diff --git a/cdk/backend.ts b/cdk/backend.ts index 02cea67..22ad53f 100644 --- a/cdk/backend.ts +++ b/cdk/backend.ts @@ -51,7 +51,6 @@ new BackendApp({ onNewNetworkSurvey: await pack('onNewNetworkSurvey'), onNetworkSurveyLocated: await pack('onNetworkSurveyLocated'), parseSinkMessages: await pack('parseSinkMessages'), - nrplusGatewayScan: await pack('nrplusGatewayScan'), updatesToLwM2M: await pack('updatesToLwM2M'), memfault: await pack('memfault'), memfaultPollForReboots: await pack('memfaultPollForReboots'), diff --git a/cdk/resources/NRPlusGateway.ts b/cdk/resources/NRPlusGateway.ts index a86e1e0..85923c0 100644 --- a/cdk/resources/NRPlusGateway.ts +++ b/cdk/resources/NRPlusGateway.ts @@ -1,7 +1,5 @@ import { Duration, Stack } from 'aws-cdk-lib' import IAM from 'aws-cdk-lib/aws-iam' -import Events from 'aws-cdk-lib/aws-events' -import EventsTargets from 'aws-cdk-lib/aws-events-targets' import Iot from 'aws-cdk-lib/aws-iot' import Kinesis, { StreamMode } from 'aws-cdk-lib/aws-kinesis' import Lambda, { StartingPosition } from 'aws-cdk-lib/aws-lambda' @@ -18,7 +16,6 @@ export class NRPlusGateway extends Construct { }: { lambdaSources: { parseSinkMessages: PackedLambda - nrplusGatewayScan: PackedLambda } }, ) { @@ -108,45 +105,5 @@ export class NRPlusGateway extends Construct { parallelizationFactor: 1, }), ) - - // Trigger scan message periodically - const nrplusGatewayScanFn = new Lambda.Function( - this, - 'nrplusGatewayScanFn', - { - handler: lambdaSources.nrplusGatewayScan.handler, - architecture: Lambda.Architecture.ARM_64, - runtime: Lambda.Runtime.NODEJS_20_X, - timeout: Duration.minutes(15), - memorySize: 1792, - code: Lambda.Code.fromAsset( - lambdaSources.nrplusGatewayScan.lambdaZipFile, - ), - description: - 'Periodically trigger scan in sink to sync with relay, required to communicate reliably with relay and relay-connected clients', - environment: { - VERSION: this.node.tryGetContext('version'), - }, - initialPolicy: [ - new IAM.PolicyStatement({ - actions: ['iot:ListThings', 'iot:Publish'], - resources: ['*'], - }), - ], - ...new LambdaLogGroup(this, 'nrplusGatewayScanFnLogs'), - }, - ) - - const rule = new Events.Rule(this, 'Rule', { - schedule: Events.Schedule.expression('rate(1 minute)'), - description: `Invoke the summary lambda`, - enabled: true, - targets: [new EventsTargets.LambdaFunction(nrplusGatewayScanFn)], - }) - - nrplusGatewayScanFn.addPermission('InvokeByEvents', { - principal: new IAM.ServicePrincipal('events.amazonaws.com'), - sourceArn: rule.ruleArn, - }) } } diff --git a/lambda/nrplusGatewayScan.ts b/lambda/nrplusGatewayScan.ts deleted file mode 100644 index d9b2980..0000000 --- a/lambda/nrplusGatewayScan.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { IoTClient, ListThingsCommand } from '@aws-sdk/client-iot' -import { - IoTDataPlaneClient, - PublishCommand, -} from '@aws-sdk/client-iot-data-plane' - -const iot = new IoTClient({}) -const iotData = new IoTDataPlaneClient({}) - -const thingsPromise = iot.send( - new ListThingsCommand({ - thingTypeName: 'nrplus-gateway', - }), -) - -/** - * Periodically trigger scan in sink to sync with relay, - * required to communicate reliably with relay and relay-connected clients - */ -export const handler = async (): Promise => { - const { things: gateways } = await thingsPromise - - await Promise.all( - (gateways ?? []).map(async ({ thingName, attributes }) => { - const topic = `${thingName}/nrplus-ctrl` - const scanCommand = `dect beacon_scan -c ${attributes?.channel ?? '1697'} -f -t 2` - console.log(`>`, topic, JSON.stringify(scanCommand)) - return iotData.send( - new PublishCommand({ - topic, - payload: Buffer.from(scanCommand, 'utf-8'), - qos: 1, - }), - ) - }), - ) -}