LoRaWAN-Signal-Mapping/server/ttn-app-server/MessageHandler.mjs

54 lines
1.2 KiB
JavaScript

"use strict";
import { decode_payload } from './DecodePayload.mjs';
import { get_id_number } from '../Helpers/IdGenerator.mjs';
class MessageHandler {
constructor({ ReadingRepo, GatewayRepo }) {
this.repo_reading = ReadingRepo;
this.repo_gateway = GatewayRepo;
}
async handle(message) {
console.log(message);
let decoded_payload = decode_payload(message.payload_raw);
console.log(decoded_payload);
let rssis = [];
for(let gw in message.metadata.gateways) {
// Insert the gateway info into the database if it doesn't exist already
if(!this.repo_gateway.exists(gw.gtw_id)) {
this.repo_gateway.add({
id: gw.gtw_id,
latitude: gw.latitude, longitude: gw.longitude,
altitude: gw.altitude
});
}
// Generate an RSSI object
rssis.push({
id: get_id_number,
gateway_id: this.repo_gateway,
rssi: gw.rssi,
snr: gw.snr,
channel: gw.channel
});
}
// Add the reading and the associated RSSIs to the database
this.repo_reading.add({
id: decoded_payload.id,
latitude: decoded_payload.latitude,
longitude: decoded_payload.longitude,
data_rate: message.metadata.data_rate,
code_rate: message.metadata.coding_rate,
rssis
});
}
}
export default MessageHandler;