53 lines
1.2 KiB
JavaScript
53 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;
|