fetching most of important settings, also saving them via POST

This commit is contained in:
DJ2LS 2023-11-08 20:18:41 +01:00
parent 08f35903af
commit c3d5494f4c
10 changed files with 167 additions and 49 deletions

View file

@ -19,7 +19,8 @@ import chat from "./chat.vue";
import infoScreen from "./infoScreen.vue";
import { stopTransmission } from "../js/sock.js";
import { fetchSettings } from "../js/rest.js";
import { fetchSettings } from "../js/settingsHandler.js";
function stopAllTransmissions() {
console.log("stopping transmissions");
stopTransmission();

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -8,9 +8,6 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -8,9 +8,6 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -7,9 +7,7 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -30,9 +30,6 @@ function startStopModem() {
}
}
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>
@ -76,7 +73,7 @@ function saveSettings() {
maxlength="5"
max="65534"
min="1025"
@change="saveSettings"
@change="saveSettings()"
v-model="settings.modem_port"
/>
</div>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -7,9 +7,7 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -8,9 +8,6 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts">
import { saveSettingsToFile } from "../js/settingsHandler";
import { saveSettings } from "../js/settingsHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
@ -8,9 +8,7 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
function saveSettings() {
saveSettingsToFile();
}
</script>
<template>

View file

@ -2,30 +2,46 @@
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { processModemConfig, getModemConfigAsJSON } from "../js/settingsHandler.ts";
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
import { processModemConfig } from "../js/settingsHandler.ts";
export function fetchSettings() {
// fetch Settings
getFromServer("localhost", 5000, "config");
}
async function getFromServer(host, port, endpoint) {
export async function getFromServer(host, port, endpoint) {
// our central function for fetching the modems REST API by a specific endpoint
// TODO make this function using the host and port, specified in settings
// include better error handling
const url = "http://" + host + ":" + port + "/" + endpoint;
const url = `http://${host}:${port}/${endpoint}`;
const response = await fetch(url);
if (!response.ok) {
throw new Error(`REST response not ok: ${response.statusText}`);
}
const data = await response.json();
// move received data to our data dispatcher
restDataDispatcher(endpoint, data.data);
}
export async function postToServer(host, port, endpoint, data) {
// our central function for posting to the modems REST API by a specific endpoint
// TODO make this function using the host and port, specified in settings
const url = `http://${host}:${port}/${endpoint}`;
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
});
if (!response.ok) {
throw new Error(`REST response not ok: ${response.statusText}`);
}
} catch (error) {
console.error('Error posting to REST:', error);
}
}
function restDataDispatcher(endpoint, data) {
// dispatch received data by endpoint
@ -33,6 +49,12 @@ function restDataDispatcher(endpoint, data) {
case "config":
processModemConfig(data);
break;
case "devices/audio":
//processModemAudioDevices(data);
break;
case "devices/serial":
//processModemSerialDevices(data);
break;
default:
console.log("Wrong endpoint:" + endpoint);

View file

@ -9,6 +9,8 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
import { postToServer, getFromServer } from "./rest.js";
// ---------------------------------
console.log(process.env);
@ -103,13 +105,124 @@ export function saveSettingsToFile() {
let config = settings.getJSON();
console.log(config);
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
}
export function processModemConfig(data) {
console.log(data);
// basic test if we received settings
// we should iterate through JSON, by using equal variables here like in modem config
// STATION SETTINGS
settings.mycall = data["STATION"].mycall;
settings.mygrid = data["STATION"].mygrid;
// update our settings from get request
// TODO Can we make this more dynamic? Maybe using a settings object?
// For now its a hardcoded structure until we found a better way
console.log(data)
// STATION SETTINGS
// Extract the callsign and SSID
if (data.STATION.mycall.includes('-')) {
const splittedCallsign = data.STATION.mycall.split('-');
settings.mycall = splittedCallsign[0]; // The part before the hyphen
settings.myssid = parseInt(splittedCallsign[1], 10); // The part after the hyphen, converted to a number
} else {
settings.mycall = data.STATION.mycall; // Use the original mycall if no SSID is present
settings.myssid = 0; // Default SSID if not provided
}
settings.mygrid = data.STATION.mygrid;
// ssid list not yet implemented
//data.STATION.ssid_list[0];
// AUDIO SETTINGS
settings.auto_tune = data.AUDIO.auto_tune;
settings.rx_audio_level = data.AUDIO.rxaudiolevel;
settings.tx_audio_level = data.AUDIO.txaudiolevel;
// MODEM SETTINGS
settings.enable_fft = data.Modem.fft;
settings.enable_fsk = data.Modem.fsk;
settings.tuning_range_fmin = data.Modem.fmin;
settings.tuning_range_fmax = data.Modem.fmax;
settings.rx_buffer_size = data.Modem.rx_buffer_size;
settings.enable_explorer = data.Modem.explorer;
settings.explorer_stats = data.Modem.stats;
settings.tx_delay = data.Modem.tx_delay;
settings.respond_to_cq = data.Modem.qrv;
settings.low_bandwidth_mode = data.Modem.narrowband;
// HAMLIB SETTINGS
settings.hamlib_rigctld_port = data.RADIO.rigctld_port;
settings.hamlib_rigctld_ip = data.RADIO.rigctld_ip;
settings.radiocontrol = data.RADIO.radiocontrol;
// TCI SETTINGS
settings.tci_ip = data.TCI.ip;
settings.tci_port = data.TCI.port;
// MESH SETTINGS
settings.enable_mesh_features = data.MESH.enable_protocol;
}
export function getModemConfigAsJSON(){
// create json output from settings
// TODO Can we make this more dynamic? Maybe using a settings object?
// For now its a hardcoded structure until we found a better way
const configData = {
"AUDIO": {
"auto_tune": settings.auto_tune,
"rx": "560f",
"rxaudiolevel": settings.rx_audio_level,
"tx": "560f",
"txaudiolevel": settings.tx_audio_level
},
"MESH": {
"enable_protocol": settings.enable_mesh_features
},
"Modem": {
"explorer": settings.enable_explorer,
"fft": settings.enable_fft,
"fmax": settings.tuning_range_fmax,
"fmin": settings.tuning_range_fmin,
"fsk": settings.enable_fsk,
"narrowband": settings.low_bandwidth_mode,
"qrv": settings.respond_to_cq,
"rx_buffer_size": settings.rx_buffer_size,
"scatter": "False",
"stats": settings.explorer_stats,
"tx_delay": settings.tx_delay
},
"NETWORK": {
"modemport": "3000"
},
"RADIO": {
"radiocontrol": settings.radiocontrol,
"rigctld_ip": settings.hamlib_rigctld_ip,
"rigctld_port": settings.hamlib_rigctld_port
},
"STATION": {
"mycall": settings.mycall + '-' + settings.myssid,
"mygrid": settings.mygrid,
"ssid_list": []
},
"TCI": {
"ip": settings.tci_ip,
"port": settings.tci_port
}
};
return configData;
}
export function fetchSettings() {
// fetch Settings
getFromServer("localhost", 5000, "config");
getFromServer("localhost", 5000, "devices/audio");
getFromServer("localhost", 5000, "devices/serial");
}
export function saveSettings(){
// save settings via post
console.log("post settings")
postToServer("localhost", 5000, "config", getModemConfigAsJSON());
}