denon-mqtt 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +217 -0
- package/dist/CliParser.d.ts +11 -0
- package/dist/CliParser.js +80 -0
- package/dist/CliParser.js.map +1 -0
- package/dist/CommandMessage.d.ts +6 -0
- package/dist/CommandMessage.js +3 -0
- package/dist/CommandMessage.js.map +1 -0
- package/dist/ListenerConfig.d.ts +5 -0
- package/dist/ListenerConfig.js +3 -0
- package/dist/ListenerConfig.js.map +1 -0
- package/dist/MqttBroadcaster.d.ts +22 -0
- package/dist/MqttBroadcaster.js +72 -0
- package/dist/MqttBroadcaster.js.map +1 -0
- package/dist/MqttListener.d.ts +19 -0
- package/dist/MqttListener.js +65 -0
- package/dist/MqttListener.js.map +1 -0
- package/dist/MqttManager.d.ts +24 -0
- package/dist/MqttManager.js +45 -0
- package/dist/MqttManager.js.map +1 -0
- package/dist/MqttUpdate.d.ts +6 -0
- package/dist/MqttUpdate.js +3 -0
- package/dist/MqttUpdate.js.map +1 -0
- package/dist/Orchestrator.d.ts +22 -0
- package/dist/Orchestrator.js +143 -0
- package/dist/Orchestrator.js.map +1 -0
- package/dist/ParserResult.d.ts +6 -0
- package/dist/ParserResult.js +3 -0
- package/dist/ParserResult.js.map +1 -0
- package/dist/ReceiverConfig.d.ts +7 -0
- package/dist/ReceiverConfig.js +3 -0
- package/dist/ReceiverConfig.js.map +1 -0
- package/dist/ReceiverManager.d.ts +16 -0
- package/dist/ReceiverManager.js +44 -0
- package/dist/ReceiverManager.js.map +1 -0
- package/dist/TelnetBroadcaster.d.ts +7 -0
- package/dist/TelnetBroadcaster.js +22 -0
- package/dist/TelnetBroadcaster.js.map +1 -0
- package/dist/TelnetListener.d.ts +12 -0
- package/dist/TelnetListener.js +84 -0
- package/dist/TelnetListener.js.map +1 -0
- package/dist/ZoneConfig.d.ts +5 -0
- package/dist/ZoneConfig.js +3 -0
- package/dist/ZoneConfig.js.map +1 -0
- package/dist/entryPoint.d.ts +2 -0
- package/dist/entryPoint.js +47 -0
- package/dist/entryPoint.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReceiverConfig } from './ReceiverConfig';
|
|
2
|
+
export interface OrchestratorOptions {
|
|
3
|
+
receivers: ReceiverConfig[];
|
|
4
|
+
mqtt: string;
|
|
5
|
+
port: string;
|
|
6
|
+
username: string;
|
|
7
|
+
password: string;
|
|
8
|
+
prefix: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class Orchestrator {
|
|
11
|
+
private options;
|
|
12
|
+
private mqttClient;
|
|
13
|
+
private mqttManagers;
|
|
14
|
+
private receiverManagers;
|
|
15
|
+
constructor(options: OrchestratorOptions);
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
addReceiver(receiver: ReceiverConfig): Promise<void>;
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
cleanup(): Promise<void>;
|
|
20
|
+
static run(options: OrchestratorOptions): Promise<void>;
|
|
21
|
+
static handleExit(callback: () => void): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
3
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4
|
+
var m = o[Symbol.asyncIterator], i;
|
|
5
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
6
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
7
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.Orchestrator = void 0;
|
|
11
|
+
const mqtt_1 = require("mqtt");
|
|
12
|
+
const MqttManager_1 = require("./MqttManager");
|
|
13
|
+
const ReceiverManager_1 = require("./ReceiverManager");
|
|
14
|
+
class Orchestrator {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.mqttManagers = [];
|
|
18
|
+
this.receiverManagers = [];
|
|
19
|
+
}
|
|
20
|
+
async init() {
|
|
21
|
+
var _a, e_1, _b, _c;
|
|
22
|
+
this.mqttClient = await (0, mqtt_1.connectAsync)(`mqtt://${this.options.mqtt}:${this.options.port}`, {
|
|
23
|
+
username: this.options.username,
|
|
24
|
+
password: this.options.password,
|
|
25
|
+
});
|
|
26
|
+
console.debug('Connected to MQTT');
|
|
27
|
+
this.mqttClient.on('error', (err) => {
|
|
28
|
+
console.error(err);
|
|
29
|
+
process.exit();
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
for (var _d = true, _e = __asyncValues(this.options.receivers), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
|
|
33
|
+
_c = _f.value;
|
|
34
|
+
_d = false;
|
|
35
|
+
const config = _c;
|
|
36
|
+
await this.addReceiver(config);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
40
|
+
finally {
|
|
41
|
+
try {
|
|
42
|
+
if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
|
|
43
|
+
}
|
|
44
|
+
finally { if (e_1) throw e_1.error; }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async addReceiver(receiver) {
|
|
48
|
+
console.debug(`Adding receiver ${receiver.name}`);
|
|
49
|
+
const mqttManager = new MqttManager_1.MqttManager(this.mqttClient, {
|
|
50
|
+
host: this.options.mqtt,
|
|
51
|
+
port: parseInt(this.options.port),
|
|
52
|
+
username: this.options.username,
|
|
53
|
+
password: this.options.password,
|
|
54
|
+
prefix: this.options.prefix,
|
|
55
|
+
id: receiver.id,
|
|
56
|
+
receiver,
|
|
57
|
+
});
|
|
58
|
+
this.mqttManagers.push(mqttManager);
|
|
59
|
+
const receiverManager = new ReceiverManager_1.ReceiverManager(receiver, mqttManager);
|
|
60
|
+
this.receiverManagers.push(receiverManager);
|
|
61
|
+
await mqttManager.connect(receiverManager);
|
|
62
|
+
await receiverManager.connect();
|
|
63
|
+
await receiverManager.query();
|
|
64
|
+
}
|
|
65
|
+
async start() {
|
|
66
|
+
while (true) {
|
|
67
|
+
await Promise.all(this.receiverManagers.map((r) => r.read()));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async cleanup() {
|
|
71
|
+
var _a, e_2, _b, _c, _d, e_3, _e, _f;
|
|
72
|
+
const promises = [];
|
|
73
|
+
try {
|
|
74
|
+
for (var _g = true, _h = __asyncValues(this.mqttManagers), _j; _j = await _h.next(), _a = _j.done, !_a; _g = true) {
|
|
75
|
+
_c = _j.value;
|
|
76
|
+
_g = false;
|
|
77
|
+
const mqttManager = _c;
|
|
78
|
+
promises.push(mqttManager.disconnect());
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
82
|
+
finally {
|
|
83
|
+
try {
|
|
84
|
+
if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
|
|
85
|
+
}
|
|
86
|
+
finally { if (e_2) throw e_2.error; }
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
for (var _k = true, _l = __asyncValues(this.receiverManagers), _m; _m = await _l.next(), _d = _m.done, !_d; _k = true) {
|
|
90
|
+
_f = _m.value;
|
|
91
|
+
_k = false;
|
|
92
|
+
const receiverManager = _f;
|
|
93
|
+
promises.push(receiverManager.disconnect());
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
97
|
+
finally {
|
|
98
|
+
try {
|
|
99
|
+
if (!_k && !_d && (_e = _l.return)) await _e.call(_l);
|
|
100
|
+
}
|
|
101
|
+
finally { if (e_3) throw e_3.error; }
|
|
102
|
+
}
|
|
103
|
+
await Promise.all(promises);
|
|
104
|
+
}
|
|
105
|
+
static async run(options) {
|
|
106
|
+
console.debug('Starting...');
|
|
107
|
+
if (options.receivers.length === 0) {
|
|
108
|
+
throw new Error('At least one AVR config must be provided');
|
|
109
|
+
}
|
|
110
|
+
const orchestrator = new Orchestrator(options);
|
|
111
|
+
await orchestrator.init();
|
|
112
|
+
await orchestrator.start();
|
|
113
|
+
Orchestrator.handleExit(() => {
|
|
114
|
+
console.debug('Cleaning up...');
|
|
115
|
+
orchestrator
|
|
116
|
+
.cleanup()
|
|
117
|
+
.then(() => {
|
|
118
|
+
process.exit();
|
|
119
|
+
})
|
|
120
|
+
.catch(() => {
|
|
121
|
+
process.exit();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
static handleExit(callback) {
|
|
126
|
+
function exitHandler(options, exitCode) {
|
|
127
|
+
if (options.cleanup) {
|
|
128
|
+
callback();
|
|
129
|
+
}
|
|
130
|
+
if (exitCode || exitCode === 0)
|
|
131
|
+
console.log(exitCode);
|
|
132
|
+
if (options.exit)
|
|
133
|
+
process.exit();
|
|
134
|
+
}
|
|
135
|
+
process.on('exit', exitHandler.bind(null, { cleanup: true }));
|
|
136
|
+
process.on('SIGINT', exitHandler.bind(null, { exit: true }));
|
|
137
|
+
process.on('SIGUSR1', exitHandler.bind(null, { exit: true }));
|
|
138
|
+
process.on('SIGUSR2', exitHandler.bind(null, { exit: true }));
|
|
139
|
+
process.on('uncaughtException', exitHandler.bind(null, { exit: true }));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.Orchestrator = Orchestrator;
|
|
143
|
+
//# sourceMappingURL=Orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Orchestrator.js","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParserResult.js","sourceRoot":"","sources":["../src/ParserResult.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReceiverConfig.js","sourceRoot":"","sources":["../src/ReceiverConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MqttManager } from './MqttManager';
|
|
2
|
+
import { ReceiverConfig } from './ReceiverConfig';
|
|
3
|
+
export declare class ReceiverManager {
|
|
4
|
+
options: ReceiverConfig;
|
|
5
|
+
private mqttManager;
|
|
6
|
+
private telnetClient;
|
|
7
|
+
private listener;
|
|
8
|
+
private broadcaster;
|
|
9
|
+
private exiting;
|
|
10
|
+
constructor(options: ReceiverConfig, mqttManager: MqttManager);
|
|
11
|
+
connect(): Promise<void>;
|
|
12
|
+
query(): Promise<void>;
|
|
13
|
+
read(): Promise<void>;
|
|
14
|
+
send(data: string): Promise<void>;
|
|
15
|
+
disconnect(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReceiverManager = void 0;
|
|
4
|
+
const telnet_client_1 = require("telnet-client");
|
|
5
|
+
const TelnetBroadcaster_1 = require("./TelnetBroadcaster");
|
|
6
|
+
const TelnetListener_1 = require("./TelnetListener");
|
|
7
|
+
class ReceiverManager {
|
|
8
|
+
constructor(options, mqttManager) {
|
|
9
|
+
this.options = options;
|
|
10
|
+
this.mqttManager = mqttManager;
|
|
11
|
+
}
|
|
12
|
+
async connect() {
|
|
13
|
+
const telnetClient = new telnet_client_1.Telnet();
|
|
14
|
+
await telnetClient.connect({
|
|
15
|
+
host: this.options.ip,
|
|
16
|
+
negotiationMandatory: false,
|
|
17
|
+
timeout: 5000,
|
|
18
|
+
irs: '\r',
|
|
19
|
+
ors: '\r',
|
|
20
|
+
sendTimeout: undefined,
|
|
21
|
+
});
|
|
22
|
+
console.debug(`Connected to Receiver "${this.options.name} on ${this.options.ip}`);
|
|
23
|
+
this.listener = new TelnetListener_1.TelnetListener(telnetClient, this.options.zones.length);
|
|
24
|
+
this.broadcaster = new TelnetBroadcaster_1.TelnetBroadcaster(telnetClient);
|
|
25
|
+
}
|
|
26
|
+
async query() {
|
|
27
|
+
await this.broadcaster.query();
|
|
28
|
+
}
|
|
29
|
+
async read() {
|
|
30
|
+
await this.listener.read(this.mqttManager);
|
|
31
|
+
if (!this.exiting) {
|
|
32
|
+
await this.read();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
send(data) {
|
|
36
|
+
return this.broadcaster.send(data);
|
|
37
|
+
}
|
|
38
|
+
disconnect() {
|
|
39
|
+
this.exiting = true;
|
|
40
|
+
return this.telnetClient.destroy();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.ReceiverManager = ReceiverManager;
|
|
44
|
+
//# sourceMappingURL=ReceiverManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReceiverManager.js","sourceRoot":"","sources":["../src/ReceiverManager.ts"],"names":[],"mappings":";;;AAAA,iDAAuC;AAIvC,2DAAwD;AACxD,qDAAkD;AAElD,MAAa,eAAe;IAM1B,YACS,OAAuB,EACtB,WAAwB;QADzB,YAAO,GAAP,OAAO,CAAgB;QACtB,gBAAW,GAAX,WAAW,CAAa;IAC/B,CAAC;IAEG,KAAK,CAAC,OAAO;QAClB,MAAM,YAAY,GAAG,IAAI,sBAAM,EAAE,CAAC;QAClC,MAAM,YAAY,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YACrB,oBAAoB,EAAE,KAAK;YAC3B,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAI;YACT,GAAG,EAAE,IAAI;YACT,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAEnF,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAc,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5E,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEM,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;CACF;AAjDD,0CAiDC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TelnetBroadcaster = void 0;
|
|
4
|
+
class TelnetBroadcaster {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
async send(data) {
|
|
9
|
+
try {
|
|
10
|
+
await this.client.send(data);
|
|
11
|
+
console.debug('Sent:', data.replace(/\r/g, '\r\n'));
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
console.error(err);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async query() {
|
|
18
|
+
await this.send('SI?\rPW?\rMV?\rCV?\rMU?\rZM?\rSR?\rSD?\rDC?\rSV?\rSLP?\rMS?\rZ2?\rZ2MU?\rZ2CS?\rZ2CV?\rZ2HPF?\rZ2QUICK ?\rZ3?\rZ3MU?\rZ3CS?\rZ3CV?\rZ3HPF?\rZ3QUICK ?\rSSSPC ?\rPSCLV ?\rPSSWL ?\rSSLEV ?');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.TelnetBroadcaster = TelnetBroadcaster;
|
|
22
|
+
//# sourceMappingURL=TelnetBroadcaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelnetBroadcaster.js","sourceRoot":"","sources":["../src/TelnetBroadcaster.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAC5B,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CACb,2LAA2L,CAC5L,CAAC;IACJ,CAAC;CACF;AAjBD,8CAiBC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Telnet } from 'telnet-client';
|
|
2
|
+
import { MqttUpdate } from './MqttUpdate';
|
|
3
|
+
import { MqttManager } from './MqttManager';
|
|
4
|
+
export declare class TelnetListener {
|
|
5
|
+
private client;
|
|
6
|
+
private parsers;
|
|
7
|
+
private states;
|
|
8
|
+
constructor(client: Telnet, zones: number);
|
|
9
|
+
AddZone(): void;
|
|
10
|
+
handle(data: string): MqttUpdate | undefined;
|
|
11
|
+
read(mqttManager: MqttManager): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
3
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4
|
+
var m = o[Symbol.asyncIterator], i;
|
|
5
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
6
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
7
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.TelnetListener = void 0;
|
|
11
|
+
const denon_state_manager_1 = require("denon-state-manager");
|
|
12
|
+
class TelnetListener {
|
|
13
|
+
constructor(client, zones) {
|
|
14
|
+
this.parsers = [];
|
|
15
|
+
this.states = [];
|
|
16
|
+
this.client = client;
|
|
17
|
+
for (let i = 0; i < zones; i++) {
|
|
18
|
+
this.AddZone();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
AddZone() {
|
|
22
|
+
const state = new denon_state_manager_1.ReceiverState();
|
|
23
|
+
this.states.push(state);
|
|
24
|
+
if (this.parsers.length === 0) {
|
|
25
|
+
this.parsers.push(new denon_state_manager_1.MainParser(state));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.parsers.push(new denon_state_manager_1.ZoneParser(state, `Z${this.states.length}`));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
handle(data) {
|
|
32
|
+
var _a;
|
|
33
|
+
for (let zone = 1; zone <= this.parsers.length; zone++) {
|
|
34
|
+
const result = this.parsers[zone - 1].parse(data);
|
|
35
|
+
if (result.handled && result.value) {
|
|
36
|
+
return {
|
|
37
|
+
key: (_a = result.key) !== null && _a !== void 0 ? _a : denon_state_manager_1.ReceiverSettings.None,
|
|
38
|
+
value: result.value,
|
|
39
|
+
zone,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async read(mqttManager) {
|
|
45
|
+
var _a, e_1, _b, _c;
|
|
46
|
+
var _d;
|
|
47
|
+
try {
|
|
48
|
+
const data = await this.client.nextData();
|
|
49
|
+
const lines = (_d = data === null || data === void 0 ? void 0 : data.split('\r')) !== null && _d !== void 0 ? _d : [];
|
|
50
|
+
try {
|
|
51
|
+
for (var _e = true, lines_1 = __asyncValues(lines), lines_1_1; lines_1_1 = await lines_1.next(), _a = lines_1_1.done, !_a; _e = true) {
|
|
52
|
+
_c = lines_1_1.value;
|
|
53
|
+
_e = false;
|
|
54
|
+
const line = _c;
|
|
55
|
+
if (line !== '') {
|
|
56
|
+
console.debug('Received:', line);
|
|
57
|
+
const result = this.handle(line);
|
|
58
|
+
if (result) {
|
|
59
|
+
await mqttManager.publish(result);
|
|
60
|
+
const state = this.states[result.zone - 1];
|
|
61
|
+
state.updateState(result.key, result.value);
|
|
62
|
+
await mqttManager.publishState(state, result.zone);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.debug('Unhandled:', line);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
71
|
+
finally {
|
|
72
|
+
try {
|
|
73
|
+
if (!_e && !_a && (_b = lines_1.return)) await _b.call(lines_1);
|
|
74
|
+
}
|
|
75
|
+
finally { if (e_1) throw e_1.error; }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error(err);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.TelnetListener = TelnetListener;
|
|
84
|
+
//# sourceMappingURL=TelnetListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelnetListener.js","sourceRoot":"","sources":["../src/TelnetListener.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoneConfig.js","sourceRoot":"","sources":["../src/ZoneConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const CliParser_1 = require("./CliParser");
|
|
9
|
+
(async () => {
|
|
10
|
+
var _a;
|
|
11
|
+
dotenv_1.default.config();
|
|
12
|
+
if (!process.env.AVR_HOST) {
|
|
13
|
+
throw new Error('Must set AVR_HOST environment variable');
|
|
14
|
+
}
|
|
15
|
+
if (process.argv.length > 2) {
|
|
16
|
+
await CliParser_1.CliParser.run({
|
|
17
|
+
name: 'denon-mqtt',
|
|
18
|
+
version: 'dev',
|
|
19
|
+
args: process.argv,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
await CliParser_1.CliParser.run({
|
|
24
|
+
name: 'denon-mqtt',
|
|
25
|
+
version: 'dev',
|
|
26
|
+
args: [
|
|
27
|
+
'node',
|
|
28
|
+
'src/entryPoint.ts',
|
|
29
|
+
'--avr',
|
|
30
|
+
(_a = process.env.AVR_HOST) !== null && _a !== void 0 ? _a : '192.168.1.34',
|
|
31
|
+
'--mqtt',
|
|
32
|
+
'localhost',
|
|
33
|
+
'--username',
|
|
34
|
+
'user',
|
|
35
|
+
'--password',
|
|
36
|
+
'password',
|
|
37
|
+
'--zones',
|
|
38
|
+
'Living|Rumpus|Porch',
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
})()
|
|
43
|
+
.then()
|
|
44
|
+
.catch((error) => {
|
|
45
|
+
console.error(error);
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=entryPoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entryPoint.js","sourceRoot":"","sources":["../src/entryPoint.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAE5B,2CAAwC;AAExC,CAAC,KAAK,IAAI,EAAE;;IACV,gBAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,qBAAS,CAAC,GAAG,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,qBAAS,CAAC,GAAG,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACJ,MAAM;gBACN,mBAAmB;gBACnB,OAAO;gBACP,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,cAAc;gBACtC,QAAQ;gBACR,WAAW;gBACX,YAAY;gBACZ,MAAM;gBACN,YAAY;gBACZ,UAAU;gBACV,SAAS;gBACT,qBAAqB;aACtB;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,EAAE;KACD,IAAI,EAAE;KACN,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|