node-red-contrib-smartnora
Version:
Google Smart Home integration via Smart Nora https://smart-nora.eu/
36 lines (35 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FirebaseSceneDevice = void 0;
const database_1 = require("firebase/database");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const __1 = require("..");
const device_1 = require("./device");
class FirebaseSceneDevice extends device_1.FirebaseDevice {
constructor(cloudId, sync, device, logger, disableValidationErrors) {
super(cloudId, sync, device, logger, disableValidationErrors);
this.pendingScene = (0, database_1.child)(this.noraSpecific, 'pendingScene');
this.activateSceneLocal$ = new rxjs_1.Subject();
this.activateScene$ = (0, rxjs_1.merge)(new rxjs_1.Observable(observer => (0, database_1.onValue)(this.pendingScene, s => {
const value = s.val();
if (value) {
observer.next(value);
}
})).pipe((0, operators_1.switchMap)(async (v) => {
await (0, database_1.remove)(this.pendingScene);
return v;
})), this.activateSceneLocal$).pipe((0, __1.singleton)());
}
async executeCommand(command, params) {
var _a;
if (command === 'action.devices.commands.ActivateScene') {
this.activateSceneLocal$.next({ deactivate: (_a = params === null || params === void 0 ? void 0 : params.deactivate) !== null && _a !== void 0 ? _a : false });
return this.device.state;
}
else {
return await super.executeCommand(command, params);
}
}
}
exports.FirebaseSceneDevice = FirebaseSceneDevice;