Skip to content

Commit

Permalink
FirmwareRevision fix
Browse files Browse the repository at this point in the history
  • Loading branch information
donavanbecker committed Oct 14, 2023
1 parent de2c6d5 commit 1c2c64b
Show file tree
Hide file tree
Showing 27 changed files with 305 additions and 1,453 deletions.
214 changes: 113 additions & 101 deletions package-lock.json

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"fakegato-history": "^0.6.4",
"homebridge-lib": "^6.6.1",
"rxjs": "^7.8.1",
"undici": "^5.25.4"
"undici": "^5.26.3"
},
"optionalDependencies": {
"@abandonware/bluetooth-hci-socket": "^0.5.3-10",
Expand All @@ -70,15 +70,15 @@
},
"devDependencies": {
"@types/crypto-js": "^4.1.2",
"@types/node": "^20.8.2",
"@typescript-eslint/eslint-plugin": "^6.7.4",
"@typescript-eslint/parser": "^6.7.4",
"eslint": "^8.50.0",
"@types/node": "^20.8.6",
"@typescript-eslint/eslint-plugin": "^6.7.5",
"@typescript-eslint/parser": "^6.7.5",
"eslint": "^8.51.0",
"eslint-config-prettier": "9.0.0",
"eslint-plugin-prettier": "5.0.0",
"eslint-plugin-prettier": "5.0.1",
"homebridge": "^1.6.1",
"nodemon": "^3.0.1",
"npm-check-updates": "^16.14.4",
"npm-check-updates": "^16.14.6",
"prettier": "3.0.3",
"rimraf": "^5.0.5",
"ts-node": "^10.9.1",
Expand Down
64 changes: 7 additions & 57 deletions src/device/blindtilt.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Context } from 'vm';
import { request } from 'undici';
import { sleep } from '../utils';
import { MqttClient } from 'mqtt';
Expand Down Expand Up @@ -114,20 +113,8 @@ export class BlindTilt {
.getService(this.platform.Service.AccessoryInformation)!
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
.setCharacteristic(this.platform.Characteristic.Model, 'W2701600')
.setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);

if (accessory.context.FirmwareRevision) {
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
+ ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
accessory
.getService(this.platform.Service.AccessoryInformation)!
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.getCharacteristic(this.platform.Characteristic.FirmwareRevision)
.updateValue(accessory.context.FirmwareRevision);
} else {
this.setFirmwareRevision(accessory, device);
}
.setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId)
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision);

// get the WindowCovering service if it exists, otherwise create a new WindowCovering service
// you can create multiple services for each accessory
Expand Down Expand Up @@ -455,6 +442,7 @@ export class BlindTilt {

// FirmwareRevision
this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
}

async refreshStatus(): Promise<void> {
Expand Down Expand Up @@ -897,22 +885,6 @@ export class BlindTilt {
this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
}
// FirmwareRevision
if (this.FirmwareRevision === undefined) {
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
} else {
if (this.device.mqttURL) {
this.mqttPublish('FirmwareRevision', this.FirmwareRevision);
}
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
if (!this.device.blindTilt?.hide_lightsensor) {
this.lightSensorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
}
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
+ `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
}
}

/*
Expand Down Expand Up @@ -1145,32 +1117,6 @@ export class BlindTilt {
//throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
}

async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
await this.refreshStatus();
if (device.firmware) {
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
accessory.context.FirmwareRevision = device.firmware;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
} else if (device.version) {
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
accessory.context.FirmwareRevision = device.version;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
} else {
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
accessory.context.FirmwareRevision = this.platform.version;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
}
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
accessory
.getService(this.platform.Service.AccessoryInformation)!
.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.getCharacteristic(this.platform.Characteristic.FirmwareRevision)
.updateValue(this.FirmwareRevision);
}

async context() {
if (this.CurrentPosition === undefined) {
this.CurrentPosition = 0;
Expand All @@ -1189,6 +1135,10 @@ export class BlindTilt {
} else {
this.PositionState = this.accessory.context.PositionState;
}
if (this.FirmwareRevision === undefined) {
this.FirmwareRevision = this.platform.version;
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
}
}

/**
Expand Down
78 changes: 7 additions & 71 deletions src/device/bot.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Context } from 'vm';
import { request } from 'undici';
import { sleep } from '../utils';
import { interval, Subject } from 'rxjs';
Expand Down Expand Up @@ -94,20 +93,8 @@ export class Bot {
.getService(this.platform.Service.AccessoryInformation)!
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
.setCharacteristic(this.platform.Characteristic.Model, 'SWITCHBOT-BOT-S1')
.setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);

if (accessory.context.FirmwareRevision) {
this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
+ ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
accessory
.getService(this.platform.Service.AccessoryInformation)!
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.getCharacteristic(this.platform.Characteristic.FirmwareRevision)
.updateValue(accessory.context.FirmwareRevision);
} else {
this.setFirmwareRevision(accessory, device);
}
.setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId)
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision);

// deviceType
if (this.botDeviceType === 'switch') {
Expand Down Expand Up @@ -481,6 +468,7 @@ export class Bot {

// FirmwareRevision
this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
}

/**
Expand Down Expand Up @@ -1042,36 +1030,6 @@ export class Bot {
this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
}
// FirmwareRevision
if (this.FirmwareRevision === undefined) {
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
} else {
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
if (this.botDeviceType === 'garagedoor') {
this.garageDoorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'door') {
this.doorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'window') {
this.windowService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'windowcovering') {
this.windowCoveringService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'lock') {
this.lockService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'faucet') {
this.faucetService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'fan') {
this.fanService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'stateful') {
this.statefulProgrammableSwitchService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else if (this.botDeviceType === 'switch') {
this.switchService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
} else {
this.outletService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
}
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
+ `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
}
}

async removeOutletService(accessory: PlatformAccessory): Promise<void> {
Expand Down Expand Up @@ -1363,32 +1321,6 @@ export class Bot {
this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
}

async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
await this.refreshStatus();
if (device.firmware) {
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
accessory.context.FirmwareRevision = device.firmware;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
} else if (device.version) {
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
accessory.context.FirmwareRevision = device.version;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
} else {
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
accessory.context.FirmwareRevision = this.platform.version;
this.FirmwareRevision = accessory.context.FirmwareRevision;
this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
}
this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
accessory
.getService(this.platform.Service.AccessoryInformation)!
.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
.getCharacteristic(this.platform.Characteristic.FirmwareRevision)
.updateValue(this.FirmwareRevision);
}

async deviceType(device: device & devicesConfig): Promise<void> {
if (!device.bot?.deviceType && this.accessory.context.deviceType) {
this.botDeviceType = this.accessory.context.deviceType;
Expand Down Expand Up @@ -1423,6 +1355,10 @@ export class Bot {
} else {
this.StatusLowBattery = this.accessory.context.StatusLowBattery;
}
if (this.FirmwareRevision === undefined) {
this.FirmwareRevision = this.platform.version;
this.accessory.context.FirmwareRevision = this.FirmwareRevision;
}
}

async refreshRate(device: device & devicesConfig): Promise<void> {
Expand Down
Loading

0 comments on commit 1c2c64b

Please sign in to comment.