Skip to content

Commit

Permalink
Add support for Curtain 3
Browse files Browse the repository at this point in the history
  • Loading branch information
mrbungle64 committed Jan 5, 2024
1 parent 953571d commit f7bad14
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
2 changes: 2 additions & 0 deletions lib/adapterHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ function getProductName(model) {
return 'Indoor/Outdoor Hygrometer';
} else if (model === 'c') { // WoCurtain
return 'SwitchBot Curtain';
} else if (model === '{') { // WoCurtain
return 'SwitchBot Curtain 3';
} else if (model === 's') { // WoMotion
return 'SwitchBot Motion Sensor';
} else if (model === 'd') { // WoContact
Expand Down
10 changes: 5 additions & 5 deletions lib/adapterObjects.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const helper = require('./adapterHelper');
*
* @param {Object} adapter
* @param {{address: String, rssi: Number, id: String,
* serviceData: {model: 'H'|'T'|'c'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* serviceData: {model: 'H'|'T'|'c'|'{'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* temperature: {c: Number, f: Number}, humidity: Number,
* position: Number, calibration: Number, lightLevel: String, movement: Boolean, doorState: String}}} data
*/
Expand Down Expand Up @@ -77,8 +77,8 @@ async function createBotObjects(adapter, data) {
await adapter.createObjectNotExists(
data.address + '.humidity', 'Humidity value',
'number', 'value.humidity', false, data.serviceData.humidity, '%');
} else if (data.serviceData.model === 'c') {
// SwitchBot "Curtain"
} else if ((data.serviceData.model === 'c') || (data.serviceData.model === '{')) {
// SwitchBot "Curtain" / "Curtain 3"
await adapter.createChannelNotExists(data.address + '.control');
await adapter.createObjectNotExists(
data.address + '.control.open', 'Sends an open command to the Curtain',
Expand Down Expand Up @@ -141,7 +141,7 @@ async function createBotObjects(adapter, data) {
*
* @param {Object} adapter
* @param {{address: String, rssi: Number, id: String,
* serviceData: {model: 'H'|'T'|'c'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* serviceData: {model: 'H'|'T'|'c'|'{'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* temperature: {c: Number, f: Number}, humidity: Number,
* position: Number, calibration: Number, lightLevel: String, movement: Boolean, doorState: String}}} data
*/
Expand Down Expand Up @@ -172,7 +172,7 @@ async function setAdvertisementData(adapter, data) {
adapter.setStateConditional(data.address + '.temperature', data.serviceData.temperature.c, true);
adapter.setStateConditional(data.address + '.temperatureF', data.serviceData.temperature.f, true);
adapter.setStateConditional(data.address + '.humidity', data.serviceData.humidity, true);
} else if (data.serviceData.model === 'c') {
} else if ((data.serviceData.model === 'c') || (data.serviceData.model === '{')) {
// SwitchBot "Curtain"
adapter.setStateConditional(data.address + '.calibration', data.serviceData.calibration, true);
adapter.setStateConditional(data.address + '.position', data.serviceData.position, true);
Expand Down
13 changes: 7 additions & 6 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class SwitchbotBle extends utils.Adapter {

/**
* @type {{[mac: String]: {address: String, rssi: Number, id: String,
* serviceData: {model: 'H'|'T'|'c'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* serviceData: {model: 'H'|'T'|'c'|'{'|'s'|'d'|'i'|'o'|'w', modelName: String, battery: Number, state: Boolean, mode: Boolean,
* temperature: {c: Number, f: Number}, humidity: Number,
* position: Number, calibration: Number, lightLevel: Number, movement: Boolean, doorState: String},
* on: Boolean}}}
Expand Down Expand Up @@ -151,33 +151,34 @@ class SwitchbotBle extends utils.Adapter {
}

const on = this.switchbotDevice[macAddress].on;
const model = this.switchbotDevice[macAddress].serviceData.model;
switch (cmd) {
case 'turnOn':
if (on) {
this.log.info(`[deviceAction] ${helper.getProductName('H')} (${macAddress}) already turned on`);
} else {
await this.botAction(cmd, macAddress, 'H');
await this.botAction(cmd, macAddress, model);
}
break;
case 'turnOff':
if (!on) {
this.log.info(`[deviceAction] ${helper.getProductName('H')} (${macAddress}) already turned off`);
} else {
await this.botAction(cmd, macAddress, 'H');
await this.botAction(cmd, macAddress, model);
}
break;
case 'press':
case 'up':
case 'down':
await this.botAction(cmd, macAddress, 'H');
await this.botAction(cmd, macAddress, model);
break;
case 'open':
case 'close':
case 'pause':
await this.botAction(cmd, macAddress, 'c');
await this.botAction(cmd, macAddress, model);
break;
case 'runToPos':
await this.botAction(cmd, macAddress, 'c', value);
await this.botAction(cmd, macAddress, model, value);
break;
default:
this.log.debug(`[deviceAction] unhandled control cmd '${cmd}' for device ${macAddress}`);
Expand Down

0 comments on commit f7bad14

Please sign in to comment.