Merge PR #349: Fix interfaces handling

This commit is contained in:
Jenkins nymea 2020-03-29 01:09:31 +01:00
commit ad6af08710
4 changed files with 225 additions and 139 deletions

View File

@ -135,7 +135,6 @@ void DeviceManager::addDevice(const QUuid &deviceClassId, const QString &name, c
void DeviceManager::notificationReceived(const QVariantMap &data)
{
QString notification = data.value("notification").toString();
qDebug() << "*** Notification received:" << notification;
if (notification == "Devices.StateChanged") {
// qDebug() << "Device state changed" << data.value("params");
Device *dev = m_devices->getDevice(data.value("params").toMap().value("deviceId").toUuid());

View File

@ -46,172 +46,246 @@ Interfaces::Interfaces(QObject *parent) : QAbstractListModel(parent)
{
ParamTypes *pts = nullptr;
addInterface("battery", tr("Battery powered devices"));
addStateType("battery", "batteryCritical", QVariant::Bool, false,
tr("Battery level is critical"),
tr("Battery level entered critical state"));
addInterface("accesscontrol", tr("Access control systems"));
addEventType("accesscontrol", "accessGranted", tr("Access granted"), new ParamTypes());
addEventType("accesscontrol", "accessDenied", tr("Access denied"), new ParamTypes());
addInterface("connectable", tr("Connectable things"));
addStateType("connectable", "connected", QVariant::Bool, false, tr("Connected"), tr("Connected changed"));
addInterface("notifications", tr("Notification services"));
pts = createParamTypes("title", tr("Title"), QVariant::String);
addParamType(pts, "body", tr("Message body"), QVariant::String);
addActionType("notifications", "notify", tr("Send notification"), pts);
addInterface("gateway", tr("Gateways"), {"connectable"});
addInterface("power", tr("Powered things"));
addStateType("power", "power", QVariant::Bool, true,
tr("Thing is turned on"),
tr("A thing is turned on or off"),
tr("Turn things on or off"));
addInterface("account", tr("Accounts"), {"gateway"});
addStateType("account", "loggedIn", QVariant::Bool, false, tr("User is logged in"), tr("User login changed"));
addInterface("light", tr("Lights"));
addStateType("light", "power", QVariant::Bool, true,
tr("Light is turned on"),
tr("A light is turned on or off"),
tr("Turn lights on or off"));
addInterface("alert", tr("Alert"));
addActionType("alert", "alert", tr("Alert"), new ParamTypes());
addInterface("dimmablelight", tr("Dimmable lights"), {"light"});
addStateType("dimmablelight", "brightness", QVariant::Int, true,
tr("Light's brightness is"),
tr("A light's brightness has changed"),
tr("Set lights brightness"), 0, 100);
addInterface("colortemperaturelight", tr("Color temperature light"), {"light", "dimmablelight"});
addStateType("colortemperaturelight", "colorTemperature", QVariant::Int, true,
tr("Lights color temperature is"),
tr("A lights color temperature has changed"),
tr("Set lights color temperature"), 0, 100);
addInterface("colorlight", tr("Color lights"), {"light", "dimmablelight", "colortemperaturelight"});
addStateType("colorlight", "color", QVariant::Color, true,
tr("Light's color is"),
tr("A light's color has changed"),
tr("Set lights color"));
addInterface("temperaturesensor", tr("Temperature sensors"));
addStateType("temperaturesensor", "temperature", QVariant::Double, false,
tr("Temperature"),
tr("Temperature has changed"));
addInterface("simpleclosable", tr("Closable things"));
addInterface("simpleclosable", tr("Simple closables"));
addActionType("simpleclosable", "open", tr("Open"), new ParamTypes());
addActionType("simpleclosable", "close", tr("Close"), new ParamTypes());
addInterface("presencesensor", tr("Presence sensors"));
addStateType("presencesensor", "isPresent", QVariant::Bool, false,
tr("Is present"),
tr("Presence changed"));
addInterface("closable", tr("Closables"), {"simpleclosable"});
addActionType("closable", "stop", tr("Stop"), new ParamTypes());
addInterface("blind", tr("Blinds"));
addActionType("blind", "close", tr("Close"), new ParamTypes());
addActionType("blind", "open", tr("Open"), new ParamTypes());
addInterface("awning", tr("Awnings"), {"closable"});
addInterface("awning", tr("Awnings"));
addActionType("awning", "close", tr("Close"), new ParamTypes());
addActionType("awning", "open", tr("Open"), new ParamTypes());
addInterface("barcodescanner", tr("Barcode scanners"));
pts = createParamTypes("content", tr("Content"), QVariant::String);
addEventType("barcodescanner", "codeScanned", tr("Code scanned"), pts);
addInterface("shutter", tr("Shutters"));
addActionType("shutter", "close", tr("Close"), new ParamTypes());
addActionType("shutter", "open", tr("Open"), new ParamTypes());
addInterface("battery", tr("Battery powered devices"));
addStateType("battery", "batteryCritical", QVariant::Bool, false, tr("Battery level is critical"), tr("Battery level entered critical state"));
addInterface("garagegate", tr("Garage gates"));
addActionType("garagegate", "close", tr("Close"), new ParamTypes());
addActionType("garagegate", "open", tr("Open"), new ParamTypes());
addInterface("batterylevel", tr("Battery powered devices"), {"battery"});
addStateType("batterylevel", "batteryLevel", QVariant::Int, false, tr("Battery level"), tr("Battery level changed"), QString(), 0, 100);
addInterface("co2sensor", tr("Air sensors"));
addStateType("co2sensor", "co2", QVariant::Double, false,
tr("Air quality"),
tr("Air quality changed"));
addInterface("blind", tr("Blinds"), {"closable"});
addInterface("humiditysensor", tr("Humidity sensors"));
addStateType("humiditysensor", "humidity", QVariant::Double, false,
tr("Humidity"),
tr("Humidity changed"));
addInterface("button", tr("Switches"));
addEventType("button", "pressed", tr("Button pressed"), new ParamTypes());
addInterface("daylightsensor", tr("Daylight sensors"));
addStateType("daylightsensor", "daylight", QVariant::Bool, false,
tr("Daylight"),
tr("Daylight changed"));
addInterface("sensor", tr("Sensor"));
addInterface("lightsensor", tr("Light intensity sensors"));
addStateType("lightsensor", "lightIntensity", QVariant::Bool, false,
tr("Light intensity"),
tr("Light intensity changed"));
addInterface("closablesensor", tr("Closable sensors"), {"sensor"});
addStateType("closablesensor", "closed", QVariant::Bool, false, tr("Closed"), tr("Opened or closed"));
addInterface("co2sensor", tr("CO2 sensor"), {"sensor"});
addStateType("co2sensor", "co2", QVariant::Double, false, tr("CO2 level"), tr("CO2 level changed"));
addInterface("power", tr("Powered things"));
addStateType("power", "power", QVariant::Bool, true, tr("Thing is turned on"), tr("A thing is turned on or off"), tr("Turn things on or off"));
addInterface("light", tr("Lights"));
addStateType("light", "power", QVariant::Bool, true, tr("Light is turned on"), tr("A light is turned on or off"), tr("Turn lights on or off"));
addInterface("dimmablelight", tr("Dimmable lights"), {"light"});
addStateType("dimmablelight", "brightness", QVariant::Int, true, tr("Light's brightness is"), tr("A light's brightness has changed"), tr("Set lights brightness"), 0, 100);
addInterface("colortemperaturelight", tr("Color temperature light"), {"light", "dimmablelight"});
addStateType("colortemperaturelight", "colorTemperature", QVariant::Int, true, tr("Lights color temperature is"), tr("A lights color temperature has changed"), tr("Set lights color temperature"), 0, 100);
addInterface("colorlight", tr("Color lights"), {"light", "dimmablelight", "colortemperaturelight"});
addStateType("colorlight", "color", QVariant::Color, true, tr("Light's color is"), tr("A light's color has changed"), tr("Set lights color"));
addInterface("conductivitysensor", tr("Conductivity sensors"), {"sensor"});
addStateType("conductivitysensor", "conductivity", QVariant::Double, false, tr("Conductivity"), tr("Conductivity changed"));
addInterface("daylightsensor", tr("Daylight sensors"), {"sensor"});
addStateType("daylightsensor", "daylight", QVariant::Bool, false, tr("Daylight"), tr("Daylight changed"));
addInterface("doorbell", tr("Doorbells"));
addEventType("doorbell", "doorbellPressed", tr("Doorbell pressed"), new ParamTypes());
addInterface("evcharger", tr("EV charger"));
addStateType("evcharger", "power", QVariant::Bool, true,
tr("Charging"),
tr("Charging changed"),
tr("Enable charging"));
addStateType("evcharger", "power", QVariant::Bool, true, tr("Charging"), tr("Charging changed"), tr("Enable charging"));
addInterface("volumecontroller", tr("Speakers"));
addActionType("volumecontroller", "increaseVolume", tr("Increase volume"), new ParamTypes());
addActionType("volumecontroller", "decreaseVolume", tr("Decrease volume"), new ParamTypes());
addInterface("extendedclosable", tr("Closable things"), {"closable"});
addStateType("extendedclosable", "moving", QVariant::Bool, false, tr("Moving"), tr("Moving changed"));
addInterface("gateway", tr("Gateways"));
addStateType("gateway", "connected", QVariant::Bool, false,
tr("Connected"),
tr("Connected changed"));
addInterface("extendedawning", tr("Awnings"), {"awning", "extendedclosable"});
addInterface("extendedblind", tr("Blinds"), {"blind", "extendedclosable"});
addInterface("extendedevcharger", tr("EV chargers"), {"evcharger"});
addStateType("extendedevcharger", "maxChargingCurrent", QVariant::UInt, true, tr("Maximum charging current"), tr("Maximum charging current changed"), tr("Set maximum charging current"));
addInterface("heating", tr("Heatings"));
addStateType("heating", "power", QVariant::Bool, true,
tr("Heating enabled"),
tr("Heating enabled changed"),
tr("Enable heating"));
addStateType("heating", "power", QVariant::Bool, true, tr("Heating enabled"), tr("Heating enabled changed"), tr("Enable heating"));
addInterface("mediaplayer", tr("Media players"));
addStateType("mediaplayer", "playbackStatus", QVariant::String, true,
tr("Playback status"),
tr("Playback status changed"),
tr("Set playback status"));
addInterface("extendedheating", tr("Heatings"), {"heating"});
addStateType("extendedheating", "percentage", QVariant::Int, true, tr("Percentage"), tr("Percentage changed"), tr("Set percentage"), 0, 100);
addInterface("mediacontroller", tr("Media controllers"));
addInterface("media", tr("Media"));
addInterface("mediacontroller", tr("Media controllers"), {"media"});
addActionType("mediacontroller", "play", tr("Start playback"), new ParamTypes());
addActionType("mediacontroller", "stop", tr("Stop playback"), new ParamTypes());
addActionType("mediacontroller", "pause", tr("Pause playback"), new ParamTypes());
addActionType("mediacontroller", "skipBack", tr("Skip back"), new ParamTypes());
addActionType("mediacontroller", "skipNext", tr("Skip next"), new ParamTypes());
addInterface("powersocket", tr("Power sockets"));
addStateType("powersocket", "power", QVariant::Bool, true,
tr("Powered"),
tr("Turned on/off"),
tr("Turn on/off"));
addInterface("extendedmediacontroller", tr("Media controllers"), {"mediacontroller"});
addActionType("extendedmediacontroller", "fastForward", tr("Fast forward"), new ParamTypes());
addActionType("extendedmediacontroller", "fastRewind", tr("Fast rewind"), new ParamTypes());
addInterface("weather", tr("Weather"));
addStateType("weather", "weatherCondition", QVariant::String, false,
tr("Weather description"),
tr("Weather description changed"));
addStateType("weather", "weatherDescription", QVariant::String, false,
tr("Weather condition"),
tr("Weather condition changed"));
addStateType("weather", "temperature", QVariant::Double, false,
tr("Temperature"),
tr("Temperature changed"));
addStateType("weather", "humidity", QVariant::Double, false,
tr("Humidity"),
tr("Humidity changed"));
addStateType("weather", "humidity", QVariant::Double, false,
tr("Pressure"),
tr("Pressure changed"));
addStateType("weather", "windSpeed", QVariant::Double, false,
tr("Wind seed"),
tr("Wind speed changed"));
addStateType("weather", "windDirection", QVariant::Int, false,
tr("Wind direction"),
tr("Wind direction changed"));
addInterface("navigationpad", tr("Navigation pad"));
pts = createParamTypes("to", tr("To"), QVariant::String, QVariant(), {"up", "down", "left", "right", "enter", "back", "menu", "info", "home"});
addActionType("navigationpad", "navigate", tr("Navigate"), pts);
addInterface("media", tr("Media"));
addInterface("extendednavigationpad", tr("Navigation pad"));
pts = createParamTypes("to", tr("To"), QVariant::String, QVariant(), {"up", "down", "left", "right", "enter", "back", "menu", "info", "home"});
addActionType("extendednavigationpad", "navigate", tr("Navigate"), pts);
addInterface("sensor", tr("Sensor"));
addInterface("shutter", tr("Shutters"), {"simpleclosable"});
addInterface("extendedshutter", tr("Shutters"), {"shutter", "extendedclosable"});
addInterface("smartmeter", tr("Smart meter"));
addInterface("button", tr("Button"));
addEventType("button", "pressed", tr("Button pressed"), new ParamTypes());
addInterface("smartmeterconsumer", tr("Smart meters"), {"smartmeter"});
addStateType("smartmeterconsumer", "totalEnergyConsumed", QVariant::Double, false, tr("Total energy consumed"), tr("Total energy consumed changed"));
addInterface("extendedsmartmeterconsumer", tr("Smart meters"), {"smartmeterconsumer"});
addStateType("extendedsmartmeterconsumer", "currentPower", QVariant::Double, false, tr("Current power"), tr("Current power changed"));
addInterface("smartmeterproducer", tr("Smart meters"), {"smartmeter"});
addStateType("smartmeterproducer", "totalEnergyProduced", QVariant::Double, false, tr("Total energy producedd"), tr("Total energy produced changed"));
addInterface("extendedsmartmeterproducer", tr("Smart meters"), {"smartmeterproducer"});
addStateType("extendedsmartmeterproducer", "currentPower", QVariant::Double, false, tr("Current power"), tr("Current power changed"));
addInterface("extendedvolumecontroller", tr("Volume control"), {"media"});
addStateType("extendedvolumecontroller", "mute", QVariant::Bool, true, tr("Mute"), tr("Muted"), tr("Mute"));
addStateType("extendedvolumecontroller", "volume", QVariant::Bool, true, tr("Volume"), tr("Volume changed"), tr("Set volume"), 0, 100);
addInterface("useraccesscontrol", tr("User access control systems"), {"accesscontrol"});
addStateType("useraccesscontrol", "users", QVariant::StringList, false, tr("Users"), tr("Users changed"));
pts = createParamTypes("user", tr("User"), QVariant::String);
addEventType("useraccesscontrol", "accessGranted", tr("Access granted"), pts);
pts = createParamTypes("user", tr("User"), QVariant::String);
addActionType("useraccesscontrol", "addUser", tr("Add user"), pts);
pts = createParamTypes("user", tr("User"), QVariant::String);
addActionType("useraccesscontrol", "removeUser", tr("Remove user"), pts);
addInterface("fingerprintreader", tr("Fingerprint readers"), {"useraccesscontrol"});
addStateType("useraccesscontrol", "users", QVariant::StringList, false, tr("Users"), tr("Users changed"));
pts = createParamTypes("user", tr("User"), QVariant::String);
addParamType(pts, "finger", tr("Finger"), QVariant::String);
addEventType("useraccesscontrol", "accessGranted", tr("Access granted"), pts);
pts = createParamTypes("user", tr("User"), QVariant::String);
addParamType(pts, "finger", tr("Finger"), QVariant::String);
addActionType("useraccesscontrol", "addUser", tr("Add user"), pts);
pts = createParamTypes("user", tr("User"), QVariant::String);
addActionType("useraccesscontrol", "removeUser", tr("Remove user"), pts);
addInterface("garagegate", tr("Garage doors"), {"closable"});
addStateType("garagegate", "state", QVariant::String, false, tr("State"), tr("State changed"));
addStateType("garagegate", "intermediatePosition", QVariant::Bool, false, tr("Intermediate position"), tr("Intermediate position changed"));
addInterface("humiditysensor", tr("Humidity sensors"), {"sensor"});
addStateType("humiditysensor", "humidity", QVariant::Double, false, tr("Humidity"), tr("Humidity changed"));
addInterface("inputtrigger", tr("Incoming events"));
addEventType("inputtrigger", "triggered", tr("Triggered"), new ParamTypes());
addInterface("lightsensor", tr("Light sensors"), {"sensor"});
addStateType("lightsensor", "lightIntensity", QVariant::Double, false, tr("Light intensity"), tr("Light intensity changed"));
addInterface("longpressbutton", tr("Buttons"), {"button"});
addEventType("longpressbutton", "longPressed", tr("Long pressed"), new ParamTypes());
addInterface("mediametadataprovider", tr("Media sources"), {"media"});
addStateType("mediametadataprovider", "title", QVariant::String, false, tr("Title"), tr("Title changed"));
addStateType("mediametadataprovider", "artist", QVariant::String, false, tr("Artist"), tr("Artist changed"));
addStateType("mediametadataprovider", "collection", QVariant::String, false, tr("Collection"), tr("Collection changed"));
addStateType("mediametadataprovider", "artwork", QVariant::String, false, tr("Artwork"), tr("Artwork changed"));
addInterface("mediaplayer", tr("Media players"), {"media"});
addStateType("mediaplayer", "playbackStatus", QVariant::String, true, tr("Playback status"), tr("Playback status changed"), tr("Set playback status"));
addInterface("moisturesensor", tr("Moisture sensors"), {"sensor"});
addStateType("moisturesensor", "moisture", QVariant::Double, false, tr("Moisture"), tr("Moisture changed"));
addInterface("multibutton", tr("Switches"), {"button"});
pts = createParamTypes("buttonName", tr("Button name"), QVariant::String);
addEventType("multibutton", "pressed", tr("Pressed"), pts);
addInterface("noisesensor", tr("Noise sensors"), {"sensor"});
addStateType("noisesensor", "noise", QVariant::Double, false, tr("Noise level"), tr("Noise level changed"));
addInterface("notifications", tr("Notification services"));
pts = createParamTypes("title", tr("Title"), QVariant::String);
addParamType(pts, "body", tr("Message body"), QVariant::String);
addActionType("notifications", "notify", tr("Send notification"), pts);
addInterface("outputtrigger", tr("Outgoing events"));
addActionType("outputtrigger", "trigger", tr("Trigger"), new ParamTypes());
addInterface("powersocket", tr("Power sockets"));
addStateType("powersocket", "power", QVariant::Bool, true, tr("Powered"), tr("Turned on/off"), tr("Turn on/off"));
addInterface("powerswitch", tr("Power switches"), {"button", "power"});
addInterface("presencesensor", tr("Presence sensors"), {"sensor"});
addStateType("presencesensor", "isPresent", QVariant::Bool, false, tr("Is present"), tr("Presence changed"));
addInterface("pressuresensor", tr("Pressure sensors"), {"sensor"});
addStateType("pressuresensor", "pressure", QVariant::Double, false, tr("Pressure"), tr("Pressure changed"));
addInterface("shufflerepeat", tr("Media player"));
addStateType("shufflerepeat", "shuffle", QVariant::Bool, true, tr("Shuffle"), tr("Shuffle changed"), tr("Set shuffle"));
addStateType("shufflerepeat", "repeat", QVariant::Bool, true, tr("Repeat"), tr("Repeat changed"), tr("Set repeat"));
addInterface("smartlock", tr("Smart locks"));
addStateType("smartlock", "state", QVariant::String, false, tr("State"), tr("State changed"));
addActionType("smartlock", "unlatch", tr("Unlatch"), new ParamTypes());
addInterface("temperaturesensor", tr("Temperature sensors"), {"sensor"});
addStateType("temperaturesensor", "temperature", QVariant::Double, false, tr("Temperature"), tr("Temperature has changed"));
addInterface("thermostat", tr("Thermostats"));
addStateType("thermostat", "targetTemperature", QVariant::Double, true, tr("Target temperature"), tr("Target temperature changed"), tr("Set target temperature"));
addInterface("volumecontroller", tr("Speakers"));
addActionType("volumecontroller", "increaseVolume", tr("Increase volume"), new ParamTypes());
addActionType("volumecontroller", "decreaseVolume", tr("Decrease volume"), new ParamTypes());
addInterface("weather", tr("Weather"));
addStateType("weather", "weatherCondition", QVariant::String, false, tr("Weather description"), tr("Weather description changed"));
addStateType("weather", "weatherDescription", QVariant::String, false, tr("Weather condition"), tr("Weather condition changed"));
addStateType("weather", "temperature", QVariant::Double, false, tr("Temperature"), tr("Temperature changed"));
addStateType("weather", "humidity", QVariant::Double, false, tr("Humidity"), tr("Humidity changed"));
addStateType("weather", "humidity", QVariant::Double, false, tr("Pressure"), tr("Pressure changed"));
addStateType("weather", "windSpeed", QVariant::Double, false, tr("Wind seed"), tr("Wind speed changed"));
addStateType("weather", "windDirection", QVariant::Int, false, tr("Wind direction"), tr("Wind direction changed"));
addInterface("windspeedsensor", tr("Wind speed sensors"), {"sensor"});
addStateType("windspeedsensor", "windSpeed", QVariant::Double, false, tr("Wind speed"), tr("Wind speed change"));
addInterface("wirelessconnectable", tr("Wireless devices"), {"connectable"});
addStateType("wirelessconnectable", "signalStrength", QVariant::UInt, false, tr("Signal strength"), tr("Signal strength changed"));
addInterface("account", tr("Accounts"), {"gateway"});
addStateType("account", "loggedIn", QVariant::Bool, false,
tr("User is logged in"),
tr("User login changed"));
}
int Interfaces::rowCount(const QModelIndex &parent) const
@ -348,6 +422,16 @@ ParamTypes *Interfaces::createParamTypes(const QString &name, const QString &dis
return pts;
}
ParamTypes *Interfaces::createParamTypes(const QString &name, const QString &displayName, QVariant::Type type, const QVariant &defaultValue, const QVariantList &allowedValues)
{
ParamTypes *pts = new ParamTypes();
ParamType *pt = new ParamType(name, type, defaultValue);
pt->setDisplayName(displayName);
pt->setAllowedValues(allowedValues);
pts->addParamType(pt);
return pts;
}
void Interfaces::addParamType(ParamTypes *paramTypes, const QString &name, const QString &displayName, QVariant::Type type, const QVariant &defaultValue, const QVariant &minValue, const QVariant &maxValue)
{
ParamType *pt = new ParamType(name, type, defaultValue);

View File

@ -70,6 +70,7 @@ private:
void addStateType(const QString &interfaceName, const QString &name, QVariant::Type type, bool writable, const QString &displayName, const QString &displayNameEvent, const QString &displayNameAction = QString(), const QVariant &min = QVariant(), const QVariant &max = QVariant());
ParamTypes* createParamTypes(const QString &name, const QString &displayName, QVariant::Type type, const QVariant &defaultValue = QVariant(), const QVariant &minValue = QVariant(), const QVariant &maxValue = QVariant());
ParamTypes* createParamTypes(const QString &name, const QString &displayName, QVariant::Type type, const QVariant &defaultValue, const QVariantList &allowedValues);
void addParamType(ParamTypes* paramTypes, const QString &name, const QString &displayName, QVariant::Type type, const QVariant &defaultValue = QVariant(), const QVariant &minValue = QVariant(), const QVariant &maxValue = QVariant());
};

View File

@ -37,8 +37,8 @@ import "../components"
MainPageTile {
id: root
text: interfaceToString(iface.name).toUpperCase()
iconName: interfaceToIcon(iface.name)
text: iface ? iface.displayName.toUpperCase() : qsTr("uncategorized").toUpperCase()
iconName: iface ? interfaceToIcon(iface.name) : interfaceToIcon("uncategorized")
iconColor: app.accentColor
disconnected: devicesSubProxyConnectables.count > 0
batteryCritical: devicesSubProxyBattery.count > 0
@ -50,6 +50,12 @@ MainPageTile {
onClicked: {
var page;
if (!iface) {
page = "GenericDeviceListPage.qml"
pageStack.push(Qt.resolvedUrl("../devicelistpages/" + page), {hiddenInterfaces: app.supportedInterfaces, filterTagId: root.filterTagId})
return;
}
switch (iface.name) {
case "heating":
case "sensor":
@ -88,12 +94,8 @@ MainPageTile {
default:
page = "GenericDeviceListPage.qml"
}
if (iface.name === "uncategorized") {
pageStack.push(Qt.resolvedUrl("../devicelistpages/" + page), {hiddenInterfaces: app.supportedInterfaces, filterTagId: root.filterTagId})
} else {
print("<entering for shown interfaces:", iface.name)
pageStack.push(Qt.resolvedUrl("../devicelistpages/" + page), {shownInterfaces: [iface.name], filterTagId: root.filterTagId})
}
print("entering for shown interfaces:", iface.name)
pageStack.push(Qt.resolvedUrl("../devicelistpages/" + page), {shownInterfaces: [iface.name], filterTagId: root.filterTagId})
}
DevicesProxy {