@signalk/freeboard-sk
Version:
Openlayers chart plotter implementation for Signal K
341 lines (340 loc) • 10.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const server_api_1 = require("@signalk/server-api");
const alarms_1 = require("./alarms/alarms");
const openapi = tslib_1.__importStar(require("./openApi.json"));
const defaultPollInterval = 60;
const CONFIG_SCHEMA = {
properties: {}
};
const CONFIG_UISCHEMA = {};
module.exports = (server) => {
// ** default configuration settings
let settings = {
alarms: {
enable: true
}
};
// ******** 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;
}
/**
* emit metas for environment paths
* @todo remove after merge of https://github.com/SignalK/specification/pull/662
*/
emitMeteoMetas();
settings.alarms = options.alarms ?? {
enable: true
};
// const f = await server.getFeatures();
settings.alarms.enable = true; //!f.apis.includes('notifications' as any);
server.debug(`Applied config: ${JSON.stringify(settings)}`);
if (settings.alarms.enable) {
(0, alarms_1.initAlarms)(server, plugin.id);
}
server.setPluginStatus('Started');
// 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 **');
server.debug('** Un-subscribing from events **');
(0, alarms_1.shutdownAlarms)();
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
});
});
};
/**
* Ensure meta delta are emitted for environment paths
* @todo remove after merge of https://github.com/SignalK/specification/pull/662
*/
const emitMeteoMetas = () => {
const pathRoot = 'environment';
const metas = [];
server.debug('**** Building METEO metas *****');
metas.push({
path: `${pathRoot}.date`,
value: {
description: 'Time of measurement.'
}
});
metas.push({
path: `${pathRoot}.sun.sunrise`,
value: {
description: 'Time of sunrise at the related position.'
}
});
metas.push({
path: `${pathRoot}.sun.sunset`,
value: {
description: 'Time of sunset at the related position.'
}
});
metas.push({
path: `${pathRoot}.outside.uvIndex`,
value: {
description: 'Level of UV radiation. 1 UVI = 25mW/sqm',
units: 'UVI'
}
});
metas.push({
path: `${pathRoot}.outside.cloudCover`,
value: {
description: 'Cloud clover.',
units: 'ratio'
}
});
metas.push({
path: `${pathRoot}.outside.temperature`,
value: {
description: 'Outside air temperature.',
units: 'K'
}
});
metas.push({
path: `${pathRoot}.outside.dewPointTemperature`,
value: {
description: 'Dew point.',
units: 'K'
}
});
metas.push({
path: `${pathRoot}.outside.feelsLikeTemperature`,
value: {
description: 'Feels like temperature.',
units: 'K'
}
});
metas.push({
path: `${pathRoot}.outside.horizontalVisibility`,
value: {
description: 'Horizontal visibility.',
units: 'm'
}
});
metas.push({
path: `${pathRoot}.outside.horizontalVisibilityOverRange`,
value: {
description: 'Visibilty distance is greater than the range of the measuring equipment.'
}
});
metas.push({
path: `${pathRoot}.outside.pressure`,
value: {
description: 'Barometric pressure.',
units: 'Pa'
}
});
metas.push({
path: `${pathRoot}.outside.pressureTendency`,
value: {
description: 'Integer value indicating barometric pressure value tendency e.g. 0 = steady, etc.'
}
});
metas.push({
path: `${pathRoot}.outside.pressureTendencyType`,
value: {
description: 'Description for the value of pressureTendency e.g. steady, increasing, decreasing.'
}
});
metas.push({
path: `${pathRoot}.outside.relativeHumidity`,
value: {
description: 'Relative humidity.',
units: 'ratio'
}
});
metas.push({
path: `${pathRoot}.outside.absoluteHumidity`,
value: {
description: 'Absolute humidity.',
units: 'ratio'
}
});
metas.push({
path: `${pathRoot}.outside.precipitationVolume`,
value: {
description: 'Precipitation Volume.',
units: 'm'
}
});
metas.push({
path: `${pathRoot}.wind.averageSpeed`,
value: {
description: 'Average wind speed.',
units: 'm/s'
}
});
metas.push({
path: `${pathRoot}.wind.speedTrue`,
value: {
description: 'True wind speed.',
units: 'm/s'
}
});
metas.push({
path: `${pathRoot}.wind.directionTrue`,
value: {
description: 'The wind direction relative to true north.',
units: 'rad'
}
});
metas.push({
path: `${pathRoot}.wind.gust`,
value: {
description: 'Maximum wind gust.',
units: 'm/s'
}
});
metas.push({
path: `${pathRoot}.wind.gustDirectionTrue`,
value: {
description: 'Maximum wind gust direction.',
units: 'rad'
}
});
metas.push({
path: `${pathRoot}.wind.gust`,
value: {
description: 'Maximum wind gust.',
units: 'm/s'
}
});
metas.push({
path: `${pathRoot}.water.level`,
value: {
description: 'Water level.',
units: 'm'
}
});
metas.push({
path: `${pathRoot}.water.temperature`,
value: {
description: 'Water temperature.',
units: 'K'
}
});
metas.push({
path: `${pathRoot}.water.salinity`,
value: {
description: 'Water salinity.',
units: 'ratio'
}
});
metas.push({
path: `${pathRoot}.water.levelTendency`,
value: {
description: 'Integer value indicating water level tendency e.g. 0 = steady, etc.'
}
});
metas.push({
path: `${pathRoot}.water.levelTendencyType`,
value: {
description: 'Description for the value of levelTendency e.g. steady, increasing, decreasing.'
}
});
metas.push({
path: `${pathRoot}.water.current.set`,
value: {
description: 'Water current direction.',
units: 'rad'
}
});
metas.push({
path: `${pathRoot}.water.current.drift`,
value: {
description: 'Water current speed.',
units: 'm/s'
}
});
metas.push({
path: `${pathRoot}.water.waves.significantHeight`,
value: {
description: 'Significant wave height.',
units: 'm'
}
});
metas.push({
path: `${pathRoot}.water.waves.period`,
value: {
description: 'Wave period.',
units: 'ms'
}
});
metas.push({
path: `${pathRoot}.water.waves.direction`,
value: {
description: 'Wave direction.',
units: 'rad'
}
});
metas.push({
path: `${pathRoot}.water.swell.significantHeight`,
value: {
description: 'Significant swell height.',
units: 'm'
}
});
metas.push({
path: `${pathRoot}.water.swell.period`,
value: {
description: 'Swell period.',
units: 'ms'
}
});
metas.push({
path: `${pathRoot}.water.swell.directionTrue`,
value: {
description: 'Swell direction.',
units: 'rad'
}
});
server.debug('**** Sending METEO metas *****');
server.handleMessage(plugin.id, {
context: `meteo`,
updates: [
{
meta: metas
}
]
}, server_api_1.SKVersion.v1);
};
return plugin;
};