const SerialPort = require('serialport'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const ParserInterByteTimeout = require('@serialport/parser-inter-byte-timeout'); const parsers = require('./lib/serialport-parsers'); const modemCommands = require('./lib/modem-commands'); const parserInterByteTimeout = new ParserInterByteTimeout({ interval: 1000 }); parserInterByteTimeout.on('data', (data) => { logger.verbose('INCOMING', { parser: 'parserInterByteTimeout', data: data.toString() }); }); const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) => { if (err) { logger.warn(`Error opening modem. ${err}. Terminating modem ${config.modem.device}.`); process.exit(1); } await modemCommands.writeToPortAndWaitForOkOrError('AT\r'); await modemCommands.writeToPortAndWaitForOkOrError('AT&FE0\r'); await modemCommands.writeToPortAndWaitForOkOrError('AT+CMGF=0\r'); await modemCommands.writeToPortAndWaitForOkOrError('AT+CNMI=1,2,0,1,0\r'); const imei = await modemCommands.queryIMEI(); logger.info(`**** IMEI: ${imei}`); const imsi = await modemCommands.queryIMSI(); logger.info(`**** IMSI: ${imsi}`); const cops = await modemCommands.queryCOPS(); logger.info(`**** COPS: ${cops}`); const signalQuality = await modemCommands.querySignalQuality(); logger.info(`**** Signal Quality: ${signalQuality}`); setInterval(() => { modemCommands.querySignalQuality(); }, (config && config.interval_beetwen_signal_strength_ms) || 30000); }); parsers.setPort(port); modemCommands.setPort(port); if (config && config.modem_tester && config.modem_tester.parser === 'regex') { logger.info('Using parserWaitForOkOrError'); port.pipe(parsers.parserWaitForOkOrError); } else if (config && config.modem_tester && config.modem_tester.parser === 'interbyte') { logger.info('Using parserInterByteTimeout'); port.pipe(parserInterByteTimeout); } else { logger.info('Using parserReadline'); port.pipe(parsers.parserReadline); }