smartmeter2mqtt
Version:
Publish data from your Smartmeter with a P1 interface to your MQTT server.
107 lines • 5.03 kB
JavaScript
;
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