UNPKG

@signalk/freeboard-sk

Version:

Openlayers chart plotter implementation for Signal K

156 lines (155 loc) 5.17 kB
"use strict"; 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; };