mirror of
https://github.com/mtan93/homebridge.git
synced 2026-03-08 05:31:55 +00:00
Beginning tag support enhancements
Generalized tag recognition, tags are now `Homebridge.*` instead of `Homebridge:*`, initial attempt at `IsPrimary` but probably not working right yet.
This commit is contained in:
@@ -83,7 +83,20 @@ ZWayServerPlatform.prototype = {
|
||||
return deferred.promise;
|
||||
}
|
||||
,
|
||||
|
||||
getTagValue: function(vdev, tagStem){
|
||||
if(!(vdev.tags && vdev.tags.length > 0)) return false;
|
||||
var tagStem = "Homebridge." + tagStem;
|
||||
if(vdev.tags.indexOf(tagStem) >= 0) return true;
|
||||
var tags = vdev.tags, l = tags.length, tag;
|
||||
for(var i = 0; i < l; i++){
|
||||
tag = tags[i];
|
||||
if(tag.indexOf(tagStem + ":") === 0){
|
||||
return tag.substr(tagStem.length + 1);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
,
|
||||
accessories: function(callback) {
|
||||
debug("Fetching Z-Way devices...");
|
||||
|
||||
@@ -110,12 +123,24 @@ ZWayServerPlatform.prototype = {
|
||||
var groupedDevices = {};
|
||||
for(var i = 0; i < devices.length; i++){
|
||||
var vdev = devices[i];
|
||||
if(vdev.tags.indexOf("Homebridge:Skip") >= 0) { debug("Tag says skip!"); continue; }
|
||||
if(this.opt_in && vdev.tags.indexOf("Homebridge:Include") < 0) continue;
|
||||
if(this.getTagValue("Skip")) { debug("Tag says skip!"); continue; }
|
||||
if(this.opt_in && !this.getTagValue(vdev, "Include")) continue;
|
||||
var gdid = vdev.id.replace(/^(.*?)_zway_(\d+-\d+)-\d.*/, '$1_$2');
|
||||
var gd = groupedDevices[gdid] || (groupedDevices[gdid] = {devices: [], types: {}, extras: {}, primary: undefined});
|
||||
gd.devices.push(vdev);
|
||||
var tk = ZWayServerPlatform.getVDevTypeKey(vdev);
|
||||
|
||||
// If this is explicitly set as primary, set it now...
|
||||
if(this.getTagValue("IsPrimary")){
|
||||
gd.primary = gd.devices.length - 1;
|
||||
if(gd.types[tk] !== undefined){
|
||||
// everybody out of the way!
|
||||
gd.extras[tk] = gd.extras[tk] || [];
|
||||
gd.extras[tk].push(gd.types[tk]);
|
||||
}
|
||||
gd.types[tk] = gd.primary;
|
||||
}
|
||||
|
||||
if(gd.types[tk] === undefined){
|
||||
gd.types[tk] = gd.devices.length - 1;
|
||||
} else {
|
||||
@@ -136,12 +161,17 @@ ZWayServerPlatform.prototype = {
|
||||
}
|
||||
|
||||
var accessory = null;
|
||||
for(var ti = 0; ti < primaryDeviceClasses.length; ti++){
|
||||
if(gd.primary !== undefined){
|
||||
var pd = gd.devices[gd.primary];
|
||||
var name = pd.metrics && pd.metrics.title ? pd.metrics.title : pd.id;
|
||||
accessory = new ZWayServerAccessory(name, gd, that);
|
||||
}
|
||||
else for(var ti = 0; ti < primaryDeviceClasses.length; ti++){
|
||||
if(gd.types[primaryDeviceClasses[ti]] !== undefined){
|
||||
gd.primary = gd.types[primaryDeviceClasses[ti]];
|
||||
var pd = gd.devices[gd.primary];
|
||||
var name = pd.metrics && pd.metrics.title ? pd.metrics.title : pd.id;
|
||||
debug("Using primary device with type " + primaryDeviceClasses[ti] + ", " + name + " (" + pd.id + ") as primary.");
|
||||
//debug("Using primary device with type " + primaryDeviceClasses[ti] + ", " + name + " (" + pd.id + ") as primary.");
|
||||
accessory = new ZWayServerAccessory(name, gd, that);
|
||||
break;
|
||||
}
|
||||
@@ -303,7 +333,11 @@ ZWayServerAccessory.prototype = {
|
||||
services.push(new Service.Switch(vdev.metrics.title, vdev.id));
|
||||
break;
|
||||
case "switchMultilevel":
|
||||
if(this.platform.getTagValue(vdev, "ServiceType") === "Switch"){
|
||||
services.push(new Service.Switch(vdev.metrics.title, vdev.id));
|
||||
} else {
|
||||
services.push(new Service.Lightbulb(vdev.metrics.title, vdev.id));
|
||||
}
|
||||
break;
|
||||
case "sensorBinary.Door/Window":
|
||||
services.push(new Service.GarageDoorOpener(vdev.metrics.title, vdev.id));
|
||||
@@ -778,7 +812,8 @@ ZWayServerAccessory.prototype = {
|
||||
// Any extra switchMultilevels? Could be a RGBW+W bulb, add them as additional services...
|
||||
if(this.devDesc.extras["switchMultilevel"]) for(var i = 0; i < this.devDesc.extras["switchMultilevel"].length; i++){
|
||||
var xvdev = this.devDesc.devices[this.devDesc.extras["switchMultilevel"][i]];
|
||||
services = services.concat(this.getVDevServices(xvdev));
|
||||
var xservice = this.getVDevServices(xvdev);
|
||||
services = services.concat(xservice);
|
||||
}
|
||||
|
||||
if(this.platform.splitServices){
|
||||
|
||||
Reference in New Issue
Block a user