lavva.exalushome.extalife
Version:
Library implementing communication and abstraction layers for ExtaLife API in ExalusHome system
99 lines • 5.59 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { DataFrame, Method, Status } from "lavva.exalushome/build/js/DataFrame";
import { DependencyContainer } from "lavva.exalushome/build/js/DependencyContainer";
import { ResponseResult } from "lavva.exalushome/build/js/Services/FieldChangeResult";
import { GetParamsErrorCode } from "../../../../../ExtaLife";
import { GetChannelParamsRequest } from "../../../Common/DataRequest";
import { MultisensorChannelOffsetParams, Rcm21Channels } from "../../Rcm21ConfigParams";
import { Rcm21ConfigService } from "../../Rcm21ConfigService";
import { Rcm21VersionedService as PreviousVersionedService } from "../^1.5.0.30/Rcm21VersionedService";
export class Rcm21VersionedService extends PreviousVersionedService {
GetChannelOffsetAsync(device, channel) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
if (channel != Rcm21Channels.TemperatureChannel)
return new ResponseResult(GetParamsErrorCode.InvalidChannelNumber, `Failed to retrieve parameters - function not available on selected channel`);
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new GetChannelOffsetParams(device.Guid, channel.valueOf()), 35000, false));
if (result === null || result === undefined)
return new ResponseResult(GetParamsErrorCode.UnknownError, `Failed to retrieve parameters - unknow error.`);
switch (result.Status) {
case Status.OK:
if (result.Data != null) {
result.Data.Offset = result.Data.Offset / 10;
return result.Data;
}
break;
case Status.ResourceIsNotAvailable:
return new ResponseResult(GetParamsErrorCode.ResourceIsNotAvailable, `Failed to retrieve parameters - cannot communicate with the device.`);
}
return new ResponseResult(GetParamsErrorCode.OtherError, `Failed to retrieve parameters, response error: ${result.Status} data: ${result.Data}`);
});
}
/**
* Function to set offset of reported values ex. sensor reads temperature 22.4 - if we set offset to +2 we recive state with value = 24.4
* If option is not available on given channel function returns Status.WrongData
* @param device
* @param channel
* Option available on channels:
* - TemperatureChannel
*
* @param offset
* @returns
*/
SetChannelOffsetAsync(device, channel, offset) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d;
try {
switch (channel) {
case Rcm21Channels.TemperatureChannel:
if (offset < -5 || offset > 5 || !(offset * Math.pow(10, 1) % 1 == 0))
return Status.WrongData;
break;
default:
return Status.WrongData;
}
const params = new MultisensorChannelOffsetParams();
params.DeviceGuid = device.Guid;
params.Channel = channel;
params.Offset = offset * 10;
const result = yield ((_a = this._connection) === null || _a === void 0 ? void 0 : _a.SendAndWaitForResponseAsync(new SetChannelOffsetParams(params), 35000, false));
if (result == null || result.Status == null) {
(_b = DependencyContainer.Log) === null || _b === void 0 ? void 0 : _b.Error(Rcm21ConfigService.ServiceName, `Failed to change device parameters - unknow error.`);
return Status.FatalError;
}
if (result.Status !== Status.OK)
(_c = DependencyContainer.Log) === null || _c === void 0 ? void 0 : _c.Error(Rcm21ConfigService.ServiceName, `Failed to change device parameters, response status: ${result.Status}`);
return result.Status;
}
catch (error) {
(_d = DependencyContainer.Log) === null || _d === void 0 ? void 0 : _d.Error(Rcm21ConfigService.ServiceName, `Cannot change device parameters. ${error}`);
return Status.FatalError;
}
});
}
}
class GetChannelOffsetParams extends DataFrame {
constructor(guid, channel) {
super();
this.Resource = "/extalife/device/parameters/multisensor/channeloffset";
this.Method = Method.Get;
this.Data = new GetChannelParamsRequest(guid, channel);
}
}
class SetChannelOffsetParams extends DataFrame {
constructor(data) {
super();
this.Resource = "/extalife/device/parameters/multisensor/channeloffset";
this.Method = Method.Put;
this.Data = data;
}
}
//# sourceMappingURL=Rcm21VersionedService.js.map