diff --git a/CMakeLists.txt b/CMakeLists.txt
index c8c89b7..8134163 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -114,6 +114,7 @@ qt_add_qml_module(evcharger-app
SchedulerPage.qml
SecurityPage.qml
SelectLogicModeItem.qml
+ SelectPhaseSwitchModeItem.qml
SensorsConfigurationPage.qml
SetPriceLimitPage.qml
SettingsTabPage.qml
diff --git a/ChargerTabPage.qml b/ChargerTabPage.qml
index 1589774..55f3d10 100644
--- a/ChargerTabPage.qml
+++ b/ChargerTabPage.qml
@@ -190,10 +190,32 @@ AnimatedStackView {
component: "DailyTripPage.qml"
}
+ ApiKeyValueHelper {
+ id: requestedCurrent
+ deviceConnection: theDeviceConnection
+ apiKey: "amp"
+ }
+
+ ApiKeyValueHelper {
+ id: phaseSwitchMode
+ deviceConnection: theDeviceConnection
+ apiKey: "psm"
+ }
+
NavigationItem {
iconSource: "material-icons/grid_guides.svg"
title: qsTr("Charging speed")
- description: qsTr("%0 Ampere & %1-phase").arg(0).arg(0)
+ description: qsTr("%0 & %1")
+ .arg(qsTr("%0 Ampere").arg(requestedCurrent.value))
+ .arg((function(){
+ switch (phaseSwitchMode.value)
+ {
+ case 0: return qsTr("Automatic phase selection");
+ case 1: return qsTr("1-phase");
+ case 2: return qsTr("3-phase");
+ case 3: return qsTr("Unknown phase selection (%0)").arg(phaseSwitchMode.value);
+ }
+ })())
component: "ChargingSpeedPage.qml"
}
}
diff --git a/ChargingSpeedPage.qml b/ChargingSpeedPage.qml
index 7a22441..3fb9eeb 100644
--- a/ChargingSpeedPage.qml
+++ b/ChargingSpeedPage.qml
@@ -6,8 +6,12 @@ NavigationPage {
title: qsTr("Charging Speed")
Text {
- text: "TODO"
+ text: "current limits TODO"
- Layout.fillHeight: true
+ Layout.fillWidth: true
+ }
+
+ SelectPhaseSwitchModeItem {
+ Layout.fillWidth: true
}
}
diff --git a/SelectPhaseSwitchModeItem.qml b/SelectPhaseSwitchModeItem.qml
new file mode 100644
index 0000000..fac88ba
--- /dev/null
+++ b/SelectPhaseSwitchModeItem.qml
@@ -0,0 +1,61 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import EVChargerApp
+
+WhiteBox {
+ ColumnLayout {
+ anchors.fill: parent
+
+ SetValueHelper {
+ id: valueChanger
+ deviceConnection: theDeviceConnection
+ apiKey: "psm"
+ onResponseChanged: {
+ automaticButton.checked = Qt.binding(() => automaticButton.selectedMode)
+ singlePhaseButton.checked = Qt.binding(() => singlePhaseButton.selectedMode)
+ threePhaseButton.checked = Qt.binding(() => threePhaseButton.selectedMode)
+ }
+ }
+
+ Text {
+ Layout.fillWidth: true
+
+ font.bold: true
+ text: qsTr("Phase switching")
+ }
+
+ TabBar {
+ id: tabBar
+
+ Layout.fillWidth: true
+
+ Component.onCompleted: {
+ background.color = "#EEEEEE"
+ background.radius = 5
+ }
+
+ TabButton {
+ id: automaticButton
+ property bool selectedMode: phaseSwitchMode.value == 0
+ checked: selectedMode
+ text: qsTr("Automatic")
+ onClicked: valueChanger.setValue(0)
+ }
+ TabButton {
+ id: singlePhaseButton
+ property bool selectedMode: phaseSwitchMode.value == 1
+ checked: selectedMode
+ text: qsTr("1-Phase")
+ onClicked: valueChanger.setValue(1)
+ }
+ TabButton {
+ id: threePhaseButton
+ property bool selectedMode: phaseSwitchMode.value == 2
+ checked: selectedMode
+ text: qsTr("3-Phase")
+ onClicked: valueChanger.setValue(2)
+ }
+ }
+ }
+}
diff --git a/devicesmodel.cpp b/devicesmodel.cpp
index 7222bf9..44e734f 100644
--- a/devicesmodel.cpp
+++ b/devicesmodel.cpp
@@ -162,19 +162,18 @@ bool DevicesModel::removeRows(int row, int count, const QModelIndex &parent)
void DevicesModel::error(QZeroConf::error_t error)
{
- qDebug() << "error()" << error;
+ qDebug() << error;
}
void DevicesModel::serviceAdded(QZeroConfService service)
{
- qDebug() << "serviceAdded()" << service->host();
auto txt = service->txt();
auto serialIter = txt.find("serial");
if (serialIter == txt.end())
{
- qWarning() << "serial missing" << txt;
+ qWarning() << service->host() << "serial missing" << txt;
return;
}
auto serial = *serialIter;
@@ -182,7 +181,7 @@ void DevicesModel::serviceAdded(QZeroConfService service)
auto manufacturerIter = txt.find("manufacturer");
if (manufacturerIter == txt.end())
{
- qWarning() << "manufacturer missing" << txt;
+ qWarning() << service->host() << "manufacturer missing" << txt;
return;
}
auto manufacturer = *manufacturerIter;
@@ -190,7 +189,7 @@ void DevicesModel::serviceAdded(QZeroConfService service)
auto deviceTypeIter = txt.find("devicetype");
if (deviceTypeIter == txt.end())
{
- qWarning() << "devicetype missing" << txt;
+ qWarning() << service->host() << "devicetype missing" << txt;
return;
}
auto deviceType = *deviceTypeIter;
@@ -198,7 +197,7 @@ void DevicesModel::serviceAdded(QZeroConfService service)
auto friendlyNameIter = txt.find("friendly_name");
if (friendlyNameIter == txt.end())
{
- qWarning() << "friendly_name missing" << txt;
+ qWarning() << service->host() << "friendly_name missing" << txt;
return;
}
auto friendlyName = *friendlyNameIter;
@@ -209,6 +208,8 @@ void DevicesModel::serviceAdded(QZeroConfService service)
if (iter == std::end(m_foundDevices))
{
+ qDebug() << "new device" << service->host() << serial << manufacturer << deviceType << friendlyName;
+
beginInsertRows({}, m_foundDevices.size(), m_foundDevices.size());
m_foundDevices.emplace_back(FoundDevice {
/*.serial{ */ std::move(serial) /*}*/,
@@ -224,6 +225,8 @@ void DevicesModel::serviceAdded(QZeroConfService service)
}
else
{
+ qDebug() << "device already in list" << service->host() << serial << manufacturer << deviceType << friendlyName;
+
iter->manufacturer = std::move(manufacturer);
iter->deviceType = std::move(deviceType);
iter->friendlyName = std::move(friendlyName);
@@ -243,21 +246,19 @@ void DevicesModel::serviceAdded(QZeroConfService service)
void DevicesModel::serviceUpdated(QZeroConfService service)
{
- qDebug() << "serviceUpdated()" << service->host();
+ qDebug() << service->host();
// TODO
}
void DevicesModel::serviceRemoved(QZeroConfService service)
{
- qDebug() << "serviceRemoved()" << service->host();
-
const auto &txt = service->txt();
auto serialIter = txt.find("serial");
if (serialIter == txt.constEnd())
{
- qWarning() << "serial missing" << txt;
+ qWarning() << service->host() << "serial missing" << txt;
return;
}
auto serial = *serialIter;
@@ -268,12 +269,14 @@ void DevicesModel::serviceRemoved(QZeroConfService service)
if (iter == std::end(m_foundDevices))
{
- qWarning() << "serial not found!" << serial;
+ qWarning() << service->host() << "serial not found!" << serial;
return;
}
if (!iter->saved)
{
+ qDebug() << "device removed" << service->host() << serial;
+
const auto row = std::distance(std::begin(m_foundDevices), iter);
beginRemoveRows({}, row, row);
m_foundDevices.erase(iter);
@@ -281,6 +284,8 @@ void DevicesModel::serviceRemoved(QZeroConfService service)
}
else
{
+ qDebug() << "device kept" << service->host() << serial;
+
iter->hostName.clear();
iter->ip = {};
const auto index = createIndex(std::distance(std::begin(m_foundDevices), iter), 0);
diff --git a/i18n/qml_de.ts b/i18n/qml_de.ts
index 9937862..f885b1a 100644
--- a/i18n/qml_de.ts
+++ b/i18n/qml_de.ts
@@ -393,16 +393,50 @@
%0 km
-
-
+
+
Charging speed
Ladegeschwindigkeit
-
-
+
+
+ %0 & %1
+
+
+
+
+
+ %0 Ampere
+
+
+
+
+
+ Automatic phase selection
+
+
+
+
+
+ 1-phase
+
+
+
+
+
+ 3-phase
+
+
+
+
+
+ Unknown phase selection (%0)
+
+
+
%0 Ampere & %1-phase
- %0 Ampere & %1-phasic
+ %0 Ampere & %1-phasic
Connect the cable to charge your car
@@ -2110,6 +2144,33 @@
Energie zur bestimmten Zeit
+
+ SelectPhaseSwitchModeItem
+
+
+
+ Phase switching
+
+
+
+
+
+ Automatic
+
+
+
+
+
+ 1-Phase
+
+
+
+
+
+ 3-Phase
+
+
+
SendMessageHelper
diff --git a/qmldir b/qmldir
index fe9f1bc..02e7962 100644
--- a/qmldir
+++ b/qmldir
@@ -64,6 +64,7 @@ EVChargerApp 1.0 SchedulerDayPage.qml
EVChargerApp 1.0 SchedulerPage.qml
EVChargerApp 1.0 SecurityPage.qml
EVChargerApp 1.0 SelectLogicModeItem.qml
+EVChargerApp 1.0 SelectPhaseSwitchModeItem.qml
EVChargerApp 1.0 SensorsConfigurationPage.qml
EVChargerApp 1.0 SetPriceLimitPage.qml
EVChargerApp 1.0 SettingsTabPage.qml