node-red-contrib-voice-assistant
Version:
一个小度-小爱-猫精音箱控制NODE-RED自定义设备的节点
288 lines (287 loc) • 8.96 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
const baseAttr_1 = __importDefault(require("./baseAttr"));
let TargetTemperature = class TargetTemperature extends baseAttr_1.default {
constructor(model) {
super(model);
this.min = 17;
this.max = 30;
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
serviceData.service_data.temperature = this.changeVal(val);
serviceData.service = 'set_temperature';
return serviceData;
}
getState() {
return this.attributes.temperature || 25;
}
changeVal(val) {
if (val < this.min)
return this.min;
if (val > this.max)
return this.max;
return val;
}
saveCustomState(val) {
this.model.attributes.temperature = val;
}
};
TargetTemperature = __decorate([
(0, index_1.Attribute)('target-temperature')
], TargetTemperature);
let Power = class Power extends baseAttr_1.default {
changeVal(val) {
if (this.domain === 'cover') {
return val ? 'open_cover' : 'close_cover';
}
return val ? true : false;
}
getState() {
return this.model.state === 'off' ? false : true;
}
saveCustomState(val) {
this.model.state = val ? 'on' : 'off';
}
getCallServiceData(val) {
const data = this.callServiceTpl();
if (!val)
data.service = 'turn_off';
else if (this.domain === 'climate') {
data.service_data.hvac_mode = 'auto';
data.service = 'set_hvac_mode';
}
return data;
}
};
Power = __decorate([
(0, index_1.Attribute)('power')
], Power);
//灯亮度
let Brightness = class Brightness extends baseAttr_1.default {
changeVal(val) {
console.log('changeVal', val);
return val;
}
getState() {
if (this.attributes.brightness === undefined)
throw new Error('无此属性');
return (this.attributes.brightness / 255) * 100;
}
saveCustomState(val) {
this.attributes.brightness = (val * 255) / 100;
}
getCallServiceData(val) {
const data = this.callServiceTpl();
data.service_data.brightness = (val / 100) * 255;
return data;
}
};
Brightness = __decorate([
(0, index_1.Attribute)('brightness')
], Brightness);
let Color = class Color extends baseAttr_1.default {
changeVal(val) {
console.log('changeVal', val);
return val;
}
getState() {
if (this.attributes.rgb_color === undefined)
throw new Error('无此属性');
return this.attributes.rgb_color;
}
saveCustomState(val) {
this.attributes.rgb_color = val;
}
getCallServiceData(val) {
const data = this.callServiceTpl();
//if (!val) data.service = 'turn_off';
data.service_data.rgb_color = val;
return data;
}
};
Color = __decorate([
(0, index_1.Attribute)('color')
], Color);
let Mode = class Mode extends baseAttr_1.default {
getCallServiceData(val) {
if (this.domain === 'light')
return;
const serviceData = this.callServiceTpl();
if (this.domain === 'climate') {
serviceData.service_data.hvac_mode = this.changeVal(val);
serviceData.service = 'set_hvac_mode';
}
return serviceData;
}
changeVal(val) {
if (this.domain === 'climate') {
return this.attributes.hvac_modes[val];
}
return -1;
}
getState() {
if (this.domain === 'climate') {
return this.attributes.hvac_modes.indexOf(this.state);
}
}
saveCustomState(val) {
if (this.domain === 'climate')
this.model.state = val;
else if (this.domain === 'fan')
this.attributes.preset_mode = val;
}
};
Mode = __decorate([
(0, index_1.Attribute)('mode')
], Mode);
let FanLevel = class FanLevel extends baseAttr_1.default {
constructor(model) {
super(model);
this.max = 3;
this.min = 0;
}
changeVal(val) {
val = val < this.min ? this.min : val > this.max ? this.max : val;
if (this.domain === 'climate') {
return this.attributes.fan_modes[val];
}
if (this.domain === 'fan') {
return val === 3 ? 100 : val === 2 ? 60 : 30;
}
}
getState() {
if (this.domain === 'climate') {
this.attributes.fan_mode = this.attributes.fan_mode || 'auto';
return this.attributes.fan_modes.indexOf(this.attributes.fan_mode);
}
if (this.domain === 'fan') {
return this.attributes.percentage > 60 ? 3 : this.attributes.percentage <= 60 && this.attributes.percentage > 30 ? 2 : 1;
}
return;
}
saveCustomState(val) {
if (this.domain === 'climate')
this.attributes.fan_mode = val;
else if (this.domain === 'fan')
this.attributes.percentage = val;
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
val = this.changeVal(val);
if (this.domain === 'climate') {
serviceData.service_data.fan_mode = val;
serviceData.service = 'set_fan_mode';
}
else if (this.domain === 'fan') {
serviceData.service = 'set_percentage';
serviceData.service_data.percentage = val;
}
return serviceData;
}
};
FanLevel = __decorate([
(0, index_1.Attribute)('fan-level')
], FanLevel);
let Temperature = class Temperature extends baseAttr_1.default {
changeVal(val) {
return val;
}
getState() {
return this.attributes.current_temperature || 19;
}
saveCustomState(val) {
this.attributes.current_temperature = val;
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
return serviceData;
}
};
Temperature = __decorate([
(0, index_1.Attribute)('temperature')
], Temperature);
let Oscillate = class Oscillate extends baseAttr_1.default {
changeVal(val) {
return val;
}
getState() {
return this.attributes.oscillating;
}
saveCustomState(val) {
this.attributes.oscillating = val;
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
serviceData.service = 'oscillate';
serviceData.service_data.oscillating = val;
return serviceData;
}
};
Oscillate = __decorate([
(0, index_1.Attribute)('oscillate')
], Oscillate);
let Control = class Control extends baseAttr_1.default {
changeVal(val) {
return val === 1 ? 'open' : val === 2 ? 'close' : 'stop';
}
getState() {
return this.model.state;
}
saveCustomState(val) {
this.model.state = val === 1 ? 'open' : val === 2 ? 'close' : 'stop';
}
getCallServiceData(val) {
/* {"domain":"cover","service":"stop_cover","service_data":{"entity_id":"cover.ke_ting_chuang_lian"}} */
const serviceData = this.callServiceTpl();
serviceData.service = this.changeVal(val) + '_cover';
return serviceData;
}
};
Control = __decorate([
(0, index_1.Attribute)('control')
], Control);
let currentPosition = class currentPosition extends baseAttr_1.default {
changeVal(val) {
return val;
}
getState() {
return this.attributes.current_position;
}
saveCustomState(val) {
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
return serviceData;
}
};
currentPosition = __decorate([
(0, index_1.Attribute)('current_position')
], currentPosition);
let TargetPosition = class TargetPosition extends baseAttr_1.default {
changeVal(val) {
return val;
}
getState() {
return this.attributes.current_position;
}
saveCustomState(val) {
}
getCallServiceData(val) {
const serviceData = this.callServiceTpl();
return serviceData;
}
};
TargetPosition = __decorate([
(0, index_1.Attribute)('target-position')
], TargetPosition);