Hallo Ich nutze das Xiaomi Aqara Gateway Plugin und will das ich mit meinem Aqara Wandschalter (single86) einen Schalter in Homebridge toggle (ein/aus) derzeit gibt mir das PlugIn einen Button mit der Option single_click und einen Virtuellen Schalter der den Button auslöst (so kann man die Funktion die in der MiApp hinterlegt ist nutzen) ich möchte aber mit dem Schalter das Gegenteil erreichen. Der Grund ich möchte so ohne unschöne Szenen erstellen zu müssen eine Hue Lampe einschalten.
Dies ist der Parser für den Button, aber ich komme einfach nicht weiter habe schon einiges versucht aber das Plugin schmiert mir immer einfach ab, brauche einen entscheidenden Hinweis!
Code
const DeviceParser = require('./DeviceParser');
const AccessoryParser = require('./AccessoryParser');
const SwitchVirtualBasePressParser = require('./SwitchVirtualBasePressParser');
class SingleButton86Parser extends DeviceParser {
constructor(platform) {
super(platform);
}
getAccessoriesParserInfo() {
return {
'SingleButton86_StatelessProgrammableSwitch': SingleButton86StatelessProgrammableSwitchParser,
'SingleButton86_Switch_VirtualSinglePress': SingleButton86SwitchVirtualSinglePressParser
// 'SingleButton86_Switch_VirtualDoublePress': SingleButton86SwitchVirtualDoublePressParser
// 'SingleButton86_Switch_VirtualLongPress': SingleButton86SwitchVirtualLongPressParser
}
}
}
module.exports = SingleButton86Parser;
class SingleButton86StatelessProgrammableSwitchParser extends AccessoryParser {
constructor(platform, accessoryType) {
super(platform, accessoryType)
}
getAccessoryCategory(deviceSid) {
return this.Accessory.Categories.PROGRAMMABLE_SWITCH;
}
getAccessoryInformation(deviceSid) {
return {
'Manufacturer': 'Aqara',
'Model': 'Single Button 86',
'SerialNumber': deviceSid
};
}
getServices(jsonObj, accessoryName) {
var that = this;
var result = [];
var service = new that.Service.StatelessProgrammableSwitch(accessoryName);
service.getCharacteristic(that.Characteristic.ProgrammableSwitchEvent);
result.push(service);
var batteryService = new that.Service.BatteryService(accessoryName);
batteryService.getCharacteristic(that.Characteristic.StatusLowBattery);
batteryService.getCharacteristic(that.Characteristic.BatteryLevel);
batteryService.getCharacteristic(that.Characteristic.ChargingState);
result.push(batteryService);
return result;
}
parserAccessories(jsonObj) {
var that = this;
var deviceSid = jsonObj['sid'];
var uuid = that.getAccessoryUUID(deviceSid);
var accessory = that.platform.AccessoryUtil.getByUUID(uuid);
if(accessory) {
var service = accessory.getService(that.Service.StatelessProgrammableSwitch);
var programmableSwitchEventCharacteristic = service.getCharacteristic(that.Characteristic.ProgrammableSwitchEvent);
var value = that.getProgrammableSwitchEventCharacteristicValue(jsonObj, null);
if(null != value) {
programmableSwitchEventCharacteristic.updateValue(value);
}
that.parserBatteryService(accessory, jsonObj);
}
}
getProgrammableSwitchEventCharacteristicValue(jsonObj, defaultValue) {
var value = this.getValueFrJsonObjData(jsonObj, 'channel_0');
if(value === 'click') {
return this.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS;
} else if(value === 'double_click') {
return this.Characteristic.ProgrammableSwitchEvent.DOUBLE_PRESS;
} else if(value === 'long_click_release') {
/* 'long_click_press' */
return this.Characteristic.ProgrammableSwitchEvent.LONG_PRESS;
} else {
return defaultValue;
}
}
}
class SingleButton86SwitchVirtualBasePressParser extends SwitchVirtualBasePressParser {
getAccessoryInformation(deviceSid) {
return {
'Manufacturer': 'Aqara',
'Model': 'Button',
'SerialNumber': deviceSid
};
}
}
class SingleButton86SwitchVirtualSinglePressParser extends SingleButton86SwitchVirtualBasePressParser {
getWriteCommand(deviceSid, value) {
return '{"cmd":"write","model":"86sw1","sid":"' + deviceSid + '","data":"{\\"channel_0\\":\\"click\\", \\"key\\": \\"${key}\\"}"}';
}
doSomething(jsonObj) {
var deviceSid = jsonObj['sid'];
var newObj = JSON.parse("{\"cmd\":\"report\",\"model\":\"86sw1\",\"sid\":\"" + deviceSid + "\",\"data\":\"{\\\"channel_0\\\":\\\"click\\\"}\"}");
this.platform.ParseUtil.parserAccessories(newObj);
}
}
// class SingleButton86SwitchVirtualDoublePressParser extends SingleButton86SwitchVirtualBasePressParser {
// getWriteCommand(deviceSid, value) {
// return '{"cmd":"write","model":"86sw1","sid":"' + deviceSid + '","data":"{\\"channel_0\\":\\"double_click\\", \\"key\\": \\"${key}\\"}"}';
// }
// }
// class SingleButton86SwitchVirtualLongPressParser extends SingleButton86SwitchVirtualBasePressParser {
// getWriteCommand(deviceSid, value) {
// return '{"cmd":"write","model":"86sw1","sid":"' + deviceSid + '","data":"{\\"channel_0\\":\\"long_click_press\\", \\"key\\": \\"${key}\\"}"}';
// }
// }
Alles anzeigen