UNPKG

smartmeter2mqtt

Version:

Publish data from your Smartmeter with a P1 interface to your MQTT server.

107 lines 5.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var yargs_1 = __importDefault(require("yargs")); var fs_1 = __importDefault(require("fs")); var path_1 = __importDefault(require("path")); var ConfigLoader = /** @class */ (function () { function ConfigLoader() { } ConfigLoader.Load = function () { var _a, _b; var pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'package.json')).toString()); var args = yargs_1.default .env('SMARTMETER') .usage(pkg.name + " " + pkg.version + "\n" + pkg.description + "\n\nRead from P1 to USB serial:\n$0 --port /dev/ttyUSB0 [options]" + '\n\nRead from tcp socket:\n$0 --socket host:port [options]') .epilog('All options can also be specified as Environment valiables' + '\r\nPrefix them with \'SMARTMETER_\' and make them all uppercase') .describe('port', 'The serial port to read, P1 to serial usb, eg. \'/dev/ttyUSB0\'') .describe('socket', 'The tcp socket to read, if reading from serial to network device, as host:port, like \'192.168.0.3:3000\'') .describe('web-server', 'Expose webserver on this port') .describe('post-url', 'Post the results to this url') .describe('post-interval', 'Seconds between posts') .describe('post-json', 'Post the data as json instead of form parameters') .boolean('post-json') .describe('mqtt-url', 'Send the data to this mqtt server') .describe('mqtt-topic', 'Use this topic prefix for all messages') .describe('mqtt-distinct', 'Publish data distinct to mqtt') .boolean('mqtt-distinct') .describe('mqtt-distinct-fields', 'A comma separated list of fields you want published distinct.') .describe('mqtt-discovery', 'Emit auto-discovery message') .boolean('mqtt-discovery') .describe('mqtt-discovery-prefix', 'Autodiscovery prefix') .describe('tcp-server', 'Expose JSON TCP socket on this port') .describe('raw-tcp-server', 'Expose RAW TCP socket on this port') .conflicts('port', 'socket') .describe('debug', 'Enable debug output') .boolean('debug') .describe('sunspec-modbus', 'IP of solar inverter with modbus TCP enabled') .describe('sunspec-modbus-port', 'modbus TCP port') .number('sunspec-modbus-port') .number('web-server') .number('tcp-server') .number('raw-tcp-server') .number('post-interval') .alias({ h: 'help', }) .default({ 'post-interval': 300, 'mqtt-topic': 'smartmeter', 'mqtt-discovery-prefix': 'homeassistant', 'sunspec-modbus-port': 502, 'mqtt-distinct-fields': 'currentTarrif,totalT1Use,totalT2Use,totalT1Delivered,totalT2Delivered,powerSn,currentUsage,currentDelivery', }) .wrap(80) .version() .help('help') .argv; var config = { serialPort: args.port, socket: args.socket, outputs: { debug: args.debug === true, }, }; if (args['tcp-server']) { config.outputs.jsonSocket = args['tcp-server']; } if (typeof args['mqtt-url'] === 'string') { config.outputs.mqtt = { discovery: args['mqtt-discovery'] === true, discoveryPrefix: (_a = args['mqtt-discovery-prefix']) !== null && _a !== void 0 ? _a : 'homeassistant', distinct: args['mqtt-distinct'] === true, distinctFields: args['mqtt-distinct-fields'].split(','), prefix: (_b = args['mqtt-topic']) !== null && _b !== void 0 ? _b : 'smartmeter', url: args['mqtt-url'], }; } if (typeof args['post-url'] === 'string') { config.outputs.post = { fields: 'powerTs,totalT1Use,totalT1Delivered,totalT2Use,totalT1Delivered,gas_totalUse,gas_ts', interval: args['post-interval'], json: args['post-json'] === true, url: args['post-url'], }; } if (args['raw-tcp-server']) { config.outputs.rawSocket = args['raw-tcp-server']; } if (args['web-server']) { config.outputs.webserver = args['web-server']; } if (args['sunspec-modbus']) { config.solar = { host: args['sunspec-modbus'], port: args['sunspec-modbus-port'], }; } return config; }; return ConfigLoader; }()); exports.ConfigLoader = ConfigLoader; //# sourceMappingURL=config.js.map