homebridge-panasonic-heat-pump
Advanced tools
Comparing version 1.1.1 to 1.1.2
@@ -6,2 +6,7 @@ export declare enum PanasonicSpecialStatus { | ||
} | ||
export declare enum PanasonicTargetOperationMode { | ||
Heating = 2, | ||
Cooling = 3, | ||
Auto = 8 | ||
} | ||
export declare class PanasonicApi { | ||
@@ -17,3 +22,6 @@ private username; | ||
setTankTargetHeat(deviceId: string, temperature: number, retried?: boolean): any; | ||
setOperationMode(deviceId: string, operationMode: PanasonicTargetOperationMode, retried?: boolean): any; | ||
setOperationStatus(deviceId: string, isOn: boolean, retried?: boolean): any; | ||
setTankStatus(deviceId: string, isOn: boolean, retried?: boolean): any; | ||
} | ||
//# sourceMappingURL=panasonicApi.d.ts.map |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.PanasonicApi = exports.PanasonicSpecialStatus = void 0; | ||
exports.PanasonicApi = exports.PanasonicTargetOperationMode = exports.PanasonicSpecialStatus = void 0; | ||
const axios_1 = __importDefault(require("axios")); | ||
@@ -15,2 +15,8 @@ var PanasonicSpecialStatus; | ||
})(PanasonicSpecialStatus = exports.PanasonicSpecialStatus || (exports.PanasonicSpecialStatus = {})); | ||
var PanasonicTargetOperationMode; | ||
(function (PanasonicTargetOperationMode) { | ||
PanasonicTargetOperationMode[PanasonicTargetOperationMode["Heating"] = 2] = "Heating"; | ||
PanasonicTargetOperationMode[PanasonicTargetOperationMode["Cooling"] = 3] = "Cooling"; | ||
PanasonicTargetOperationMode[PanasonicTargetOperationMode["Auto"] = 8] = "Auto"; | ||
})(PanasonicTargetOperationMode = exports.PanasonicTargetOperationMode || (exports.PanasonicTargetOperationMode = {})); | ||
async function wait(time) { | ||
@@ -145,8 +151,92 @@ return new Promise(resolve => setTimeout(resolve, time)); | ||
} | ||
await this.ensureAuthenticated(); | ||
await this.ensureAuthenticated(true); | ||
return this.setTankTargetHeat(deviceId, temperature, true); | ||
} | ||
} | ||
async setOperationMode(deviceId, operationMode, retried = false) { | ||
await this.ensureAuthenticated(); | ||
const response = await (0, axios_1.default)({ | ||
'method': 'POST', | ||
'url': `https://aquarea-smart.panasonic.com/remote/v1/api/devices/${deviceId}`, | ||
'headers': { | ||
'Content-Type': 'application/json', | ||
'Cookie': `accessToken=${this.accessToken}; selectedDeviceId=${deviceId};`, | ||
'Origin': 'https://aquarea-smart.panasonic.com', | ||
'Referer': 'https://aquarea-smart.panasonic.com/remote/a2wStatusDisplay', | ||
}, | ||
'data': JSON.stringify({ | ||
'status': [ | ||
{ | ||
'deviceGuid': deviceId, | ||
'operationMode': operationMode, | ||
}, | ||
], | ||
}), | ||
}); | ||
if (response.status === 403) { | ||
if (retried) { | ||
throw new Error('Cannot authenticate'); | ||
} | ||
await this.ensureAuthenticated(true); | ||
return this.setOperationMode(deviceId, operationMode, true); | ||
} | ||
} | ||
async setOperationStatus(deviceId, isOn, retried = false) { | ||
await this.ensureAuthenticated(); | ||
const response = await (0, axios_1.default)({ | ||
'method': 'POST', | ||
'url': `https://aquarea-smart.panasonic.com/remote/v1/api/devices/${deviceId}`, | ||
'headers': { | ||
'Content-Type': 'application/json', | ||
'Cookie': `accessToken=${this.accessToken}; selectedDeviceId=${deviceId};`, | ||
'Origin': 'https://aquarea-smart.panasonic.com', | ||
'Referer': 'https://aquarea-smart.panasonic.com/remote/a2wStatusDisplay', | ||
}, | ||
'data': JSON.stringify({ | ||
'status': [ | ||
{ | ||
'deviceGuid': deviceId, | ||
'operationStatus': isOn ? 1 : 0, | ||
}, | ||
], | ||
}), | ||
}); | ||
if (response.status === 403) { | ||
if (retried) { | ||
throw new Error('Cannot authenticate'); | ||
} | ||
await this.ensureAuthenticated(true); | ||
return this.setOperationStatus(deviceId, isOn, true); | ||
} | ||
} | ||
async setTankStatus(deviceId, isOn, retried = false) { | ||
await this.ensureAuthenticated(); | ||
const response = await (0, axios_1.default)({ | ||
'method': 'POST', | ||
'url': `https://aquarea-smart.panasonic.com/remote/v1/api/devices/${deviceId}`, | ||
'headers': { | ||
'Content-Type': 'application/json', | ||
'Cookie': `accessToken=${this.accessToken}; selectedDeviceId=${deviceId};`, | ||
'Origin': 'https://aquarea-smart.panasonic.com', | ||
'Referer': 'https://aquarea-smart.panasonic.com/remote/a2wStatusDisplay', | ||
}, | ||
'data': JSON.stringify({ | ||
'status': [ | ||
{ | ||
'deviceGuid': deviceId, | ||
'tankStatus': [{ 'operationStatus': isOn ? 1 : 0 }], | ||
}, | ||
], | ||
}), | ||
}); | ||
if (response.status === 403) { | ||
if (retried) { | ||
throw new Error('Cannot authenticate'); | ||
} | ||
await this.ensureAuthenticated(true); | ||
return this.setTankStatus(deviceId, isOn, true); | ||
} | ||
} | ||
} | ||
exports.PanasonicApi = PanasonicApi; | ||
//# sourceMappingURL=panasonicApi.js.map |
@@ -29,2 +29,23 @@ "use strict"; | ||
}).onGet(async () => (await this.getReadings()).temperatureNow); | ||
this.service.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState) | ||
.onSet(async (state) => { | ||
if (state === this.platform.Characteristic.TargetHeatingCoolingState.OFF) { | ||
// turn off floors | ||
this.panasonicApi.setOperationStatus(this.accessory.context.device.uniqueId, false); | ||
return; | ||
} | ||
this.panasonicApi.setOperationStatus(this.accessory.context.device.uniqueId, false); | ||
const operationMode = (() => { | ||
switch (state) { | ||
case this.platform.Characteristic.TargetHeatingCoolingState.COOL: | ||
return panasonicApi_1.PanasonicTargetOperationMode.Cooling; | ||
case this.platform.Characteristic.TargetHeatingCoolingState.HEAT: | ||
return panasonicApi_1.PanasonicTargetOperationMode.Heating; | ||
case this.platform.Characteristic.TargetHeatingCoolingState.AUTO: | ||
default: | ||
return panasonicApi_1.PanasonicTargetOperationMode.Auto; | ||
} | ||
})(); | ||
this.panasonicApi.setOperationMode(this.accessory.context.device.uniqueId, operationMode); | ||
}); | ||
// Water | ||
@@ -36,7 +57,21 @@ this.tankService = this.accessory.getService('Water') | ||
panasonicApi.setTankTargetHeat(this.accessory.context.device.uniqueId, temp); | ||
this.tankService.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState). | ||
updateValue(this.platform.Characteristic.CurrentHeaterCoolerState.IDLE); | ||
}).onGet(async () => { | ||
return (await this.getReadings()).tankTemperatureSet; | ||
}); | ||
this.tankService.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState).onSet(async (state) => { | ||
if (state === this.platform.Characteristic.TargetHeatingCoolingState.OFF || | ||
state === this.platform.Characteristic.TargetHeatingCoolingState.COOL) { | ||
// turn off water heating | ||
this.tankService.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState) | ||
.updateValue(this.platform.Characteristic.TargetHeatingCoolingState.OFF); | ||
this.panasonicApi.setTankStatus(this.accessory.context.device.uniqueId, false); | ||
return; | ||
} | ||
// turn on water heating | ||
this.tankService.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState) | ||
.updateValue(this.platform.Characteristic.TargetHeatingCoolingState.HEAT); | ||
this.panasonicApi.setTankStatus(this.accessory.context.device.uniqueId, true); | ||
}).onGet(async () => { | ||
return (await this.getReadings()).tankTargetHeatingCoolingState; | ||
}); | ||
this.tankService.getCharacteristic(this.platform.Characteristic.CurrentTemperature).setProps({ | ||
@@ -91,83 +126,86 @@ minValue: 0, | ||
} | ||
const details = await this.panasonicApi.loadDeviceDetails(this.accessory.context.device.uniqueId); | ||
const operationalZone = details.zoneStatus.find(z => z.temparatureNow !== null); | ||
const temperatureNow = operationalZone === null || operationalZone === void 0 ? void 0 : operationalZone.temparatureNow; | ||
const isActive = details.operationStatus === 1; | ||
const direction = details.direction; | ||
// What is currently on | ||
const isHeatingOn = direction === 1; | ||
const isTankOn = direction === 2; | ||
// if you need to return an error to show the device as "Not Responding" in the Home app: | ||
// throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE); | ||
const operationMode = details.operationMode; | ||
const heatingCoolingState = (() => { | ||
if (!isHeatingOn) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.OFF; | ||
} | ||
if (operationMode === 1) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT; | ||
} | ||
if (operationMode === 2) { | ||
const loadReadings = async () => { | ||
const details = await this.panasonicApi.loadDeviceDetails(this.accessory.context.device.uniqueId); | ||
const operationalZone = details.zoneStatus.find(z => z.temparatureNow !== null); | ||
const temperatureNow = operationalZone === null || operationalZone === void 0 ? void 0 : operationalZone.temparatureNow; | ||
const isActive = details.operationStatus === 1; | ||
const direction = details.direction; | ||
// What is currently on | ||
const isHeatingOn = direction === 1; | ||
const isTankOn = direction === 2; | ||
// if you need to return an error to show the device as "Not Responding" in the Home app: | ||
// throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE); | ||
const operationMode = details.operationMode; | ||
const heatingCoolingState = (() => { | ||
if (!isHeatingOn) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.OFF; | ||
} | ||
if (operationMode === 1) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT; | ||
} | ||
if (operationMode === 2) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL; | ||
} | ||
if (operationMode === 3) { | ||
// AUTO | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT; | ||
} | ||
if (operationMode === 4) { | ||
// AUTO | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL; | ||
} | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL; | ||
} | ||
if (operationMode === 3) { | ||
// AUTO | ||
})(); | ||
const targetHeatingCoolingState = (() => { | ||
if (details.operationStatus === 0) { | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
} | ||
switch (operationMode) { | ||
case 1: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.HEAT; | ||
case 2: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.COOL; | ||
case 3: | ||
case 4: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.AUTO; | ||
} | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
})(); | ||
const ecoModeIsActive = details.specialStatus.find(s => s.specialMode === 1).operationStatus === 1; | ||
const comfortModeIsActive = details.specialStatus.find(s => s.specialMode === 2).operationStatus === 1; | ||
const outdoorTemperatureNow = details.outdoorNow; | ||
const tankTemperatureNow = details.tankStatus[0].temparatureNow; | ||
const tankTemperatureSet = details.tankStatus[0].heatSet; | ||
const tankIsActive = details.tankStatus[0].operationStatus === 1; | ||
const tankHeatingCoolingState = (() => { | ||
if (!isTankOn) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.OFF; | ||
} | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT; | ||
} | ||
if (operationMode === 4) { | ||
// AUTO | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL; | ||
} | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL; | ||
})(); | ||
const targetHeatingCoolingState = (() => { | ||
if (details.operationStatus === 0) { | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
} | ||
switch (operationMode) { | ||
case 1: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.HEAT; | ||
case 2: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.COOL; | ||
case 3: | ||
case 4: | ||
return this.platform.Characteristic.TargetHeatingCoolingState.AUTO; | ||
} | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
})(); | ||
const ecoModeIsActive = details.specialStatus.find(s => s.specialMode === 1).operationStatus === 1; | ||
const comfortModeIsActive = details.specialStatus.find(s => s.specialMode === 2).operationStatus === 1; | ||
const outdoorTemperatureNow = details.outdoorNow; | ||
const tankTemperatureNow = details.tankStatus[0].temparatureNow; | ||
const tankTemperatureSet = details.tankStatus[0].heatSet; | ||
const tankIsActive = details.tankStatus[0].operationStatus === 1; | ||
const tankHeatingCoolingState = (() => { | ||
if (!isTankOn) { | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.OFF; | ||
} | ||
return this.platform.Characteristic.CurrentHeatingCoolingState.HEAT; | ||
})(); | ||
const tankTargetHeatingCoolingState = (() => { | ||
if (!tankIsActive) { | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
} | ||
return this.platform.Characteristic.TargetHeatingCoolingState.HEAT; | ||
})(); | ||
const d = { | ||
temperatureNow, | ||
heatingCoolingState, | ||
targetHeatingCoolingState, | ||
outdoorTemperatureNow, | ||
tankTemperatureNow, | ||
tankTemperatureSet, | ||
tankHeatingCoolingState, | ||
tankTargetHeatingCoolingState, | ||
isActive, | ||
ecoModeIsActive, | ||
comfortModeIsActive, | ||
tankTemperatureMax: details.tankStatus[0].heatMax, | ||
tankTemperatureMin: details.tankStatus[0].heatMin, | ||
})(); | ||
const tankTargetHeatingCoolingState = (() => { | ||
if (!tankIsActive) { | ||
return this.platform.Characteristic.TargetHeatingCoolingState.OFF; | ||
} | ||
return this.platform.Characteristic.TargetHeatingCoolingState.HEAT; | ||
})(); | ||
return { | ||
temperatureNow, | ||
heatingCoolingState, | ||
targetHeatingCoolingState, | ||
outdoorTemperatureNow, | ||
tankTemperatureNow, | ||
tankTemperatureSet, | ||
tankHeatingCoolingState, | ||
tankTargetHeatingCoolingState, | ||
isActive, | ||
ecoModeIsActive, | ||
comfortModeIsActive, | ||
tankTemperatureMax: details.tankStatus[0].heatMax, | ||
tankTemperatureMin: details.tankStatus[0].heatMin, | ||
}; | ||
}; | ||
this.lastDetails = d; | ||
return d; | ||
const readingsPromise = loadReadings(); | ||
this.lastDetails = readingsPromise; | ||
return readingsPromise; | ||
} | ||
@@ -174,0 +212,0 @@ async updateReadings() { |
{ | ||
"displayName": "Homebridge Panasonic Heat Pump", | ||
"name": "homebridge-panasonic-heat-pump", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"description": "Allows basic control of Panasonic Heat Pump (AQUAREA)", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
183418
3482