signalk-openweather-provider
Version:
OpenWeather provider plugin for Signal K Server
116 lines (115 loc) • 3.92 kB
JavaScript
;
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;
};