@signalk/freeboard-sk
Version:
Openlayers chart plotter implementation for Signal K
156 lines (155 loc) • 5.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const alarms_1 = require("./alarms/alarms");
const weather_service_1 = require("./weather/weather-service");
const openapi = require("./openApi.json");
const defaultPollInterval = 60;
const CONFIG_SCHEMA = {
properties: {
weather: {
type: 'object',
title: 'Weather API.',
description: 'OpenWeather service settings.',
properties: {
enable: {
type: 'boolean',
default: false,
title: 'Enable Weather',
description: ' '
},
apiVersion: {
type: 'number',
title: 'API Version',
default: 3,
enum: [3, 2],
description: 'Note: v2 API not supported after April 2024!'
},
apiKey: {
type: 'string',
title: 'API Key',
default: '',
description: 'Get your API key at https://openweathermap.org/home/sign_up'
},
pollInterval: {
type: 'number',
title: 'Polling Interval',
default: 60,
enum: weather_service_1.WEATHER_POLL_INTERVAL,
description: 'Select the interval at which the weather service is polled.'
}
}
}
}
};
const CONFIG_UISCHEMA = {
weather: {
enable: {
'ui:widget': 'checkbox',
'ui:title': ' ',
'ui:help': ' '
},
apiVersion: {
'ui:widget': 'select',
'ui-help': ' '
},
apiKey: {
'ui:disabled': false,
'ui-help': ''
},
pollInterval: {
'ui:widget': 'select',
'ui:title': 'Polling Interval (mins)',
'ui:help': ' '
}
}
};
module.exports = (server) => {
// ** default configuration settings
let settings = {
alarms: {
enable: true
},
weather: {
enable: false,
apiVersion: 3,
apiKey: '',
pollInterval: defaultPollInterval
}
};
// ******** REQUIRED PLUGIN DEFINITION *******
const plugin = {
id: 'freeboard-sk',
name: 'Freeboard-SK',
schema: () => CONFIG_SCHEMA,
uiSchema: () => CONFIG_UISCHEMA,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
start: (settings) => {
doStartup(settings);
},
stop: () => {
doShutdown();
},
registerWithRouter: (router) => {
return initApiEndpoints(router);
},
getOpenApi: () => openapi
};
// ************************************
const doStartup = (options) => {
try {
server.debug(`${plugin.name} starting.......`);
if (typeof options !== 'undefined') {
settings = options;
}
settings.weather = options.weather ?? {
enable: false,
apiVersion: 3,
apiKey: '',
pollInterval: defaultPollInterval
};
settings.weather.enable = options.weather.enable ?? false;
settings.weather.apiVersion = options.weather.apiVersion ?? 3;
settings.weather.apiKey = options.weather.apiKey ?? '';
settings.weather.pollInterval =
options.weather.pollInterval ?? defaultPollInterval;
settings.alarms = options.alarms ?? {
enable: true
};
settings.alarms.enable = true;
server.debug(`Applied config: ${JSON.stringify(settings)}`);
if (settings.alarms.enable) {
(0, alarms_1.initAlarms)(server, plugin.id);
}
let msg = '';
if (settings.weather.enable) {
msg = `Started - Providing: weather`;
(0, weather_service_1.initWeather)(server, plugin.id, settings.weather);
}
server.setPluginStatus(msg);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (error) {
const msg = 'Started with errors!';
server.setPluginError(msg);
server.error('** EXCEPTION: **');
server.error(error.stack);
return error;
}
};
const doShutdown = () => {
server.debug('** shutting down **');
(0, weather_service_1.stopWeather)();
server.debug('** Un-subscribing from events **');
const msg = 'Stopped';
server.setPluginStatus(msg);
};
const initApiEndpoints = (router) => {
server.debug(`Initialising Freeboard-SK plugin endpoints.......`);
router.get('/settings', (req, res) => {
res.status(200).json({
settings: settings
});
});
};
return plugin;
};