New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

homebridge-panasonic-heat-pump

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

homebridge-panasonic-heat-pump - npm Package Compare versions

Comparing version 1.1.1 to 1.1.2

8

dist/panasonicApi.d.ts

@@ -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

94

dist/panasonicApi.js

@@ -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

198

dist/platformAccessory.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc