Skip to content

Commit

Permalink
wip: sondehub
Browse files Browse the repository at this point in the history
  • Loading branch information
VilemRaska committed Jan 22, 2025
1 parent ca634d5 commit 445add6
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 25 deletions.
11 changes: 6 additions & 5 deletions GAPP/apps/gapp-server/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@ import { app } from './app/app';
import { getConfig } from './config';
import { Uploader } from '@gapp/sondehub';

const uploader = new Uploader('CSK-TST');
const uploader = new Uploader({ uploaderCallsign: 'CESILKO-NODE', uploaderPosition: [50.01, 15.01, 200] });

uploader.addTelemetry({
payload_callsign: 'CSK-TST-PAYLOAD',
timestamp: new Date().toISOString(),
lat: 1.0,
lon: 1.0,
payload_callsign: 'test_payload',
datetime: new Date().toISOString(),
lat: 50,
lon: 14.05,
alt: 1000,
});

uploader.uploadTelemetry();

const config = getConfig(process.env);
Expand Down
60 changes: 40 additions & 20 deletions GAPP/libs/sondehub/src/lib/uploader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,11 @@
import axios from 'axios';
import { gzipSync } from 'node:zlib';

export interface Position {
lat: number;
lon: number;
alt: number;
}
export type Position = [number, number, number];

export interface TelemetryPacket {
payload_callsign: string;
timestamp: string;
datetime: string;
lat: number;
lon: number;
alt: number;
Expand Down Expand Up @@ -38,23 +34,43 @@ export interface TelemetryPacket {
[key: string]: any;
}

interface UploaderConfig {
uploaderCallsign: string;
uploaderPosition?: Position;
uploaderRadio?: string;
uploaderAntenna?: string;
softwareName: string;
softwareVersion: string;
uploadRate: number;
uploadTimeout: number;
uploadRetries: number;
developerMode: boolean;
}

export type UploaderOptions = Partial<Omit<UploaderConfig, 'uploaderCallsign'>> & Pick<UploaderConfig, 'uploaderCallsign'>;

export class Uploader {
private uploaderConfig: UploaderConfig = {
uploaderCallsign: '',
softwareName: 'node-sondehub',
softwareVersion: '0.0.1',
uploadRate: 2,
uploadTimeout: 20_000,
uploadRetries: 5,
developerMode: false
}

private inputQueue: TelemetryPacket[] = [];

private static SONDEHUB_AMATEUR_URL = 'https://api.v2.sondehub.org/amateur/telemetry';
private static SONDEHUB_AMATEUR_STATION_POSITION_URL = 'https://api.v2.sondehub.org/amateur/listeners';

constructor(
private uploaderCallsign: string,
private uploaderPosition?: Position,
private uploaderRadio?: string,
private uploaderAntenna?: string,
private softwareName = 'ts-sondehub',
private softwareVersion = '0.0.1',
private uploadRate = 2,
private uploadTimeout = 20,
private uploadRetries = 5,
private developerMode = false
) {}
constructor(options: UploaderOptions) {
this.uploaderConfig = {
...options,
...this.uploaderConfig
}
}

private logDebug(message: string): void {
console.debug(`Sondehub Uploader: ${message}`);
Expand All @@ -70,13 +86,17 @@ export class Uploader {

public addTelemetry(packet: TelemetryPacket): void {
const now = new Date();
packet.software_name = this.softwareName;
packet.software_name = this.uploaderConfig.softwareName;
packet.software_version = this.softwareVersion;

if (!packet.uploader_callsign) {
packet.uploader_callsign = this.uploaderCallsign;
}

if(!packet.uploader_position) {
packet.uploader_position = this.uploaderPosition;
}

if (!packet.time_received) {
packet.time_received = now.toISOString();
}
Expand All @@ -95,7 +115,7 @@ export class Uploader {
this.inputQueue = []; // Clear the queue

try {
const compressedPayload = gzipSync(JSON.stringify(packets));
const compressedPayload = gzipSync(JSON.stringify(packets));
const headers = {
'User-Agent': `${this.softwareName}-${this.softwareVersion}`,
'Content-Encoding': 'gzip',
Expand Down
12 changes: 12 additions & 0 deletions sondehub-test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from sondehub.amateur import Uploader
import datetime

uploader_data = Uploader("CesilkoTest", uploader_position=[50.073, 14.418, 400])

uploader_data.add_telemetry(
"cesilko-test-probe",
datetime.datetime.now(datetime.UTC),
50.005,
14.07,
250
)

0 comments on commit 445add6

Please sign in to comment.