diff --git a/mennekes/integrationpluginmennekes.cpp b/mennekes/integrationpluginmennekes.cpp
index 798472c..6f280b7 100644
--- a/mennekes/integrationpluginmennekes.cpp
+++ b/mennekes/integrationpluginmennekes.cpp
@@ -1,4 +1,4 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+#/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2022, nymea GmbH
* Contact: contact@nymea.io
@@ -121,7 +121,6 @@ void IntegrationPluginMennekes::discoverThings(ThingDiscoveryInfo *info)
descriptor.setThingId(existingThings.first()->id());
}
-
ParamList params;
params << Param(amtronHCC3ThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
// Note: if we discover also the port and modbusaddress, we must fill them in from the discovery here, for now everywhere the defaults...
@@ -136,7 +135,7 @@ void IntegrationPluginMennekes::discoverThings(ThingDiscoveryInfo *info)
AmtronCompact20Discovery *discovery = new AmtronCompact20Discovery(hardwareManager()->modbusRtuResource(), info);
connect(discovery, &AmtronCompact20Discovery::discoveryFinished, info, [this, info, discovery](bool modbusMasterAvailable){
if (!modbusMasterAvailable) {
- info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bis, 2 stop bits and no parity first."));
+ info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bits, 2 stop bits and no parity first."));
return;
}
@@ -182,40 +181,52 @@ void IntegrationPluginMennekes::setupThing(ThingSetupInfo *info)
}
MacAddress macAddress = MacAddress(thing->paramValue(amtronECUThingMacAddressParamTypeId).toString());
- if (!macAddress.isValid()) {
- qCWarning(dcMennekes()) << "The configured mac address is not valid" << thing->params();
- info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The MAC address is not known. Please reconfigure the thing."));
+ QHostAddress address = QHostAddress(thing->paramValue(amtronECUThingAddressParamTypeId).toString());
+
+ if (macAddress.isNull() && address.isNull()) {
+ qCWarning(dcMennekes()) << "There is no MAC address and no host address configured in the thing params. Cannot set up thing" << thing;
+ info->finish(Thing::ThingErrorMissingParameter, QT_TR_NOOP("Failed to set up the connection to the EV charger. Please specify either manually the IP address or get the MAC address using the network discovery."));
return;
}
- NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(macAddress);
- m_monitors.insert(thing, monitor);
+ if (!macAddress.isNull()) {
+ // ########### MAC based connection
+ qCDebug(dcMennekes()) << "Setting up MAC address based ModbusTcp connection for" << thing;
+ NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(macAddress);
+ m_monitors.insert(thing, monitor);
- QHostAddress address = monitor->networkDeviceInfo().address();
- if (address.isNull()) {
- qCWarning(dcMennekes()) << "Cannot set up thing. The host address is not known yet...";
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
- info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("The host address is not known yet. Trying later again."));
- return;
- }
-
- connect(info, &ThingSetupInfo::aborted, monitor, [=](){
- if (m_monitors.contains(thing)) {
- qCDebug(dcMennekes()) << "Unregistering monitor because setup has been aborted.";
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
- }
- });
-
- if (monitor->reachable()) {
- setupAmtronECUConnection(info);
- } else {
- qCDebug(dcMennekes()) << "Waiting for the network monitor to get reachable before continue to set up the connection" << thing->name() << address.toString() << "...";
- connect(monitor, &NetworkDeviceMonitor::reachableChanged, info, [=](bool reachable){
- if (reachable) {
- qCDebug(dcMennekes()) << "The monitor for thing setup" << thing->name() << "is now reachable. Continue setup...";
- setupAmtronECUConnection(info);
+ // Make sure the monitor gets cleaned up when setup gets aborted
+ connect(info, &ThingSetupInfo::aborted, monitor, [this, thing](){
+ if (m_monitors.contains(thing)) {
+ qCDebug(dcMennekes()) << "Unregistering monitor because setup has been aborted.";
+ hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
}
});
+
+ // If this is the initial setup, wait for the monitor to be reachable and make sure
+ // we have an IP address, otherwise let the monitor do his work
+ if (info->isInitialSetup()) {
+ // Continue with setup only if we know that the network device is reachable
+ if (monitor->reachable()) {
+ setupAmtronECUConnection(info);
+ } else {
+ // otherwise wait until we reach the networkdevice before setting up the device
+ qCDebug(dcMennekes()) << "Network device" << thing->name() << "is not reachable yet. Continue with the setup once reachable.";
+ connect(monitor, &NetworkDeviceMonitor::reachableChanged, info, [=](bool reachable){
+ if (reachable) {
+ qCDebug(dcMennekes()) << "Network device" << thing->name() << "is now reachable. Continue with the setup...";
+ setupAmtronECUConnection(info);
+ }
+ });
+ }
+ } else {
+ // Continue setup with monitor...
+ setupAmtronECUConnection(info);
+ }
+ } else {
+ // ########### IP based connection
+ qCDebug(dcMennekes()) << "Setting up IP address based ModbusTcp connection for" << thing;
+ setupAmtronECUConnection(info);
}
return;
@@ -232,41 +243,54 @@ void IntegrationPluginMennekes::setupThing(ThingSetupInfo *info)
}
MacAddress macAddress = MacAddress(thing->paramValue(amtronHCC3ThingMacAddressParamTypeId).toString());
- if (!macAddress.isValid()) {
- qCWarning(dcMennekes()) << "The configured mac address is not valid" << thing->params();
- info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The MAC address is not known. Please reconfigure the thing."));
+ QHostAddress address = QHostAddress(thing->paramValue(amtronHCC3ThingAddressParamTypeId).toString());
+
+ if (macAddress.isNull() && address.isNull()) {
+ qCWarning(dcMennekes()) << "There is no MAC address and no host address configured in the thing params. Cannot set up thing" << thing;
+ info->finish(Thing::ThingErrorMissingParameter, QT_TR_NOOP("Failed to set up the connection to the EV charger. Please specify either manually the IP address or get the MAC address using the network discovery."));
return;
}
- NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(macAddress);
- m_monitors.insert(thing, monitor);
+ if (!macAddress.isNull()) {
+ // ########### MAC based connection
+ qCDebug(dcMennekes()) << "Setting up MAC address based ModbusTcp connection for" << thing;
+ NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(macAddress);
+ m_monitors.insert(thing, monitor);
- QHostAddress address = monitor->networkDeviceInfo().address();
- if (address.isNull()) {
- qCWarning(dcMennekes()) << "Cannot set up thing. The host address is not known yet...";
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
- info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("The host address is not known yet. Trying later again."));
- return;
- }
-
- connect(info, &ThingSetupInfo::aborted, monitor, [=](){
- if (m_monitors.contains(thing)) {
- qCDebug(dcMennekes()) << "Unregistering monitor because setup has been aborted.";
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
- }
- });
-
- if (monitor->reachable()) {
- setupAmtronHCC3Connection(info);
- } else {
- qCDebug(dcMennekes()) << "Waiting for the network monitor to get reachable before continue to set up the connection" << thing->name() << address.toString() << "...";
- connect(monitor, &NetworkDeviceMonitor::reachableChanged, info, [=](bool reachable){
- if (reachable) {
- qCDebug(dcMennekes()) << "The monitor for thing setup" << thing->name() << "is now reachable. Continue setup...";
- setupAmtronHCC3Connection(info);
+ // Make sure the monitor gets cleaned up when setup gets aborted
+ connect(info, &ThingSetupInfo::aborted, monitor, [this, thing](){
+ if (m_monitors.contains(thing)) {
+ qCDebug(dcMennekes()) << "Unregistering monitor because setup has been aborted.";
+ hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
}
});
+
+ // If this is the initial setup, wait for the monitor to be reachable and make sure
+ // we have an IP address, otherwise let the monitor do his work
+ if (info->isInitialSetup()) {
+ // Continue with setup only if we know that the network device is reachable
+ if (monitor->reachable()) {
+ setupAmtronHCC3Connection(info);
+ } else {
+ // otherwise wait until we reach the networkdevice before setting up the device
+ qCDebug(dcMennekes()) << "Network device" << thing->name() << "is not reachable yet. Continue with the setup once reachable.";
+ connect(monitor, &NetworkDeviceMonitor::reachableChanged, info, [=](bool reachable){
+ if (reachable) {
+ qCDebug(dcMennekes()) << "Network device" << thing->name() << "is now reachable. Continue with the setup...";
+ setupAmtronHCC3Connection(info);
+ }
+ });
+ }
+ } else {
+ // Continue setup with monitor...
+ setupAmtronHCC3Connection(info);
+ }
+ } else {
+ // ########### IP based connection
+ qCDebug(dcMennekes()) << "Setting up IP address based ModbusTcp connection for" << thing;
+ setupAmtronHCC3Connection(info);
}
+
return;
}
@@ -328,6 +352,7 @@ void IntegrationPluginMennekes::executeAction(ThingActionInfo *info)
}
});
}
+
if (info->action().actionTypeId() == amtronECUMaxChargingCurrentActionTypeId) {
bool power = info->thing()->stateValue(amtronECUPowerStateTypeId).toBool();
int maxChargingCurrent = info->action().paramValue(amtronECUMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toInt();
@@ -541,30 +566,70 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info)
{
Thing *thing = info->thing();
- QHostAddress address = m_monitors.value(thing)->networkDeviceInfo().address();
+ // Set up depending on the available params, mac can only be filled in by discovery (ro param),
+ // the ip could be used as static manual config for VPN networks or WAN IP's
+ QHostAddress address;
+ if (m_monitors.contains(thing)) {
+ address = m_monitors.value(thing)->networkDeviceInfo().address();
+ } else {
+ address = QHostAddress(thing->paramValue(amtronECUThingAddressParamTypeId).toString());
+ if (address.isNull()) {
+ qCWarning(dcMennekes()) << "Could not set up the Amtron ECU connection. The IP address is not valid.";
+ info->finish(Thing::ThingErrorHardwareNotAvailable);
+ return;
+ }
+ }
- qCDebug(dcMennekes()) << "Setting up amtron wallbox on" << address.toString();
+ qCDebug(dcMennekes()) << "Creating Amtron ECU connection for" << address.toString();
AmtronECU *amtronECUConnection = new AmtronECU(address, 502, 0xff, this);
connect(info, &ThingSetupInfo::aborted, amtronECUConnection, &ModbusTcpMaster::deleteLater);
- // Reconnect on monitor reachable changed
- NetworkDeviceMonitor *monitor = m_monitors.value(thing);
- connect(monitor, &NetworkDeviceMonitor::reachableChanged, thing, [=](bool reachable){
- qCDebug(dcMennekes()) << "Network device monitor reachable changed for" << thing->name() << reachable;
- if (!thing->setupComplete())
- return;
+ if (m_monitors.contains(thing)) {
- if (reachable && !thing->stateValue("connected").toBool()) {
- amtronECUConnection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address());
- amtronECUConnection->connectDevice();
- } else if (!reachable) {
- // Note: We disable autoreconnect explicitly and we will
- // connect the device once the monitor says it is reachable again
- amtronECUConnection->disconnectDevice();
+ // Only relevant for MAC based connections...
+
+ // Reconnect on monitor reachable changed
+ NetworkDeviceMonitor *monitor = m_monitors.value(thing);
+ connect(monitor, &NetworkDeviceMonitor::reachableChanged, thing, [=](bool reachable){
+ qCDebug(dcMennekes()) << "Network device monitor reachable changed for" << thing->name() << reachable;
+ if (!thing->setupComplete())
+ return;
+
+ if (reachable && !thing->stateValue("connected").toBool()) {
+ amtronECUConnection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address());
+ amtronECUConnection->connectDevice();
+ } else if (!reachable) {
+ // Note: We disable autoreconnect explicitly and we will
+ // connect the device once the monitor says it is reachable again
+ amtronECUConnection->disconnectDevice();
+ }
+ });
+ }
+
+ // Init during setup
+ connect(amtronECUConnection, &AmtronECU::initializationFinished, info, [this, thing, amtronECUConnection, info](bool success){
+
+ if (!success) {
+ qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronECUConnection->modbusTcpMaster()->hostAddress().toString();
+ if (m_monitors.contains(thing))
+ hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
+
+ amtronECUConnection->deleteLater();
+ info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox."));
+ return;
}
+
+ qCDebug(dcMennekes()) << "Connection init finished successfully" << amtronECUConnection;
+ m_amtronECUConnections.insert(thing, amtronECUConnection);
+ info->finish(Thing::ThingErrorNoError);
+
+ thing->setStateValue(amtronECUConnectedStateTypeId, true);
+ thing->setStateValue(amtronECUFirmwareVersionStateTypeId, QString::fromUtf8(QByteArray::fromHex(QByteArray::number(amtronECUConnection->firmwareVersion(), 16))));
+
+ amtronECUConnection->update();
});
- connect(amtronECUConnection, &AmtronECU::reachableChanged, thing, [thing, amtronECUConnection, monitor](bool reachable){
+ connect(amtronECUConnection, &AmtronECU::reachableChanged, thing, [this, thing, amtronECUConnection](bool reachable){
qCDebug(dcMennekes()) << "Reachable changed to" << reachable << "for" << thing;
if (reachable) {
amtronECUConnection->initialize();
@@ -574,7 +639,11 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info)
// Note: sometimes the device does not repond any more on requests, but the connection is still
// up and a reconnect fixes this behavior. Let us try to reconnect in case the TCP connection is up
// or the monitor is reachable
- if (amtronECUConnection->modbusTcpMaster()->connected() || monitor->reachable()) {
+ bool monitorReachable = false;
+ if (m_monitors.contains(thing))
+ monitorReachable = m_monitors.value(thing)->reachable();
+
+ if (amtronECUConnection->modbusTcpMaster()->connected() || monitorReachable) {
qCWarning(dcMennekes()) << "The amtron ECU connection is not reachable any more, but the device seems to be still reachable. Trying to reconnect...";
amtronECUConnection->modbusTcpMaster()->reconnectDevice();
}
@@ -594,27 +663,6 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info)
}
});
- connect(amtronECUConnection, &AmtronECU::initializationFinished, info, [=](bool success){
-
- if (!success) {
- qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronECUConnection->modbusTcpMaster()->hostAddress().toString();
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor);
- amtronECUConnection->deleteLater();
- info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox."));
- return;
- }
-
- qCDebug(dcMennekes()) << "Connection init finished successfully" << amtronECUConnection;
-
- m_amtronECUConnections.insert(thing, amtronECUConnection);
- info->finish(Thing::ThingErrorNoError);
-
- thing->setStateValue(amtronECUConnectedStateTypeId, true);
- thing->setStateValue(amtronECUFirmwareVersionStateTypeId, QString::fromUtf8(QByteArray::fromHex(QByteArray::number(amtronECUConnection->firmwareVersion(), 16))));
-
- amtronECUConnection->update();
- });
-
connect(amtronECUConnection, &AmtronECU::updateFinished, thing, [this, amtronECUConnection, thing](){
qCDebug(dcMennekes()) << "Amtron ECU update finished:" << thing->name() << amtronECUConnection;
updateECUPhaseCount(thing);
@@ -714,27 +762,64 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info)
{
Thing *thing = info->thing();
- QHostAddress address = m_monitors.value(thing)->networkDeviceInfo().address();
+ // Set up depending on the available params, mac can only be filled in by discovery (ro param),
+ // the ip could be used as static manual config for VPN networks or WAN IP's
+ QHostAddress address;
+ if (m_monitors.contains(thing)) {
+ address = m_monitors.value(thing)->networkDeviceInfo().address();
+ } else {
+ address = QHostAddress(thing->paramValue(amtronHCC3ThingAddressParamTypeId).toString());
+ if (address.isNull()) {
+ qCWarning(dcMennekes()) << "Could not set up the Amtron HCC3 connection. The IP address is not valid.";
+ info->finish(Thing::ThingErrorHardwareNotAvailable);
+ return;
+ }
+ }
- qCDebug(dcMennekes()) << "Setting up amtron wallbox on" << address.toString();
+ qCDebug(dcMennekes()) << "Creating Amtron HHC3 connection for" << address.toString();
AmtronHCC3ModbusTcpConnection *amtronHCC3Connection = new AmtronHCC3ModbusTcpConnection(address, 502, 0xff, this);
connect(info, &ThingSetupInfo::aborted, amtronHCC3Connection, &ModbusTcpMaster::deleteLater);
- // Reconnect on monitor reachable changed
- NetworkDeviceMonitor *monitor = m_monitors.value(thing);
- connect(monitor, &NetworkDeviceMonitor::reachableChanged, thing, [=](bool reachable){
- qCDebug(dcMennekes()) << "Network device monitor reachable changed for" << thing->name() << reachable;
- if (!thing->setupComplete())
- return;
+ if (m_monitors.contains(thing)) {
- if (reachable && !thing->stateValue("connected").toBool()) {
- amtronHCC3Connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address());
- amtronHCC3Connection->connectDevice();
- } else if (!reachable) {
- // Note: We disable autoreconnect explicitly and we will
- // connect the device once the monitor says it is reachable again
- amtronHCC3Connection->disconnectDevice();
+ // Only relevant for MAC based connections...
+
+ // Reconnect on monitor reachable changed
+ NetworkDeviceMonitor *monitor = m_monitors.value(thing);
+ connect(monitor, &NetworkDeviceMonitor::reachableChanged, thing, [=](bool reachable){
+ qCDebug(dcMennekes()) << "Network device monitor reachable changed for" << thing->name() << reachable;
+ if (!thing->setupComplete())
+ return;
+
+ if (reachable && !thing->stateValue("connected").toBool()) {
+ amtronHCC3Connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address());
+ amtronHCC3Connection->connectDevice();
+ } else if (!reachable) {
+ // Note: We disable autoreconnect explicitly and we will
+ // connect the device once the monitor says it is reachable again
+ amtronHCC3Connection->disconnectDevice();
+ }
+ });
+ }
+
+ // Init during setup
+ connect(amtronHCC3Connection, &AmtronHCC3ModbusTcpConnection::initializationFinished, info, [=](bool success){
+ if (!success) {
+ qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronHCC3Connection->modbusTcpMaster()->hostAddress().toString();
+ if (m_monitors.contains(thing))
+ hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
+
+ amtronHCC3Connection->deleteLater();
+ info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox."));
+ return;
}
+
+ qCDebug(dcMennekes()) << "Connection init finished successfully" << amtronHCC3Connection;
+ m_amtronHCC3Connections.insert(thing, amtronHCC3Connection);
+ info->finish(Thing::ThingErrorNoError);
+
+ thing->setStateValue(amtronHCC3ConnectedStateTypeId, true);
+ amtronHCC3Connection->update();
});
connect(amtronHCC3Connection, &AmtronHCC3ModbusTcpConnection::reachableChanged, thing, [thing, amtronHCC3Connection](bool reachable){
@@ -759,22 +844,6 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info)
}
});
- connect(amtronHCC3Connection, &AmtronHCC3ModbusTcpConnection::initializationFinished, info, [=](bool success){
- if (!success) {
- qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronHCC3Connection->modbusTcpMaster()->hostAddress().toString();
- hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor);
- amtronHCC3Connection->deleteLater();
- info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox."));
- return;
- }
-
- qCDebug(dcMennekes()) << "Connection init finished successfully" << amtronHCC3Connection;
- m_amtronHCC3Connections.insert(thing, amtronHCC3Connection);
- info->finish(Thing::ThingErrorNoError);
-
- thing->setStateValue(amtronHCC3ConnectedStateTypeId, true);
- amtronHCC3Connection->update();
- });
connect(amtronHCC3Connection, &AmtronHCC3ModbusTcpConnection::updateFinished, thing, [amtronHCC3Connection, thing](){
qCDebug(dcMennekes()) << "Amtron HCC3 update finished:" << thing->name() << amtronHCC3Connection;
@@ -825,7 +894,6 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info)
thing->setStateValue(amtronHCC3MaxChargingCurrentStateTypeId, customerCurrentLimitation);
});
-
amtronHCC3Connection->connectDevice();
}
diff --git a/mennekes/integrationpluginmennekes.json b/mennekes/integrationpluginmennekes.json
index 944780e..2a9f9ca 100644
--- a/mennekes/integrationpluginmennekes.json
+++ b/mennekes/integrationpluginmennekes.json
@@ -15,12 +15,21 @@
"createMethods": ["discovery", "user"],
"interfaces": ["evcharger", "smartmeterconsumer", "connectable"],
"paramTypes": [
+ {
+ "id": "36d11ea0-524a-43d2-b157-f69a744ac5d8",
+ "name": "address",
+ "displayName": "Host address",
+ "type": "QString",
+ "inputType": "IPv4Address",
+ "defaultValue": ""
+ },
{
"id": "0b9c1466-5eb9-4b25-9450-513e2484a3b4",
"name":"macAddress",
"displayName": "MAC address",
"type": "QString",
"inputType": "MacAddress",
+ "readOnly": true,
"defaultValue": ""
}
],
@@ -122,12 +131,21 @@
"createMethods": ["discovery", "user"],
"interfaces": ["evcharger", "smartmeterconsumer", "connectable"],
"paramTypes": [
+ {
+ "id": "0dae61b0-5d2d-49df-bdac-93aec86b2085",
+ "name": "address",
+ "displayName": "Host address",
+ "type": "QString",
+ "inputType": "IPv4Address",
+ "defaultValue": ""
+ },
{
"id": "6112045e-e472-4475-bc11-f373e9c39cdd",
"name":"macAddress",
"displayName": "MAC address",
"type": "QString",
"inputType": "MacAddress",
+ "readOnly": true,
"defaultValue": ""
}
],
diff --git a/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-de.ts b/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-de.ts
new file mode 100644
index 0000000..536139c
--- /dev/null
+++ b/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-de.ts
@@ -0,0 +1,331 @@
+
+
+
+
+ IntegrationPluginMennekes
+
+
+
+ The network device discovery is not available.
+ Die Netzwerksuche ist nicht verfügbar.
+
+
+
+ No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bits, 2 stop bits and no parity first.
+ Es konnte kein Modbus RTU Master mit den erforderlichen Einstellungen gefunden werden. Bitte richte einen Modbus RTU Master ein mit einer Baudrate von 57600, 8 Daten Bits, 2 Stop Bits und ohne Parität.
+
+
+
+
+ Failed to set up the connection to the EV charger. Please specify either manually the IP address or get the MAC address using the network discovery.
+ Die Verbindung zur Ladestation konnte nicht eingerichtet werden. Bitte gib entweder manuell die IP-Adresse ein oder suche die MAC-Adresse mithilfe der automatischen Netzwerksuche.
+
+
+
+
+ Error communicating with the wallbox.
+ Fehler bei der Kommunikation mit der Ladestation.
+
+
+
+ The Modbus address not valid. It must be a value between 1 and 254.
+ Die Modbus Adresse ist nicht gültig. Die Adresse muss ein Wert zwischen 1 und 254 sein.
+
+
+
+ The Modbus RTU resource is not available.
+ Die Modbus RTU Verbindung ist nicht verfügbar.
+
+
+
+ Mennekes
+
+
+ AMTRON Charge Control/Professional
+ The name of the ThingClass ({fb48e067-2237-4eaf-8d2c-681d406395fc})
+ AMTRON Charge Control/Professional
+
+
+
+ 1
+ The name of a possible value of StateType {64b64747-7a67-419c-88d1-c63872ef83b7} of ThingClass amtronCompact20
+ 1
+
+
+
+ 3
+ The name of a possible value of StateType {64b64747-7a67-419c-88d1-c63872ef83b7} of ThingClass amtronCompact20
+ 3
+
+
+
+ AMTRON Compact 2.0s
+ The name of the ThingClass ({5c9c3b51-26e0-4f92-b6cf-d77bcae3d47c})
+ AMTRON Compact 2.0s
+
+
+
+ AMTRON XTRA/Premium
+ The name of the ThingClass ({01995c4f-a7b5-4bdd-9333-486390ff75fd})
+ AMTRON XTRA/Premium
+
+
+
+
+
+ Active power
+ The name of the StateType ({5a8d2ec1-a044-4d67-b3f2-38a26916e747}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({96b9c121-3caf-44fe-8380-483b9b40dbd9}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({8b2eb039-b4e3-49ae-94fc-a8b825fd8d9b}) of ThingClass amtronECU
+ Ladeleistung
+
+
+
+
+
+ Charging
+ The name of the StateType ({fc8f3b5f-f122-430c-855e-eaf5cff4d2ca}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({982af18d-dbfb-4dd8-b5b3-4d22c64642a6}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({c8c812c6-dd56-425c-8dd1-8dd621bd3a11}) of ThingClass amtronECU
+ Laden
+
+
+
+
+
+
+
+
+ Charging enabled
+ The name of the ParamType (ThingClass: amtronCompact20, ActionType: power, ID: {9eee7ef4-3e35-4ca8-b6a4-cbb6cf7f901d})
+----------
+The name of the StateType ({9eee7ef4-3e35-4ca8-b6a4-cbb6cf7f901d}) of ThingClass amtronCompact20
+----------
+The name of the ParamType (ThingClass: amtronHCC3, ActionType: power, ID: {130585ca-14e9-45b7-87d7-c0d935228104})
+----------
+The name of the StateType ({130585ca-14e9-45b7-87d7-c0d935228104}) of ThingClass amtronHCC3
+----------
+The name of the ParamType (ThingClass: amtronECU, ActionType: power, ID: {53dc845a-a397-4c90-890b-fd50512666f4})
+----------
+The name of the StateType ({53dc845a-a397-4c90-890b-fd50512666f4}) of ThingClass amtronECU
+ Ladefreigabe erteilt
+
+
+
+ Charging phases
+ The name of the StateType ({b415c330-9295-41f2-b117-14b9fc0b2ed9}) of ThingClass amtronCompact20
+ Phasen
+
+
+
+
+
+ Connected
+ The name of the StateType ({8ad20255-7407-4e89-9eb8-62a7c32036b7}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({899e270f-7666-44b3-8509-0dad43ac9c4c}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({352be84a-f5c6-434d-8a92-a4065a24ff0a}) of ThingClass amtronECU
+ Verbunden
+
+
+
+
+ Connected phases
+ The name of the StateType ({05c095b6-2395-4bbf-8d14-a77576ce7717}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({a51d0beb-f4fd-4279-85b5-b436b283a86e}) of ThingClass amtronECU
+ Angeschlossene Phasen
+
+
+
+
+ Desired phase count
+ The name of the ParamType (ThingClass: amtronCompact20, ActionType: desiredPhaseCount, ID: {64b64747-7a67-419c-88d1-c63872ef83b7})
+----------
+The name of the StateType ({64b64747-7a67-419c-88d1-c63872ef83b7}) of ThingClass amtronCompact20
+ Gewünschte Phasenanzahl
+
+
+
+
+ Firmware version
+ The name of the StateType ({25717de6-dd6c-4f06-a0fc-ca11bbef1598}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({00813b6e-bd93-4728-a11a-aac6298503e6}) of ThingClass amtronECU
+ Firmware Version
+
+
+
+
+ Host address
+ The name of the ParamType (ThingClass: amtronHCC3, Type: thing, ID: {0dae61b0-5d2d-49df-bdac-93aec86b2085})
+----------
+The name of the ParamType (ThingClass: amtronECU, Type: thing, ID: {36d11ea0-524a-43d2-b157-f69a744ac5d8})
+ IP-Adresse
+
+
+
+
+ MAC address
+ The name of the ParamType (ThingClass: amtronHCC3, Type: thing, ID: {6112045e-e472-4475-bc11-f373e9c39cdd})
+----------
+The name of the ParamType (ThingClass: amtronECU, Type: thing, ID: {0b9c1466-5eb9-4b25-9450-513e2484a3b4})
+ MAC-Adresse
+
+
+
+ MENNEKES
+ The name of the vendor ({7c585571-e3a3-458c-a598-e11f510cbc10})
+ MENNEKES
+
+
+
+
+
+
+
+
+ Maximum charging current
+ The name of the ParamType (ThingClass: amtronCompact20, ActionType: maxChargingCurrent, ID: {ff9b92ca-1e95-4588-ad94-70883062f3f1})
+----------
+The name of the StateType ({ff9b92ca-1e95-4588-ad94-70883062f3f1}) of ThingClass amtronCompact20
+----------
+The name of the ParamType (ThingClass: amtronHCC3, ActionType: maxChargingCurrent, ID: {87b4e9cb-e57b-461a-90f9-207bb5dab44c})
+----------
+The name of the StateType ({87b4e9cb-e57b-461a-90f9-207bb5dab44c}) of ThingClass amtronHCC3
+----------
+The name of the ParamType (ThingClass: amtronECU, ActionType: maxChargingCurrent, ID: {fb12ff61-f88a-4bfc-930f-a4a55b342d1b})
+----------
+The name of the StateType ({fb12ff61-f88a-4bfc-930f-a4a55b342d1b}) of ThingClass amtronECU
+ Maximaler Ladestrom
+
+
+
+ Mennekes
+ The name of the plugin Mennekes ({c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38})
+ Mennekes
+
+
+
+ Modbus RTU master
+ The name of the ParamType (ThingClass: amtronCompact20, Type: thing, ID: {b73ce51f-792a-4875-a169-76ab16597081})
+ Modbus RTU Master
+
+
+
+ Modbus slave address
+ The name of the ParamType (ThingClass: amtronCompact20, Type: thing, ID: {f98609c4-c7e7-49df-aebf-34122974c019})
+ Modbus Slave Adresse
+
+
+
+ Off
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+ Aus
+
+
+
+
+
+ Plugged in
+ The name of the StateType ({1ad8712a-bca1-44db-9134-47fcac88e400}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({fed5a1ba-48f5-41ef-98f7-9356bcae7612}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({c93d7377-8a4a-4c35-9876-1032d8b309e3}) of ThingClass amtronECU
+ Angesteckt
+
+
+
+
+
+ Session energy
+ The name of the StateType ({359336ee-8777-4dd3-9d7a-eb15b0cc6ebc}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({c5882da3-963b-4cb3-ba1a-44d16d219e7e}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({2ce6b363-5b8d-4703-8376-611a0e573f71}) of ThingClass amtronECU
+ Energie der aktuellen Ladung
+
+
+
+
+
+ Set charging enabled
+ The name of the ActionType ({9eee7ef4-3e35-4ca8-b6a4-cbb6cf7f901d}) of ThingClass amtronCompact20
+----------
+The name of the ActionType ({130585ca-14e9-45b7-87d7-c0d935228104}) of ThingClass amtronHCC3
+----------
+The name of the ActionType ({53dc845a-a397-4c90-890b-fd50512666f4}) of ThingClass amtronECU
+ Erteile Ladefreigabe
+
+
+
+ Set desired phase count
+ The name of the ActionType ({64b64747-7a67-419c-88d1-c63872ef83b7}) of ThingClass amtronCompact20
+ Setze gewünschte Phasenanzahl
+
+
+
+
+
+ Set maximum charging current
+ The name of the ActionType ({ff9b92ca-1e95-4588-ad94-70883062f3f1}) of ThingClass amtronCompact20
+----------
+The name of the ActionType ({87b4e9cb-e57b-461a-90f9-207bb5dab44c}) of ThingClass amtronHCC3
+----------
+The name of the ActionType ({fb12ff61-f88a-4bfc-930f-a4a55b342d1b}) of ThingClass amtronECU
+ Setze maximalen Ladestrom
+
+
+
+ Set solar charging mode
+ The name of the ActionType ({572e45f1-1146-497a-8b00-704e0db50379}) of ThingClass amtronCompact20
+ Setze Solar Charging Modus
+
+
+
+
+ Solar charging mode
+ The name of the ParamType (ThingClass: amtronCompact20, ActionType: solarChargingMode, ID: {572e45f1-1146-497a-8b00-704e0db50379})
+----------
+The name of the StateType ({572e45f1-1146-497a-8b00-704e0db50379}) of ThingClass amtronCompact20
+ Solar Charging Modus
+
+
+
+ Standard
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+ Standard
+
+
+
+ Sunshine
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+ Sonnenschein
+
+
+
+ Sunshine+
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+ Sonnenschein+
+
+
+
+
+
+ Total consumed energy
+ The name of the StateType ({89f26bbd-32d8-4b46-bbb0-f01ba713c5d5}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({3d1384fc-8b46-42b0-b043-23279d8c7665}) of ThingClass amtronHCC3
+----------
+The name of the StateType ({5b8bfdf0-eaa6-41d0-8f2f-119b06aed181}) of ThingClass amtronECU
+ Gesamte verbrauchte Energie
+
+
+
diff --git a/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-en_US.ts b/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-en_US.ts
index ff0994f..72785be 100644
--- a/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-en_US.ts
+++ b/mennekes/translations/c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38-en_US.ts
@@ -4,46 +4,35 @@
IntegrationPluginMennekes
-
-
+
+ The network device discovery is not available.
-
- No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bis, 2 stop bits and no parity first.
+
+ No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bits, 2 stop bits and no parity first.
-
-
- The MAC address is not known. Please reconfigure the thing.
+
+
+ Failed to set up the connection to the EV charger. Please specify either manually the IP address or get the MAC address using the network discovery.
-
-
- The host address is not known yet. Trying later again.
-
-
-
-
-
+
+ Error communicating with the wallbox.
-
- The firmware version of this wallbox is too old. Please upgrade the firmware to at least version 5.22.
-
-
-
-
+ The Modbus address not valid. It must be a value between 1 and 254.
-
+ The Modbus RTU resource is not available.
@@ -51,27 +40,39 @@
Mennekes
-
+ AMTRON Charge Control/ProfessionalThe name of the ThingClass ({fb48e067-2237-4eaf-8d2c-681d406395fc})
-
- AMTRON Compact 2.0
+
+ 1
+ The name of a possible value of StateType {64b64747-7a67-419c-88d1-c63872ef83b7} of ThingClass amtronCompact20
+
+
+
+
+ 3
+ The name of a possible value of StateType {64b64747-7a67-419c-88d1-c63872ef83b7} of ThingClass amtronCompact20
+
+
+
+
+ AMTRON Compact 2.0sThe name of the ThingClass ({5c9c3b51-26e0-4f92-b6cf-d77bcae3d47c})
-
+ AMTRON XTRA/PremiumThe name of the ThingClass ({01995c4f-a7b5-4bdd-9333-486390ff75fd})
-
-
-
+
+
+ Active powerThe name of the StateType ({5a8d2ec1-a044-4d67-b3f2-38a26916e747}) of ThingClass amtronCompact20
----------
@@ -81,9 +82,9 @@ The name of the StateType ({8b2eb039-b4e3-49ae-94fc-a8b825fd8d9b}) of ThingClass
-
-
-
+
+
+ ChargingThe name of the StateType ({fc8f3b5f-f122-430c-855e-eaf5cff4d2ca}) of ThingClass amtronCompact20
----------
@@ -93,12 +94,12 @@ The name of the StateType ({c8c812c6-dd56-425c-8dd1-8dd621bd3a11}) of ThingClass
-
-
-
-
-
-
+
+
+
+
+
+ Charging enabledThe name of the ParamType (ThingClass: amtronCompact20, ActionType: power, ID: {9eee7ef4-3e35-4ca8-b6a4-cbb6cf7f901d})
----------
@@ -114,15 +115,15 @@ The name of the StateType ({53dc845a-a397-4c90-890b-fd50512666f4}) of ThingClass
-
+ Charging phasesThe name of the StateType ({b415c330-9295-41f2-b117-14b9fc0b2ed9}) of ThingClass amtronCompact20
-
-
-
+
+
+ ConnectedThe name of the StateType ({8ad20255-7407-4e89-9eb8-62a7c32036b7}) of ThingClass amtronCompact20
----------
@@ -132,8 +133,8 @@ The name of the StateType ({352be84a-f5c6-434d-8a92-a4065a24ff0a}) of ThingClass
-
-
+
+ Connected phasesThe name of the StateType ({05c095b6-2395-4bbf-8d14-a77576ce7717}) of ThingClass amtronHCC3
----------
@@ -141,8 +142,8 @@ The name of the StateType ({a51d0beb-f4fd-4279-85b5-b436b283a86e}) of ThingClass
-
-
+
+ Desired phase countThe name of the ParamType (ThingClass: amtronCompact20, ActionType: desiredPhaseCount, ID: {64b64747-7a67-419c-88d1-c63872ef83b7})
----------
@@ -150,14 +151,26 @@ The name of the StateType ({64b64747-7a67-419c-88d1-c63872ef83b7}) of ThingClass
-
+
+ Firmware version
- The name of the StateType ({25717de6-dd6c-4f06-a0fc-ca11bbef1598}) of ThingClass amtronCompact20
+ The name of the StateType ({25717de6-dd6c-4f06-a0fc-ca11bbef1598}) of ThingClass amtronCompact20
+----------
+The name of the StateType ({00813b6e-bd93-4728-a11a-aac6298503e6}) of ThingClass amtronECU
-
-
+
+
+ Host address
+ The name of the ParamType (ThingClass: amtronHCC3, Type: thing, ID: {0dae61b0-5d2d-49df-bdac-93aec86b2085})
+----------
+The name of the ParamType (ThingClass: amtronECU, Type: thing, ID: {36d11ea0-524a-43d2-b157-f69a744ac5d8})
+
+
+
+
+ MAC addressThe name of the ParamType (ThingClass: amtronHCC3, Type: thing, ID: {6112045e-e472-4475-bc11-f373e9c39cdd})
----------
@@ -165,18 +178,18 @@ The name of the ParamType (ThingClass: amtronECU, Type: thing, ID: {0b9c1466-5eb
-
+ MENNEKESThe name of the vendor ({7c585571-e3a3-458c-a598-e11f510cbc10})
-
-
-
-
-
-
+
+
+
+
+
+ Maximum charging currentThe name of the ParamType (ThingClass: amtronCompact20, ActionType: maxChargingCurrent, ID: {ff9b92ca-1e95-4588-ad94-70883062f3f1})
----------
@@ -192,27 +205,33 @@ The name of the StateType ({fb12ff61-f88a-4bfc-930f-a4a55b342d1b}) of ThingClass
-
+ MennekesThe name of the plugin Mennekes ({c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38})
-
+ Modbus RTU masterThe name of the ParamType (ThingClass: amtronCompact20, Type: thing, ID: {b73ce51f-792a-4875-a169-76ab16597081})
-
+ Modbus slave addressThe name of the ParamType (ThingClass: amtronCompact20, Type: thing, ID: {f98609c4-c7e7-49df-aebf-34122974c019})
-
-
-
+
+ Off
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+
+
+
+
+
+ Plugged inThe name of the StateType ({1ad8712a-bca1-44db-9134-47fcac88e400}) of ThingClass amtronCompact20
----------
@@ -222,9 +241,9 @@ The name of the StateType ({c93d7377-8a4a-4c35-9876-1032d8b309e3}) of ThingClass
-
-
-
+
+
+ Session energyThe name of the StateType ({359336ee-8777-4dd3-9d7a-eb15b0cc6ebc}) of ThingClass amtronCompact20
----------
@@ -234,9 +253,9 @@ The name of the StateType ({2ce6b363-5b8d-4703-8376-611a0e573f71}) of ThingClass
-
-
-
+
+
+ Set charging enabledThe name of the ActionType ({9eee7ef4-3e35-4ca8-b6a4-cbb6cf7f901d}) of ThingClass amtronCompact20
----------
@@ -246,15 +265,15 @@ The name of the ActionType ({53dc845a-a397-4c90-890b-fd50512666f4}) of ThingClas
-
+ Set desired phase countThe name of the ActionType ({64b64747-7a67-419c-88d1-c63872ef83b7}) of ThingClass amtronCompact20
-
-
-
+
+
+ Set maximum charging currentThe name of the ActionType ({ff9b92ca-1e95-4588-ad94-70883062f3f1}) of ThingClass amtronCompact20
----------
@@ -264,9 +283,42 @@ The name of the ActionType ({fb12ff61-f88a-4bfc-930f-a4a55b342d1b}) of ThingClas
-
-
-
+
+ Set solar charging mode
+ The name of the ActionType ({572e45f1-1146-497a-8b00-704e0db50379}) of ThingClass amtronCompact20
+
+
+
+
+
+ Solar charging mode
+ The name of the ParamType (ThingClass: amtronCompact20, ActionType: solarChargingMode, ID: {572e45f1-1146-497a-8b00-704e0db50379})
+----------
+The name of the StateType ({572e45f1-1146-497a-8b00-704e0db50379}) of ThingClass amtronCompact20
+
+
+
+
+ Standard
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+
+
+
+
+ Sunshine
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+
+
+
+
+ Sunshine+
+ The name of a possible value of StateType {572e45f1-1146-497a-8b00-704e0db50379} of ThingClass amtronCompact20
+
+
+
+
+
+ Total consumed energyThe name of the StateType ({89f26bbd-32d8-4b46-bbb0-f01ba713c5d5}) of ThingClass amtronCompact20
----------