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/Professional The 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.0s The name of the ThingClass ({5c9c3b51-26e0-4f92-b6cf-d77bcae3d47c}) - + AMTRON XTRA/Premium The name of the ThingClass ({01995c4f-a7b5-4bdd-9333-486390ff75fd}) - - - + + + Active power The 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 - - - + + + Charging The 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 enabled The 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 phases The name of the StateType ({b415c330-9295-41f2-b117-14b9fc0b2ed9}) of ThingClass amtronCompact20 - - - + + + Connected The 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 phases The 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 count The 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 address The 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 - + MENNEKES The name of the vendor ({7c585571-e3a3-458c-a598-e11f510cbc10}) - - - - - - + + + + + + Maximum charging current The 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 - + Mennekes The name of the plugin Mennekes ({c7c3c65c-a0cc-4ab1-90d8-4ad05bfcdc38}) - + Modbus RTU master The name of the ParamType (ThingClass: amtronCompact20, Type: thing, ID: {b73ce51f-792a-4875-a169-76ab16597081}) - + Modbus slave address The 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 in The 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 energy The 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 enabled The 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 count The name of the ActionType ({64b64747-7a67-419c-88d1-c63872ef83b7}) of ThingClass amtronCompact20 - - - + + + Set maximum charging current The 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 energy The name of the StateType ({89f26bbd-32d8-4b46-bbb0-f01ba713c5d5}) of ThingClass amtronCompact20 ----------