js-broadlink
Version:
Broadlink JS ============
190 lines • 6.53 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const broadlink_1 = require("./broadlink");
const prompts_1 = __importDefault(require("prompts"));
const clipboardy = __importStar(require("clipboardy"));
const exitOnCancel = () => process.exit(0);
(async function () {
const action = await prompts_1.default([
{
type: "select",
name: "value",
message: "What would you like to do?",
choices: [
{ title: "Discover", value: "discover" },
{ title: "Setup", value: "setup" },
],
},
], { onCancel: exitOnCancel });
switch (action.value) {
case "discover":
await discover();
break;
case "setup":
await setup();
break;
}
})();
async function setup() {
const response = await prompts_1.default([
{
type: "text",
name: "ssid",
message: "SSID?",
},
{
type: "password",
name: "password",
message: "Password?",
},
{
type: "select",
name: "wireless",
message: "Wireless?",
choices: [
{
title: "None",
value: broadlink_1.SecurityMode.None,
},
{
title: "WPA1",
value: broadlink_1.SecurityMode.WPA1,
},
{
title: "WPA2",
value: broadlink_1.SecurityMode.WPA2,
},
{
title: "WPA1/2",
value: broadlink_1.SecurityMode.WPA1or2,
},
],
},
], { onCancel: exitOnCancel });
try {
await broadlink_1.Setup(response.ssid, response.password, response.wireless);
}
catch (e) {
console.error(`could not set up device: error=${e}`);
}
}
async function discover() {
const sleep = (s) => new Promise((resolve) => setTimeout(resolve, s * 1000));
const response = await prompts_1.default([
{
type: "number",
name: "secs",
message: "Timeout (secs)",
initial: 2,
},
], { onCancel: exitOnCancel });
console.log("\nSearching...\n");
try {
let devices = [];
const stream = broadlink_1.Discover(response.secs * 1000);
stream.listen((device) => devices.push(device));
await sleep(response.secs);
if (!devices.length) {
throw "no devices found";
}
const selectedDevice = await prompts_1.default([
{
type: "select",
name: "value",
message: "Which Device?",
choices: devices.map((d) => {
return {
value: d,
title: `${d.hostport} / ${d.macAddress} (${d.deviceType})`,
};
}),
},
], { onCancel: exitOnCancel });
const d = selectedDevice.value;
while (true) {
const action = await prompts_1.default([
{
type: "select",
name: "value",
message: "What to do?",
choices: [
{
title: "Enter Learning Mode",
value: "learn",
},
{
title: "Exit Learning Mode",
value: "exitLearn",
},
{
title: "Read Learned Code",
value: "read",
},
{
title: "Send Code",
value: "send",
},
],
},
], { onCancel: exitOnCancel });
try {
switch (action.value) {
case "learn":
await d.enterLearning();
break;
case "exitLearn":
await d.exitLearning();
break;
case "read":
const data = await d.checkData();
const b64 = data.toString("base64");
// copy(b64);
clipboardy.write(b64);
console.log("data:", b64, "copied to clipboard");
break;
case "send":
const resp = await prompts_1.default([
{
type: "text",
message: "Data?",
name: "value",
},
]);
const b = Buffer.from(resp.value, "base64");
await d.sendData(b);
break;
}
}
catch (e) {
console.error(`could not perform action; action=${action.value}, error=${e}`);
}
}
}
catch (e) {
console.error(`could not discover device: error=${e}`);
}
}
//# sourceMappingURL=cli.js.map