Skip to content

Commit c43e461

Browse files
Merge branch 'stage' into master for release
2 parents 5cfa8ee + eb5f0f2 commit c43e461

File tree

3 files changed

+28
-26
lines changed

3 files changed

+28
-26
lines changed

src/modules/open-data-dk-sharing.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import { OpenDataDkSharingService } from "@services/data-management/open-data-dk
44
import { SharedModule } from "@modules/shared.module";
55
import { OrganizationModule } from "@modules/user-management/organization.module";
66
import { PayloadDecoderExecutorModuleModule } from "@modules/payload-decoder-executor-module.module";
7+
import { ChirpstackAdministrationModule } from "@modules/device-integrations/chirpstack-administration.module";
78

89
@Module({
9-
imports: [SharedModule, OrganizationModule, PayloadDecoderExecutorModuleModule],
10+
imports: [SharedModule, OrganizationModule, PayloadDecoderExecutorModuleModule, ChirpstackAdministrationModule],
1011
controllers: [OpenDataDkSharingController],
1112
providers: [OpenDataDkSharingService],
1213
})

src/services/data-management/open-data-dk-sharing.service.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ import { IoTDevice } from "@entities/iot-device.entity";
1212
import configuration from "@config/configuration";
1313
import { OpenDataDkSharingController } from "@admin-controller/open-data-dk-sharing.controller";
1414
import { ErrorCodes } from "@enum/error-codes.enum";
15+
import { IoTDeviceType } from "@enum/device-type.enum";
16+
import { ChirpstackDeviceService } from "@services/chirpstack/chirpstack-device.service";
1517

1618
@Injectable()
1719
export class OpenDataDkSharingService {
1820
constructor(
1921
@InjectRepository(OpenDataDkDataset)
2022
private repository: Repository<OpenDataDkDataset>,
21-
private payloadDecoderExecutorService: PayloadDecoderExecutorService
23+
private payloadDecoderExecutorService: PayloadDecoderExecutorService,
24+
private chirpstackDeviceService: ChirpstackDeviceService
2225
) {}
2326

2427
private readonly BACKEND_BASE_URL = configuration()["backend"]["baseurl"];
@@ -40,18 +43,17 @@ export class OpenDataDkSharingService {
4043
return { error: ErrorCodes.NoData };
4144
}
4245

43-
return this.decodeData(rawData);
46+
return await this.decodeData(rawData);
4447
}
4548

46-
private decodeData(rawData: OpenDataDkDataset) {
47-
// TODO: Do this in parallel
49+
private async decodeData(rawData: OpenDataDkDataset) {
4850
const results: any[] = [];
49-
rawData.dataTarget.connections.forEach(connection => {
51+
for (const connection of rawData.dataTarget.connections) {
5052
this.logger.debug(`Got connection(${connection.id})`);
51-
connection.iotDevices.forEach(async device => {
53+
for (const device of connection.iotDevices) {
5254
await this.decodeDevice(device, connection, results);
53-
});
54-
});
55+
}
56+
}
5557
return results;
5658
}
5759

@@ -67,6 +69,14 @@ export class OpenDataDkSharingService {
6769
}
6870
try {
6971
if (connection.payloadDecoder != null) {
72+
// Enrich lorawan devices with chirpstack data
73+
if (
74+
device.type === IoTDeviceType.LoRaWAN &&
75+
connection.payloadDecoder.decodingFunction.includes("lorawanSettings")
76+
) {
77+
device = await this.chirpstackDeviceService.enrichLoRaWANDevice(device);
78+
}
79+
7080
const decoded = await this.payloadDecoderExecutorService.callUntrustedCode(
7181
connection.payloadDecoder.decodingFunction,
7282
device,

src/services/data-targets/data-target-kafka-listener.service.ts

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,16 @@ export class DataTargetKafkaListenerService extends AbstractKafkaConsumer {
4444
try {
4545
iotDevice = await this.ioTDeviceService.findOne(dto.iotDeviceId);
4646
} catch (err) {
47-
this.logger.error(
48-
`Error finding IoTDevice by id: ${dto.iotDeviceId}. Stopping.`
49-
);
47+
this.logger.error(`Error finding IoTDevice by id: ${dto.iotDeviceId}. Stopping.`);
5048
return;
5149
}
5250

53-
this.logger.debug(
54-
`Sending payload from deviceId: ${iotDevice.id}; Name: '${iotDevice.name}'`
55-
);
51+
this.logger.debug(`Sending payload from deviceId: ${iotDevice.id}; Name: '${iotDevice.name}'`);
5652

5753
await this.findDataTargetsAndSend(iotDevice, dto);
5854
}
5955

60-
private async findDataTargetsAndSend(
61-
iotDevice: IoTDevice,
62-
dto: TransformedPayloadDto
63-
) {
56+
private async findDataTargetsAndSend(iotDevice: IoTDevice, dto: TransformedPayloadDto) {
6457
// Get connections in order to only send to the dataTargets which is identified by the pair of IoTDevice and PayloadDecoder
6558
const dataTargets = await this.dataTargetService.findDataTargetsByConnectionPayloadDecoderAndIoTDevice(
6659
iotDevice.id,
@@ -79,13 +72,9 @@ export class DataTargetKafkaListenerService extends AbstractKafkaConsumer {
7972
if (target.type == DataTargetType.HttpPush) {
8073
try {
8174
const status = await this.httpPushDataTargetService.send(target, dto);
82-
this.logger.debug(
83-
`Sent to HttpPush target: ${JSON.stringify(status)}`
84-
);
75+
this.logger.debug(`Sent to HttpPush target: ${JSON.stringify(status)}`);
8576
} catch (err) {
86-
this.logger.error(
87-
`Error while sending to Http Push DataTarget: ${err}`
88-
);
77+
this.logger.error(`Error while sending to Http Push DataTarget: ${err}`);
8978
}
9079
} else if (target.type == DataTargetType.Fiware) {
9180
try {
@@ -100,8 +89,10 @@ export class DataTargetKafkaListenerService extends AbstractKafkaConsumer {
10089
} catch (err) {
10190
this.logger.error(`Error while sending to MQTT DataTarget: ${err}`);
10291
}
92+
} else if (target.type === DataTargetType.OpenDataDK) {
93+
// OpenDataDk data targets are handled uniquely and ignored here.
10394
} else {
104-
throw new NotImplementedException(`Not implemented for: ${target.type}`);
95+
this.logger.error(`Not implemented for: ${target.type}`);
10596
}
10697
});
10798
}

0 commit comments

Comments
 (0)