UNPKG

chimps

Version:

Spatial-temporal dynamics processor for context-aware physical spaces. We believe in an open Internet of Things.

90 lines (73 loc) 2.54 kB
/** * Copyright reelyActive 2023 * We believe in an open Internet of Things */ const PositioningEngines = require('./positioningengines'); const Raddec = require('raddec'); const RaddecFilter = require('raddec-filter'); const DEFAULT_POSITIONING_ENGINES = [ { inputFilterParameters: {}, engine: PositioningEngines.External }, { inputFilterParameters: { acceptedEvents: [ Raddec.events.APPEARANCE, Raddec.events.DISPLACEMENT, Raddec.events.KEEPALIVE ] }, engine: PositioningEngines.AnchorAndPull } ]; const DEFAULT_ASSOCIATIONS = new Map(); /** * PositioningEnginesManager Class * Handles the positioning engine(s). */ class PositioningEnginesManager { /** * PositioningEnginesManager constructor * @param {Chimps} chimps The chimps instance. * @param {Object} options The options as a JSON object. * @constructor */ constructor(chimps, options) { let self = this; options = options || {}; options.positioningEngines = options.positioningEngines || DEFAULT_POSITIONING_ENGINES; this.chimps = chimps; this.positioningEngines = []; this.associations = options.associations || DEFAULT_ASSOCIATIONS; options.positioningEngines.forEach((entry) => { self.positioningEngines.push({ inputFilter: new RaddecFilter(entry.inputFilterParameters), engine: new entry.engine(entry.options) }); }); } /** * Use the provided associations for the positioning engines. * @param {Map} associations The associations by device signature. */ setAssociations(associations) { this.associations = associations; } /** * Handle the the given raddec. * @param {Raddec} raddec The raddec to be handled. */ handleRaddec(raddec) { let self = this; let estimates = []; self.positioningEngines.forEach((positioningEngine) => { if(positioningEngine.inputFilter.isPassing(raddec)) { let position = positioningEngine.engine.estimatePosition(raddec, self.associations); if(position) { estimates.push({ positioningEngineName: positioningEngine.engine.constructor.name, position: position }); } } }); if(estimates.length > 0) { self.chimps.positionManager.handleRaddec(raddec, estimates); } } } module.exports = PositioningEnginesManager;