diff --git a/nymea-app/resources.qrc b/nymea-app/resources.qrc
index e59eda11..276d5240 100644
--- a/nymea-app/resources.qrc
+++ b/nymea-app/resources.qrc
@@ -146,5 +146,6 @@
ui/system/MqttPolicyPage.qml
ui/devicepages/BoolSensorDevicePage.qml
ui/devicepages/PowersocketDevicePage.qml
+ ui/devicelistpages/PowerSocketsDeviceListPage.qml
diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml
index 8c37124e..456764d4 100644
--- a/nymea-app/ui/Nymea.qml
+++ b/nymea-app/ui/Nymea.qml
@@ -52,7 +52,7 @@ ApplicationWindow {
rootItem.handleCloseEvent(close)
}
- property var supportedInterfaces: ["light", "weather", "sensor", "media", "garagegate", "awning", "shutter", "blind", "heating", "smartmeter", "evcharger", "accesscontrol", "button", "powersocket", "notifications", "inputtrigger", "outputtrigger", "gateway"]
+ property var supportedInterfaces: ["light", "weather", "media", "garagegate", "awning", "shutter", "blind", "heating", "powersocket", "sensor", "smartmeter", "evcharger", "accesscontrol", "button", "notifications", "inputtrigger", "outputtrigger", "gateway"]
function interfaceToString(name) {
switch(name) {
case "light":
diff --git a/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml
new file mode 100644
index 00000000..6de2cab5
--- /dev/null
+++ b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml
@@ -0,0 +1,98 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.1
+import QtQuick.Layouts 1.1
+import Nymea 1.0
+import "../components"
+import "../delegates"
+import QtQuick.Controls.Material 2.1
+
+DeviceListPageBase {
+ id: root
+
+ header: GuhHeader {
+ text: qsTr("My %1").arg(app.interfaceToString("powersocket"))
+
+ onBackPressed: {
+ pageStack.pop()
+ }
+ }
+
+ ListView {
+ anchors.fill: parent
+ model: devicesProxy
+ spacing: app.margins
+
+ delegate: Pane {
+ id: itemDelegate
+ width: parent.width
+
+ property var device: devicesProxy.get(index);
+ property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
+
+ property var connectedStateType: deviceClass.stateTypes.findByName("connected");
+ property var connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null
+
+ property var powerStateType: deviceClass.stateTypes.findByName("power");
+ property var powerActionType: deviceClass.actionTypes.findByName("power");
+ property var powerState: device.states.getState(powerStateType.id)
+
+ Material.elevation: 1
+ topPadding: 0
+ bottomPadding: 0
+ leftPadding: 0
+ rightPadding: 0
+ contentItem: ItemDelegate {
+ id: contentItem
+ implicitHeight: nameRow.implicitHeight
+ topPadding: 0
+
+ contentItem: ColumnLayout {
+ spacing: 0
+ RowLayout {
+ enabled: itemDelegate.connectedState === null || itemDelegate.connectedState.value === true
+ id: nameRow
+ z: 2 // make sure the switch in here is on top of the slider, given we cheated a bit and made them overlap
+ spacing: app.margins
+ Item {
+ Layout.preferredHeight: app.iconSize
+ Layout.preferredWidth: height
+ Layout.alignment: Qt.AlignVCenter
+
+ ColorIcon {
+ id: icon
+ anchors.fill: parent
+ color: itemDelegate.connectedState !== null && itemDelegate.connectedState.value === false
+ ? "red"
+ : itemDelegate.powerState.value === true ? app.accentColor : keyColor
+ name: itemDelegate.connectedState !== null && itemDelegate.connectedState.value === false ?
+ "../images/dialog-warning-symbolic.svg"
+ : app.interfaceToIcon("powersocket")
+ }
+ }
+
+ Label {
+ Layout.fillWidth: true
+ text: model.name
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+ Switch {
+ checked: itemDelegate.powerState.value === true
+ onClicked: {
+ var params = [];
+ var param1 = {};
+ param1["paramTypeId"] = itemDelegate.powerActionType.paramTypes.get(0).id;
+ param1["value"] = checked;
+ params.push(param1)
+ engine.deviceManager.executeAction(device.id, itemDelegate.powerActionType.id, params)
+ }
+ }
+ }
+ }
+ onClicked: {
+ enterPage(index, false)
+ }
+ }
+ }
+ }
+}
diff --git a/nymea-app/ui/mainviews/DevicesPageDelegate.qml b/nymea-app/ui/mainviews/DevicesPageDelegate.qml
index 7e1d67b8..a92e3a0b 100644
--- a/nymea-app/ui/mainviews/DevicesPageDelegate.qml
+++ b/nymea-app/ui/mainviews/DevicesPageDelegate.qml
@@ -43,6 +43,9 @@ MainPageTile {
case "extendedShutter":
page = "ShutterDeviceListPage.qml";
break;
+ case "powersocket":
+ page = "PowerSocketsDeviceListPage.qml";
+ break;
default:
page = "GenericDeviceListPage.qml"
}