UNPKG

signalk-openweather-provider

Version:
116 lines (115 loc) 3.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const weather_service_1 = require("./weather/weather-service"); const DEFAULT_POLL_INTERVAL = 60; const CONFIG_SCHEMA = { properties: { weather: { title: 'OpenWeather', type: 'object', description: 'Weather service settings.', properties: { apiKey: { type: 'string', title: 'API Key', default: '', description: 'Get your API key at https://openweathermap.org' }, enable: { type: 'boolean', default: false, title: 'Poll periodcally using vessel position.' }, 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: { apiKey: { 'ui:disabled': false, 'ui-help': '' }, enable: { 'ui:widget': 'checkbox', 'ui:title': ' ', 'ui:help': ' ' }, pollInterval: { 'ui:widget': 'select', 'ui:title': 'Polling Interval (mins)', 'ui:help': ' ' } } }; module.exports = (server) => { // ** default configuration settings let settings = { weather: { enable: false, apiKey: '', pollInterval: DEFAULT_POLL_INTERVAL } }; // ******** REQUIRED PLUGIN DEFINITION ******* const plugin = { id: 'openweather', name: 'OpenWeather (Weather Provider)', schema: () => CONFIG_SCHEMA, uiSchema: () => CONFIG_UISCHEMA, // eslint-disable-next-line @typescript-eslint/no-explicit-any start: (settings) => { doStartup(settings); }, stop: () => { doShutdown(); } }; // ************************************ const doStartup = (options) => { try { server.debug(`${plugin.name} starting.......`); if (typeof server.registerWeatherProvider !== 'function') { throw new Error('Weather API is not available! Server upgrade required.'); } if (typeof options !== 'undefined') { settings = options; } settings.weather = options.weather ?? { enable: false, apiKey: '', pollInterval: DEFAULT_POLL_INTERVAL }; settings.weather.enable = options.weather.enable ?? false; settings.weather.apiKey = options.weather.apiKey ?? ''; settings.weather.pollInterval = options.weather.pollInterval ?? DEFAULT_POLL_INTERVAL; server.debug(`Applied config: ${JSON.stringify(settings)}`); (0, weather_service_1.initWeather)(server, plugin.id, settings.weather); server.setPluginStatus(`Started`); // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error) { const msg = 'Started with errors!'; server.setPluginError(error.message ?? 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); }; return plugin; };