Merge PR #564: Keba : Add support for wallboxes without energy meter (German Edition)

master
jenkins 2022-06-17 00:17:04 +02:00
commit c18708e06a
5 changed files with 973 additions and 1024 deletions

View File

@ -43,12 +43,21 @@ IntegrationPluginKeba::IntegrationPluginKeba()
void IntegrationPluginKeba::init()
{
m_macAddressParamTypeIds.insert(kebaThingClassId, kebaThingMacAddressParamTypeId);
m_macAddressParamTypeIds.insert(kebaSimpleThingClassId, kebaSimpleThingMacAddressParamTypeId);
m_ipAddressParamTypeIds.insert(kebaThingClassId, kebaThingIpAddressParamTypeId);
m_ipAddressParamTypeIds.insert(kebaSimpleThingClassId, kebaSimpleThingIpAddressParamTypeId);
m_modelParamTypeIds.insert(kebaThingClassId, kebaThingModelParamTypeId);
m_modelParamTypeIds.insert(kebaSimpleThingClassId, kebaSimpleThingModelParamTypeId);
m_serialNumberParamTypeIds.insert(kebaThingClassId, kebaThingSerialNumberParamTypeId);
m_serialNumberParamTypeIds.insert(kebaSimpleThingClassId, kebaSimpleThingSerialNumberParamTypeId);
}
void IntegrationPluginKeba::discoverThings(ThingDiscoveryInfo *info)
{
// Init data layer if not already created
if (!m_kebaDataLayer){
qCDebug(dcKeba()) << "Creating new Keba data layer...";
@ -68,229 +77,234 @@ void IntegrationPluginKeba::discoverThings(ThingDiscoveryInfo *info)
return;
}
if (info->thingClassId() == wallboxThingClassId) {
// Create a discovery with the info as parent for auto deleting the object once the discovery info is done
KebaDiscovery *discovery = new KebaDiscovery(m_kebaDataLayer, hardwareManager()->networkDeviceDiscovery(), info);
connect(discovery, &KebaDiscovery::discoveryFinished, info, [=](){
foreach (const KebaDiscovery::KebaDiscoveryResult &result, discovery->discoveryResults()) {
// Create a discovery with the info as parent for auto deleting the object once the discovery info is done
KebaDiscovery *discovery = new KebaDiscovery(m_kebaDataLayer, hardwareManager()->networkDeviceDiscovery(), info);
connect(discovery, &KebaDiscovery::discoveryFinished, info, [=](){
foreach (const KebaDiscovery::KebaDiscoveryResult &result, discovery->discoveryResults()) {
ThingDescriptor descriptor(wallboxThingClassId, "Keba " + result.product, "Serial: " + result.serialNumber + " - " + result.networkDeviceInfo.address().toString());
// Check if we already have set up this device
Things existingThings = myThings().filterByParam(wallboxThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
if (existingThings.count() == 1) {
qCDebug(dcKeba()) << "This wallbox already exists in the system!" << result.networkDeviceInfo;
descriptor.setThingId(existingThings.first()->id());
}
ParamList params;
params << Param(wallboxThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
params << Param(wallboxThingIpAddressParamTypeId, result.networkDeviceInfo.address().toString());
params << Param(wallboxThingModelParamTypeId, result.product);
params << Param(wallboxThingSerialNumberParamTypeId, result.serialNumber);
descriptor.setParams(params);
info->addThingDescriptor(descriptor);
KebaProductInfo productInformation(result.product);
if (!productInformation.isValid()) {
qCWarning(dcKeba()) << "Discovered keba with invalid product information" << result.product;
continue;
}
info->finish(Thing::ThingErrorNoError);
});
ThingClassId discoveredThingClassId = kebaThingClassId;
// Check if this is a keba without meter (aka simple)
if (productInformation.meter() == KebaProductInfo::NoMeter) {
discoveredThingClassId = kebaSimpleThingClassId;
}
// Start the discovery process
discovery->startDiscovery();
// Make sure we show only the result we searched for to prevent cross adding between normal and simple
if (discoveredThingClassId != info->thingClassId())
continue;
} else {
qCWarning(dcKeba()) << "Could not discover things because of unhandled thing class id" << info->thingClassId().toString();
info->finish(Thing::ThingErrorThingClassNotFound);
}
ThingDescriptor descriptor(discoveredThingClassId, "Keba " + result.product, "Serial: " + result.serialNumber + " - " + result.networkDeviceInfo.address().toString());
qCDebug(dcKeba()) << "Discovered:" << descriptor.title() << descriptor.description();
// Check if we already have set up this device
Things existingThings = myThings().filterByParam(m_macAddressParamTypeIds.value(discoveredThingClassId), result.networkDeviceInfo.macAddress());
if (existingThings.count() == 1) {
qCDebug(dcKeba()) << "This keba already exists in the system!" << result.networkDeviceInfo;
descriptor.setThingId(existingThings.first()->id());
}
ParamList params;
params << Param(m_macAddressParamTypeIds.value(discoveredThingClassId), result.networkDeviceInfo.macAddress());
params << Param(m_ipAddressParamTypeIds.value(discoveredThingClassId), result.networkDeviceInfo.address().toString());
params << Param(m_modelParamTypeIds.value(discoveredThingClassId), result.product);
params << Param(m_serialNumberParamTypeIds.value(discoveredThingClassId), result.serialNumber);
descriptor.setParams(params);
info->addThingDescriptor(descriptor);
}
info->finish(Thing::ThingErrorNoError);
});
// Start the discovery process
discovery->startDiscovery();
}
void IntegrationPluginKeba::setupThing(ThingSetupInfo *info)
{
Thing *thing = info->thing();
if (thing->thingClassId() == wallboxThingClassId) {
// Handle reconfigure
if (myThings().contains(thing)) {
KeContact *keba = m_kebaDevices.take(thing->id());
if (keba) {
qCDebug(dcKeba()) << "Reconfigure" << thing->name() << thing->params();
delete keba;
// Now continue with the normal setup
}
// Handle reconfigure
if (myThings().contains(thing)) {
KeContact *keba = m_kebaDevices.take(thing->id());
if (keba) {
qCDebug(dcKeba()) << "Reconfigure" << thing->name() << thing->params();
delete keba;
// Now continue with the normal setup
}
qCDebug(dcKeba()) << "Setting up" << thing->name() << thing->params();
if (!m_kebaDataLayer){
qCDebug(dcKeba()) << "Creating new Keba data layer...";
m_kebaDataLayer= new KeContactDataLayer(this);
if (!m_kebaDataLayer->init()) {
m_kebaDataLayer->deleteLater();
m_kebaDataLayer = nullptr;
connect(info, &ThingSetupInfo::aborted, m_kebaDataLayer, &KeContactDataLayer::deleteLater); // Clean up if the setup fails
return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Error opening network port."));
}
}
QHostAddress address = QHostAddress(thing->paramValue(wallboxThingIpAddressParamTypeId).toString());
// Check if we have a keba with this ip, if reconfigure the object would already been removed from the hash
foreach (KeContact *kebaConnect, m_kebaDevices.values()) {
if (kebaConnect->address() == address) {
qCWarning(dcKeba()) << "Failed to set up keba for host address" << address.toString() << "because there has already been configured a keba for this IP.";
info->finish(Thing::ThingErrorThingInUse, QT_TR_NOOP("Already configured for this IP address."));
return;
}
}
KeContact *keba = new KeContact(address, m_kebaDataLayer, this);
connect(keba, &KeContact::reachableChanged, this, &IntegrationPluginKeba::onConnectionChanged);
connect(keba, &KeContact::commandExecuted, this, &IntegrationPluginKeba::onCommandExecuted);
connect(keba, &KeContact::reportTwoReceived, this, &IntegrationPluginKeba::onReportTwoReceived);
connect(keba, &KeContact::reportThreeReceived, this, &IntegrationPluginKeba::onReportThreeReceived);
connect(keba, &KeContact::report1XXReceived, this, &IntegrationPluginKeba::onReport1XXReceived);
connect(keba, &KeContact::broadcastReceived, this, &IntegrationPluginKeba::onBroadcastReceived);
// Make sure we receive data from the keba and the DIP switches are configured correctly
connect(keba, &KeContact::reportOneReceived, info, [info, this, keba] (const KeContact::ReportOne &report) {
Thing *thing = info->thing();
qCDebug(dcKeba()) << "Report one received for" << thing->name();
qCDebug(dcKeba()) << " - Firmware" << report.firmware;
qCDebug(dcKeba()) << " - Serial" << report.serialNumber;
qCDebug(dcKeba()) << " - Product" << report.product;
qCDebug(dcKeba()) << " - Uptime" << report.seconds / 60 << "[min]";
qCDebug(dcKeba()) << " - Com Module" << report.comModule;
qCDebug(dcKeba()) << " - DIP switch 1" << report.dipSw1;
qCDebug(dcKeba()) << " - DIP switch 2" << report.dipSw2;
KebaProductInfo productInformation(report.product);
if (thing->paramValue(wallboxThingSerialNumberParamTypeId).toString().isEmpty()) {
qCDebug(dcKeba()) << "Update serial number parameter for" << thing << "to" << report.serialNumber;
thing->setParamValue(wallboxThingSerialNumberParamTypeId, report.serialNumber);
}
if (thing->paramValue(wallboxThingModelParamTypeId).toString().isEmpty()) {
qCDebug(dcKeba()) << "Update model parameter for" << thing << "to" << report.product;
thing->setParamValue(wallboxThingModelParamTypeId, report.product);
}
// Verify the DIP switches and warn the user in case if wrong configuration
// For having UPD controll on the wallbox we need DIP Switch 1.3 enabled
KeContact::DipSwitchOneFlag dipSwOne(report.dipSw1);
qCDebug(dcKeba()) << dipSwOne;
if (!dipSwOne.testFlag(KeContact::DipSwitchOneSmartHomeInterface)) {
qCWarning(dcKeba()) << "Connected successfully to Keba but the DIP Switch for controlling it is not enabled.";
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("The required communication interface is not enabled on this wallbox. Please make sure the DIP switch 1.3 is switched on and try again."));
return;
}
// Parse the product code and check if the model actually supports the UDP/Modbus communication
// Supported are:
// - The A series (german edition), no meter DE440 (green edition)
// - The B series (german edition), no meter DE440
// - All C series
// - All X series
if (productInformation.isValid()) {
bool supported = false;
qCDebug(dcKeba()) << "Product information are valid. Evaluating if model supports UDP/Modbus communication...";
switch (productInformation.series()) {
case KebaProductInfo::SeriesA:
if (productInformation.model() == "P30" && productInformation.germanEdition()) {
qCDebug(dcKeba()) << "The P30 A series german edition is supported (DE440 GREEN EDITION)";
supported = true;
}
break;
case KebaProductInfo::SeriesB:
if (productInformation.model() == "P30" && productInformation.germanEdition()) {
qCDebug(dcKeba()) << "The P30 B series german edition is supported (DE440)";
supported = true;
}
break;
case KebaProductInfo::SeriesC:
case KebaProductInfo::SeriesXWlan:
case KebaProductInfo::SeriesXWlan3G:
case KebaProductInfo::SeriesXWlan4G:
case KebaProductInfo::SeriesX3G:
case KebaProductInfo::SeriesX4G:
qCDebug(dcKeba()) << "The keba" << productInformation.series() << "is capable of communicating using UDP";
supported = true;
break;
default:
break;
}
if (!supported) {
qCWarning(dcKeba()) << "Connected successfully to Keba but this model" << productInformation.series() << "has no communication module.";
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("This model does not support communication with smart devices."));
return;
}
} else {
qCWarning(dcKeba()) << "Product information are not valid. Cannot determin if this model supports UDP/Modbus communication, assuming yes so let's try to init...";
}
m_kebaDevices.insert(thing->id(), keba);
info->finish(Thing::ThingErrorNoError);
qCDebug(dcKeba()) << "Setup finsihed successfully for" << thing << thing->params();
thing->setStateValue(wallboxConnectedStateTypeId, true);
thing->setStateValue(wallboxFirmwareStateTypeId, report.firmware);
thing->setStateValue(wallboxUptimeStateTypeId, report.seconds / 60);
});
keba->getReport1();
connect(info, &ThingSetupInfo::aborted, keba, &KeContact::deleteLater); // Clean up if the setup fails
connect(keba, &KeContact::destroyed, this, [thing, this]{
m_kebaDevices.remove(thing->id());
// Setup failed, lets search the network, maybe the IP has changed...
searchNetworkDevices();
});
} else {
qCWarning(dcKeba()) << "Could not setup thing: unhandled device class" << thing->thingClass();
info->finish(Thing::ThingErrorThingClassNotFound);
}
qCDebug(dcKeba()) << "Setting up" << thing->name() << thing->params();
if (!m_kebaDataLayer){
qCDebug(dcKeba()) << "Creating new Keba data layer...";
m_kebaDataLayer= new KeContactDataLayer(this);
if (!m_kebaDataLayer->init()) {
m_kebaDataLayer->deleteLater();
m_kebaDataLayer = nullptr;
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Error opening network port."));
return;
}
}
QHostAddress address = QHostAddress(thing->paramValue(m_ipAddressParamTypeIds.value(thing->thingClassId())).toString());
// Check if we have a keba with this ip, if reconfigure the object would already been removed from the hash
foreach (KeContact *kebaConnect, m_kebaDevices.values()) {
if (kebaConnect->address() == address) {
qCWarning(dcKeba()) << "Failed to set up keba for host address" << address.toString() << "because there has already been configured a keba for this IP.";
info->finish(Thing::ThingErrorThingInUse, QT_TR_NOOP("Already configured for this IP address."));
return;
}
}
KeContact *keba = new KeContact(address, m_kebaDataLayer, this);
connect(keba, &KeContact::reachableChanged, this, &IntegrationPluginKeba::onConnectionChanged);
connect(keba, &KeContact::commandExecuted, this, &IntegrationPluginKeba::onCommandExecuted);
connect(keba, &KeContact::reportTwoReceived, this, &IntegrationPluginKeba::onReportTwoReceived);
connect(keba, &KeContact::reportThreeReceived, this, &IntegrationPluginKeba::onReportThreeReceived);
connect(keba, &KeContact::report1XXReceived, this, &IntegrationPluginKeba::onReport1XXReceived);
connect(keba, &KeContact::broadcastReceived, this, &IntegrationPluginKeba::onBroadcastReceived);
connect(info, &ThingSetupInfo::aborted, keba, &KeContact::deleteLater); // Clean up if the setup fails
// Make sure we receive data from the keba and the DIP switches are configured correctly
connect(keba, &KeContact::reportOneReceived, info, [=] (const KeContact::ReportOne &report) {
Thing *thing = info->thing();
qCDebug(dcKeba()) << "Report one received for" << thing->name();
qCDebug(dcKeba()) << " - Firmware" << report.firmware;
qCDebug(dcKeba()) << " - Serial" << report.serialNumber;
qCDebug(dcKeba()) << " - Product" << report.product;
qCDebug(dcKeba()) << " - Uptime" << report.seconds / 60 << "[min]";
qCDebug(dcKeba()) << " - Com Module" << report.comModule;
qCDebug(dcKeba()) << " - DIP switch 1" << report.dipSw1;
qCDebug(dcKeba()) << " - DIP switch 2" << report.dipSw2;
KebaProductInfo productInformation(report.product);
if (thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString().isEmpty()) {
qCDebug(dcKeba()) << "Update serial number parameter for" << thing << "to" << report.serialNumber;
thing->setParamValue(m_serialNumberParamTypeIds.value(thing->thingClassId()), report.serialNumber);
}
if (thing->paramValue(m_modelParamTypeIds.value(thing->thingClassId())).toString().isEmpty()) {
qCDebug(dcKeba()) << "Update model parameter for" << thing << "to" << report.product;
thing->setParamValue(m_modelParamTypeIds.value(thing->thingClassId()), report.product);
}
// Verify the DIP switches and warn the user in case if wrong configuration
// For having UPD controll on the keba we need DIP Switch 1.3 enabled
KeContact::DipSwitchOneFlag dipSwOne(report.dipSw1);
qCDebug(dcKeba()) << dipSwOne;
if (!dipSwOne.testFlag(KeContact::DipSwitchOneSmartHomeInterface)) {
qCWarning(dcKeba()) << "Connected successfully to Keba but the DIP Switch for controlling it is not enabled.";
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("The required communication interface is not enabled on this keba. Please make sure the DIP switch 1.3 is switched on and try again."));
return;
}
// Parse the product code and check if the model actually supports the UDP/Modbus communication
// Supported are:
// - The A series (german edition), no meter DE440 (green edition)
// - The B series (german edition), no meter DE440
// - All C series
// - All X series
if (productInformation.isValid()) {
bool supported = false;
qCDebug(dcKeba()) << "Product information are valid. Evaluating if model supports UDP/Modbus communication...";
switch (productInformation.series()) {
case KebaProductInfo::SeriesA:
if (productInformation.model() == "P30" && productInformation.germanEdition()) {
qCDebug(dcKeba()) << "The P30 A series german edition is supported (DE440 GREEN EDITION)";
supported = true;
}
break;
case KebaProductInfo::SeriesB:
if (productInformation.model() == "P30" && productInformation.germanEdition()) {
qCDebug(dcKeba()) << "The P30 B series german edition is supported (DE440)";
supported = true;
}
break;
case KebaProductInfo::SeriesC:
case KebaProductInfo::SeriesXWlan:
case KebaProductInfo::SeriesXWlan3G:
case KebaProductInfo::SeriesXWlan4G:
case KebaProductInfo::SeriesX3G:
case KebaProductInfo::SeriesX4G:
qCDebug(dcKeba()) << "The keba" << productInformation.series() << "is capable of communicating using UDP";
supported = true;
break;
default:
break;
}
if (!supported) {
qCWarning(dcKeba()) << "Connected successfully to Keba but this model" << productInformation.series() << "has no communication module.";
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("This model does not support communication with smart devices."));
return;
}
} else {
qCWarning(dcKeba()) << "Product information are not valid. Cannot determin if this model supports UDP/Modbus communication, assuming yes so let's try to init...";
}
m_kebaDevices.insert(thing->id(), keba);
info->finish(Thing::ThingErrorNoError);
qCDebug(dcKeba()) << "Setup finsihed successfully for" << thing << thing->params();
thing->setStateValue("connected", true);
thing->setStateValue("firmware", report.firmware);
thing->setStateValue("uptime", report.seconds / 60);
});
keba->getReport1();
connect(keba, &KeContact::destroyed, this, [this, thing]{
m_kebaDevices.remove(thing->id());
// Setup failed, lets search the network, maybe the IP has changed...
searchNetworkDevices();
});
}
void IntegrationPluginKeba::postSetupThing(Thing *thing)
{
qCDebug(dcKeba()) << "Post setup" << thing->name();
if (thing->thingClassId() != wallboxThingClassId) {
qCWarning(dcKeba()) << "Thing class id not supported" << thing->thingClassId();
return;
}
KeContact *keba = m_kebaDevices.value(thing->id());
if (!keba) {
qCWarning(dcKeba()) << "No Keba connection found for this thing";
qCWarning(dcKeba()) << "No Keba connection found for this thing while doing post setup.";
return;
} else {
keba->getReport2();
keba->getReport3();
// No valid information if no meter
if (thing->thingClassId() != kebaSimpleThingClassId)
keba->getReport3();
}
// Try to find the mac address in case the user added the ip manually
if (thing->paramValue(wallboxThingMacAddressParamTypeId).toString().isEmpty()
|| thing->paramValue(wallboxThingMacAddressParamTypeId).toString() == "00:00:00:00:00:00") {
if (thing->paramValue(m_macAddressParamTypeIds.value(thing->thingClassId())).toString().isEmpty()
|| thing->paramValue(m_macAddressParamTypeIds.value(thing->thingClassId())).toString() == "00:00:00:00:00:00") {
searchNetworkDevices();
}
if (!m_updateTimer) {
m_updateTimer = hardwareManager()->pluginTimerManager()->registerTimer(10);
connect(m_updateTimer, &PluginTimer::timeout, this, [this]() {
foreach (Thing *thing, myThings().filterByThingClassId(wallboxThingClassId)) {
KeContact *keba = m_kebaDevices.value(thing->id());
foreach (const ThingId &thingId, m_kebaDevices.keys()) {
KeContact *keba = m_kebaDevices.value(thingId);
Thing *thing = myThings().findById(thingId);
if (!keba) {
qCWarning(dcKeba()) << "No Keba connection found for" << thing->name();
return;
}
keba->getReport2();
keba->getReport3();
if (thing->stateValue(wallboxActivityStateTypeId).toString() == "Charging") {
if (thing->stateValue("activity").toString() == "Charging") {
keba->getReport1XX(100);
}
}
@ -304,8 +318,9 @@ void IntegrationPluginKeba::postSetupThing(Thing *thing)
connect(m_reconnectTimer, &PluginTimer::timeout, this, [this] {
bool startDiscoveryRequired = false;
// Only search for new network devices if there is one keba which is not connected
foreach (Thing *thing, myThings().filterByThingClassId(wallboxThingClassId)) {
KeContact *keba = m_kebaDevices.value(thing->id());
foreach (const ThingId &thingId, m_kebaDevices.keys()) {
KeContact *keba = m_kebaDevices.value(thingId);
Thing *thing = myThings().findById(thingId);
if (!keba) {
qCWarning(dcKeba()) << "No Keba connection found for" << thing->name();
startDiscoveryRequired = true;
@ -329,11 +344,13 @@ void IntegrationPluginKeba::postSetupThing(Thing *thing)
void IntegrationPluginKeba::thingRemoved(Thing *thing)
{
qCDebug(dcKeba()) << "Deleting" << thing->name();
if (thing->thingClassId() == wallboxThingClassId && m_kebaDevices.contains(thing->id())) {
if (m_kebaDevices.contains(thing->id())) {
KeContact *keba = m_kebaDevices.take(thing->id());
keba->deleteLater();
}
m_lastSessionId.remove(thing->id());
if (myThings().empty()) {
qCDebug(dcKeba()) << "Closing UDP Ports";
m_kebaDataLayer->deleteLater();
@ -357,33 +374,33 @@ void IntegrationPluginKeba::executeAction(ThingActionInfo *info)
Thing *thing = info->thing();
Action action = info->action();
if (thing->thingClassId() == wallboxThingClassId) {
KeContact *keba = m_kebaDevices.value(thing->id());
if (!keba) {
qCWarning(dcKeba()) << "Device not properly initialized, Keba object missing";
return info->finish(Thing::ThingErrorHardwareNotAvailable);
}
KeContact *keba = m_kebaDevices.value(thing->id());
if (!keba) {
qCWarning(dcKeba()) << "Device not properly initialized, Keba object missing";
return info->finish(Thing::ThingErrorHardwareNotAvailable);
}
// Make sure wallbox is reachable
if (!keba->reachable()) {
qCWarning(dcKeba()) << "Failed to execute action. The wallbox seems not to be reachable" << thing;
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
// Make sure keba is reachable
if (!keba->reachable()) {
qCWarning(dcKeba()) << "Failed to execute action. The keba seems not to be reachable" << thing;
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
QUuid requestId;
if (action.actionTypeId() == wallboxMaxChargingCurrentActionTypeId) {
int milliAmpere = action.paramValue(wallboxMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt() * 1000;
QUuid requestId;
if (thing->thingClassId() == kebaThingClassId) {
if (action.actionTypeId() == kebaMaxChargingCurrentActionTypeId) {
int milliAmpere = action.paramValue(kebaMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt() * 1000;
requestId = keba->setMaxAmpereGeneral(milliAmpere);
} else if (action.actionTypeId() == wallboxPowerActionTypeId) {
requestId = keba->enableOutput(action.param(wallboxPowerActionTypeId).value().toBool());
} else if (action.actionTypeId() == wallboxDisplayActionTypeId) {
requestId = keba->displayMessage(action.param(wallboxDisplayActionMessageParamTypeId).value().toByteArray());
} else if (action.actionTypeId() == wallboxOutputX2ActionTypeId) {
requestId = keba->setOutputX2(action.param(wallboxOutputX2ActionOutputX2ParamTypeId).value().toBool());
} else if (action.actionTypeId() == wallboxFailsafeModeActionTypeId) {
} else if (action.actionTypeId() == kebaPowerActionTypeId) {
requestId = keba->enableOutput(action.param(kebaPowerActionTypeId).value().toBool());
} else if (action.actionTypeId() == kebaDisplayActionTypeId) {
requestId = keba->displayMessage(action.param(kebaDisplayActionMessageParamTypeId).value().toByteArray());
} else if (action.actionTypeId() == kebaOutputX2ActionTypeId) {
requestId = keba->setOutputX2(action.param(kebaOutputX2ActionOutputX2ParamTypeId).value().toBool());
} else if (action.actionTypeId() == kebaFailsafeModeActionTypeId) {
int timeout = 0;
if (action.param(wallboxFailsafeModeActionFailsafeModeParamTypeId).value().toBool()) {
if (action.param(kebaFailsafeModeActionFailsafeModeParamTypeId).value().toBool()) {
timeout = 60;
}
requestId = keba->setFailsafe(timeout, 0, false);
@ -392,18 +409,37 @@ void IntegrationPluginKeba::executeAction(ThingActionInfo *info)
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
// If the keba returns an invalid uuid, something went wrong
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
return;
} else if (thing->thingClassId() == kebaSimpleThingClassId) {
if (action.actionTypeId() == kebaSimpleMaxChargingCurrentActionTypeId) {
int milliAmpere = action.paramValue(kebaSimpleMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt() * 1000;
requestId = keba->setMaxAmpereGeneral(milliAmpere);
} else if (action.actionTypeId() == kebaSimplePowerActionTypeId) {
requestId = keba->enableOutput(action.param(kebaSimplePowerActionTypeId).value().toBool());
} else if (action.actionTypeId() == kebaSimpleDisplayActionTypeId) {
requestId = keba->displayMessage(action.param(kebaSimpleDisplayActionMessageParamTypeId).value().toByteArray());
} else if (action.actionTypeId() == kebaSimpleOutputX2ActionTypeId) {
requestId = keba->setOutputX2(action.param(kebaSimpleOutputX2ActionOutputX2ParamTypeId).value().toBool());
} else if (action.actionTypeId() == kebaSimpleFailsafeModeActionTypeId) {
int timeout = 0;
if (action.param(kebaSimpleFailsafeModeActionFailsafeModeParamTypeId).value().toBool()) {
timeout = 60;
}
requestId = keba->setFailsafe(timeout, 0, false);
} else {
qCWarning(dcKeba()) << "Unhandled ActionTypeId:" << action.actionTypeId();
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this]{ m_asyncActions.remove(requestId); });
} else {
qCWarning(dcKeba()) << "Execute action, unhandled device class" << thing->thingClass();
info->finish(Thing::ThingErrorThingClassNotFound);
}
// If the keba returns an invalid uuid, something went wrong
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
return;
}
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this]{ m_asyncActions.remove(requestId); });
}
void IntegrationPluginKeba::onCommandExecuted(QUuid requestId, bool success)
@ -421,12 +457,22 @@ void IntegrationPluginKeba::onCommandExecuted(QUuid requestId, bool success)
qCDebug(dcKeba()) << "Action execution finished successfully. Request ID:" << requestId.toString();
info->finish(Thing::ThingErrorNoError);
// Set the value to the state so we don't have to wait for the report 2 response
if (info->action().actionTypeId() == wallboxMaxChargingCurrentActionTypeId) {
uint value = info->action().paramValue(wallboxMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt();
info->thing()->setStateValue(wallboxMaxChargingCurrentStateTypeId, value);
} else if (info->action().actionTypeId() == wallboxPowerActionTypeId) {
info->thing()->setStateValue(wallboxPowerStateTypeId, info->action().paramValue(wallboxPowerActionTypeId).toBool());
if (thing->thingClassId() == kebaThingClassId) {
// Set the value to the state so we don't have to wait for the report 2 response
if (info->action().actionTypeId() == kebaMaxChargingCurrentActionTypeId) {
uint value = info->action().paramValue(kebaMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt();
info->thing()->setStateValue("maxChargingCurrent", value);
} else if (info->action().actionTypeId() == kebaPowerActionTypeId) {
info->thing()->setStateValue("power", info->action().paramValue(kebaPowerActionTypeId).toBool());
}
} else if (thing->thingClassId() == kebaSimpleThingClassId) {
// Set the value to the state so we don't have to wait for the report 2 response
if (info->action().actionTypeId() == kebaSimpleMaxChargingCurrentActionTypeId) {
uint value = info->action().paramValue(kebaSimpleMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toUInt();
info->thing()->setStateValue("maxChargingCurrent", value);
} else if (info->action().actionTypeId() == kebaPowerActionTypeId) {
info->thing()->setStateValue("power", info->action().paramValue(kebaSimplePowerActionTypeId).toBool());
}
}
} else {
qCWarning(dcKeba()) << "Action execution finished with error. Request ID:" << requestId.toString();
@ -439,52 +485,52 @@ void IntegrationPluginKeba::setDeviceState(Thing *thing, KeContact::State state)
{
switch (state) {
case KeContact::StateStarting:
thing->setStateValue(wallboxActivityStateTypeId, "Starting");
thing->setStateValue("activity", "Starting");
break;
case KeContact::StateNotReady:
thing->setStateValue(wallboxActivityStateTypeId, "Not ready for charging");
thing->setStateValue("activity", "Not ready for charging");
break;
case KeContact::StateReady:
thing->setStateValue(wallboxActivityStateTypeId, "Ready for charging");
thing->setStateValue("activity", "Ready for charging");
break;
case KeContact::StateCharging:
thing->setStateValue(wallboxActivityStateTypeId, "Charging");
thing->setStateValue("activity", "Charging");
break;
case KeContact::StateError:
thing->setStateValue(wallboxActivityStateTypeId, "Error");
thing->setStateValue("activity", "Error");
break;
case KeContact::StateAuthorizationRejected:
thing->setStateValue(wallboxActivityStateTypeId, "Authorization rejected");
thing->setStateValue("activity", "Authorization rejected");
break;
}
thing->setStateValue(wallboxChargingStateTypeId, state == KeContact::StateCharging);
thing->setStateValue("charging", state == KeContact::StateCharging);
}
void IntegrationPluginKeba::setDevicePlugState(Thing *thing, KeContact::PlugState plugState)
{
switch (plugState) {
case KeContact::PlugStateUnplugged:
thing->setStateValue(wallboxPlugStateStateTypeId, "Unplugged");
thing->setStateValue("plugState", "Unplugged");
break;
case KeContact::PlugStatePluggedOnChargingStation:
thing->setStateValue(wallboxPlugStateStateTypeId, "Plugged in charging station");
thing->setStateValue("plugState", "Plugged in charging station");
break;
case KeContact::PlugStatePluggedOnChargingStationAndPluggedOnEV:
thing->setStateValue(wallboxPlugStateStateTypeId, "Plugged in on EV");
thing->setStateValue("plugState", "Plugged in on EV");
break;
case KeContact::PlugStatePluggedOnChargingStationAndPlugLocked:
thing->setStateValue(wallboxPlugStateStateTypeId, "Plugged in and locked");
thing->setStateValue("plugState", "Plugged in and locked");
break;
case KeContact::PlugStatePluggedOnChargingStationAndPlugLockedAndPluggedOnEV:
thing->setStateValue(wallboxPlugStateStateTypeId, "Plugged in on EV and locked");
thing->setStateValue("plugState", "Plugged in on EV and locked");
break;
}
if (plugState >= 5) {
thing->setStateValue(wallboxPluggedInStateTypeId, true);
thing->setStateValue("pluggedIn", true);
} else {
thing->setStateValue(wallboxPluggedInStateTypeId, false);
thing->setStateValue("pluggedIn", false);
}
}
@ -496,28 +542,33 @@ void IntegrationPluginKeba::searchNetworkDevices()
}
if (!m_kebaDataLayer) {
qCDebug(dcKeba()) << "Could not search wallboxes in the network. The data layer seems not to be available";
qCDebug(dcKeba()) << "Could not search keba wallboxes in the network. The data layer seems not to be available";
return;
}
qCDebug(dcKeba()) << "Start searching for wallboxes in the network...";
qCDebug(dcKeba()) << "Start searching keba wallboxes in the network...";
m_runningDiscovery = new KebaDiscovery(m_kebaDataLayer, hardwareManager()->networkDeviceDiscovery(), this);
connect(m_runningDiscovery, &KebaDiscovery::discoveryFinished, this, [=](){
foreach (const KebaDiscovery::KebaDiscoveryResult &result, m_runningDiscovery->discoveryResults()) {
foreach (Thing *existingThing, myThings().filterByThingClassId(wallboxThingClassId)) {
if (existingThing->paramValue(wallboxThingMacAddressParamTypeId).toString().isEmpty()) {
foreach (const ThingId &thingId, m_kebaDevices.keys()) {
Thing *existingThing = myThings().findById(thingId);
if (!existingThing)
continue;
if (existingThing->paramValue(m_macAddressParamTypeIds.value(existingThing->thingClassId())).toString().isEmpty()) {
//This device got probably manually setup, to enable auto rediscovery the MAC address needs to setup
if (existingThing->paramValue(wallboxThingIpAddressParamTypeId).toString() == result.networkDeviceInfo.address().toString()) {
if (existingThing->paramValue(m_ipAddressParamTypeIds.value(existingThing->thingClassId())).toString() == result.networkDeviceInfo.address().toString()) {
qCDebug(dcKeba()) << "Wallbox MAC address has been discovered" << existingThing->name() << result.networkDeviceInfo.macAddress();
existingThing->setParamValue(wallboxThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
existingThing->setParamValue(m_macAddressParamTypeIds.value(existingThing->thingClassId()), result.networkDeviceInfo.macAddress());
}
} else if (existingThing->paramValue(wallboxThingMacAddressParamTypeId).toString() == result.networkDeviceInfo.macAddress()) {
} else if (existingThing->paramValue(m_macAddressParamTypeIds.value(existingThing->thingClassId())).toString() == result.networkDeviceInfo.macAddress()) {
// We found the existing keba thing, lets check if the ip has changed
if (existingThing->paramValue(wallboxThingIpAddressParamTypeId).toString() != result.networkDeviceInfo.address().toString()) {
if (existingThing->paramValue(m_ipAddressParamTypeIds.value(existingThing->thingClassId())).toString() != result.networkDeviceInfo.address().toString()) {
// Update the ip address of the thing.
// FIXME: as of now the thing manager does not store the changed param
qCDebug(dcKeba()) << "Wallbox IP Address has changed, from" << existingThing->paramValue(wallboxThingIpAddressParamTypeId).toString() << "to" << result.networkDeviceInfo.address().toString();
existingThing->setParamValue(wallboxThingIpAddressParamTypeId, result.networkDeviceInfo.address().toString());
qCDebug(dcKeba()) << "Wallbox IP Address has changed, from" << existingThing->paramValue(m_ipAddressParamTypeIds.value(existingThing->thingClassId())).toString()
<< "to" << result.networkDeviceInfo.address().toString();
existingThing->setParamValue(m_ipAddressParamTypeIds.value(existingThing->thingClassId()), result.networkDeviceInfo.address().toString());
// Make sure the setup has already run for this thing, if not, the thingmanager will retry with the new ip every 15 seconds
KeContact *keba = m_kebaDevices.value(existingThing->id());
@ -553,7 +604,7 @@ void IntegrationPluginKeba::onConnectionChanged(bool status)
return;
}
thing->setStateValue(wallboxConnectedStateTypeId, status);
thing->setStateValue("connected", status);
if (!status) {
searchNetworkDevices();
}
@ -566,7 +617,7 @@ void IntegrationPluginKeba::onReportTwoReceived(const KeContact::ReportTwo &repo
if (!thing)
return;
qCDebug(dcKeba()) << "Report 2 received for" << thing->name() << "Serial number:" << thing->paramValue(wallboxThingSerialNumberParamTypeId).toString();
qCDebug(dcKeba()) << "Report 2 received for" << thing->name() << "Serial number:" << thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString();
qCDebug(dcKeba()) << " - State:" << reportTwo.state;
qCDebug(dcKeba()) << " - Error 1:" << reportTwo.error1;
qCDebug(dcKeba()) << " - Error 2:" << reportTwo.error2;
@ -586,30 +637,30 @@ void IntegrationPluginKeba::onReportTwoReceived(const KeContact::ReportTwo &repo
qCDebug(dcKeba()) << " - Serial number:" << reportTwo.serialNumber;
qCDebug(dcKeba()) << " - Uptime:" << reportTwo.seconds/60 << "[min]";
if (reportTwo.serialNumber == thing->paramValue(wallboxThingSerialNumberParamTypeId).toString()) {
if (reportTwo.serialNumber == thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString()) {
setDeviceState(thing, reportTwo.state);
setDevicePlugState(thing, reportTwo.plugState);
thing->setStateValue(wallboxPowerStateTypeId, reportTwo.enableUser);
thing->setStateValue(wallboxError1StateTypeId, reportTwo.error1);
thing->setStateValue(wallboxError2StateTypeId, reportTwo.error2);
thing->setStateValue(wallboxSystemEnabledStateTypeId, reportTwo.enableSys);
thing->setStateValue("power", reportTwo.enableUser);
thing->setStateValue("error1", reportTwo.error1);
thing->setStateValue("error2", reportTwo.error2);
thing->setStateValue("systemEnabled", reportTwo.enableSys);
thing->setStateValue(wallboxMaxChargingCurrentStateTypeId, qRound(reportTwo.currentUser));
thing->setStateValue(wallboxMaxChargingCurrentPercentStateTypeId, reportTwo.maxCurrentPercentage);
thing->setStateValue(wallboxMaxChargingCurrentHardwareStateTypeId, reportTwo.currentHardwareLimitation);
thing->setStateValue("maxChargingCurrent", qRound(reportTwo.currentUser));
thing->setStateValue("maxChargingCurrentPercent", reportTwo.maxCurrentPercentage);
thing->setStateValue("maxChargingCurrentHardware", reportTwo.currentHardwareLimitation);
// Set the state limits according to the hardware limits
if (reportTwo.currentHardwareLimitation > 0) {
thing->setStateMaxValue(wallboxMaxChargingCurrentStateTypeId, reportTwo.currentHardwareLimitation);
thing->setStateMaxValue("maxChargingCurrent", reportTwo.currentHardwareLimitation);
} else {
// If we have no limit given, reset to the statetype limit
thing->setStateMaxValue(wallboxMaxChargingCurrentStateTypeId, thing->thingClass().getStateType(wallboxMaxChargingCurrentStateTypeId).maxValue());
thing->setStateMaxValue("maxChargingCurrent", thing->thingClass().stateTypes().findByName("maxChargingCurrent").maxValue());
}
thing->setStateValue(wallboxOutputX2StateTypeId, reportTwo.output);
thing->setStateValue(wallboxInputStateTypeId, reportTwo.input);
thing->setStateValue("outputX2", reportTwo.output);
thing->setStateValue("input", reportTwo.input);
thing->setStateValue(wallboxUptimeStateTypeId, reportTwo.seconds / 60);
thing->setStateValue("uptime", reportTwo.seconds / 60);
} else {
qCWarning(dcKeba()) << "Received report but the serial number didn't match";
}
@ -622,7 +673,7 @@ void IntegrationPluginKeba::onReportThreeReceived(const KeContact::ReportThree &
if (!thing)
return;
qCDebug(dcKeba()) << "Report 3 received for" << thing->name() << "Serial number:" << thing->paramValue(wallboxThingSerialNumberParamTypeId).toString();
qCDebug(dcKeba()) << "Report 3 received for" << thing->name() << "Serial number:" << thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString();
qCDebug(dcKeba()) << " - Current phase 1:" << reportThree.currentPhase1 << "[A]";
qCDebug(dcKeba()) << " - Current phase 2:" << reportThree.currentPhase2 << "[A]";
qCDebug(dcKeba()) << " - Current phase 3:" << reportThree.currentPhase3 << "[A]";
@ -635,17 +686,23 @@ void IntegrationPluginKeba::onReportThreeReceived(const KeContact::ReportThree &
qCDebug(dcKeba()) << " - Serial number" << reportThree.serialNumber;
qCDebug(dcKeba()) << " - Uptime" << reportThree.seconds / 60 << "[min]";
if (reportThree.serialNumber == thing->paramValue(wallboxThingSerialNumberParamTypeId).toString()) {
thing->setStateValue(wallboxCurrentPhaseAStateTypeId, reportThree.currentPhase1);
thing->setStateValue(wallboxCurrentPhaseBStateTypeId, reportThree.currentPhase2);
thing->setStateValue(wallboxCurrentPhaseCStateTypeId, reportThree.currentPhase3);
thing->setStateValue(wallboxVoltagePhaseAStateTypeId, reportThree.voltagePhase1);
thing->setStateValue(wallboxVoltagePhaseBStateTypeId, reportThree.voltagePhase2);
thing->setStateValue(wallboxVoltagePhaseCStateTypeId, reportThree.voltagePhase3);
thing->setStateValue(wallboxCurrentPowerStateTypeId, reportThree.power);
thing->setStateValue(wallboxSessionEnergyStateTypeId, reportThree.energySession);
thing->setStateValue(wallboxPowerFactorStateTypeId, reportThree.powerFactor);
thing->setStateValue(wallboxTotalEnergyConsumedStateTypeId, reportThree.energyTotal);
// Note: all these infos are from the meter...
if (thing->thingClassId() == kebaSimpleThingClassId) {
qCDebug(dcKeba()) << "Received report 3 from keba but this model has no meter. Ignoring report data...";
return;
}
if (reportThree.serialNumber == thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString()) {
thing->setStateValue("currentPhaseA", reportThree.currentPhase1);
thing->setStateValue("currentPhaseB", reportThree.currentPhase2);
thing->setStateValue("currentPhaseC", reportThree.currentPhase3);
thing->setStateValue("voltagePhaseA", reportThree.voltagePhase1);
thing->setStateValue("voltagePhaseB", reportThree.voltagePhase2);
thing->setStateValue("voltagePhaseC", reportThree.voltagePhase3);
thing->setStateValue("currentPower", reportThree.power);
thing->setStateValue("sessionEnergy", reportThree.energySession);
thing->setStateValue("powerFactor", reportThree.powerFactor);
thing->setStateValue("totalEnergyConsumed", reportThree.energyTotal);
// Check how many phases are actually charging, and update the phase count only if something happens on the phases (current or power)
if (!(reportThree.currentPhase1 == 0 && reportThree.currentPhase2 == 0 && reportThree.currentPhase3 == 0)) {
@ -659,7 +716,7 @@ void IntegrationPluginKeba::onReportThreeReceived(const KeContact::ReportThree &
if (reportThree.currentPhase3 != 0)
phaseCount += 1;
thing->setStateValue(wallboxPhaseCountStateTypeId, phaseCount);
thing->setStateValue("phaseCount", phaseCount);
}
} else {
qCWarning(dcKeba()) << "Received report but the serial number didn't match";
@ -673,7 +730,7 @@ void IntegrationPluginKeba::onReport1XXReceived(int reportNumber, const KeContac
if (!thing)
return;
qCDebug(dcKeba()) << "Report" << reportNumber << "received for" << thing->name() << "Serial number:" << thing->paramValue(wallboxThingSerialNumberParamTypeId).toString();
qCDebug(dcKeba()) << "Report" << reportNumber << "received for" << thing->name() << "Serial number:" << thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString();
qCDebug(dcKeba()) << " - Session Id" << report.sessionId;
qCDebug(dcKeba()) << " - Curr HW" << report.currHW;
qCDebug(dcKeba()) << " - Energy start" << report.startEnergy;
@ -686,19 +743,25 @@ void IntegrationPluginKeba::onReport1XXReceived(int reportNumber, const KeContac
qCDebug(dcKeba()) << " - Serial number" << report.serialNumber;
qCDebug(dcKeba()) << " - Uptime" << report.seconds;
// Note: all these infos are from the meter...
if (thing->thingClassId() == kebaSimpleThingClassId) {
qCDebug(dcKeba()) << "Received" << reportNumber << "from keba but this model has no meter. Ignoring report data...";
return;
}
if (reportNumber == 100) {
// Report 100 is the current charging session
if (report.endTime == 0) {
// if the charing session is finished the end time will be set
double duration = (report.seconds - report.startTime) / 60.00;
thing->setStateValue(wallboxSessionTimeStateTypeId, duration);
thing->setStateValue("sessionTime", duration);
} else {
// Charging session is finished and copied to Report 101
}
} else if (reportNumber == 101) {
// Report 101 is the lastest finished session
if (report.serialNumber == thing->paramValue(wallboxThingSerialNumberParamTypeId).toString()) {
if (report.serialNumber == thing->paramValue(m_serialNumberParamTypeIds.value(thing->thingClassId())).toString()) {
if (!m_lastSessionId.contains(thing->id())) {
// This happens after reboot
m_lastSessionId.insert(thing->id(), report.sessionId);
@ -706,12 +769,12 @@ void IntegrationPluginKeba::onReport1XXReceived(int reportNumber, const KeContac
if (m_lastSessionId.value(thing->id()) != report.sessionId) {
qCDebug(dcKeba()) << "New session id receivd";
Event event;
event.setEventTypeId(wallboxChargingSessionFinishedEventTypeId);
event.setEventTypeId(kebaChargingSessionFinishedEventTypeId);
event.setThingId(thing->id());
ParamList params;
params << Param(wallboxChargingSessionFinishedEventEnergyParamTypeId, report.presentEnergy);
params << Param(wallboxChargingSessionFinishedEventDurationParamTypeId, report.endTime);
params << Param(wallboxChargingSessionFinishedEventIdParamTypeId);
params << Param(kebaChargingSessionFinishedEventEnergyParamTypeId, report.presentEnergy);
params << Param(kebaChargingSessionFinishedEventDurationParamTypeId, report.endTime);
params << Param(kebaChargingSessionFinishedEventIdParamTypeId);
event.setParams(params);
emit emitEvent(event);
}
@ -738,10 +801,10 @@ void IntegrationPluginKeba::onBroadcastReceived(KeContact::BroadcastType type, c
setDevicePlugState(thing, KeContact::PlugState(content.toInt()));
break;
case KeContact::BroadcastTypeInput:
thing->setStateValue(wallboxInputStateTypeId, (content.toInt() == 1));
thing->setStateValue("input", (content.toInt() == 1));
break;
case KeContact::BroadcastTypeEPres:
thing->setStateValue(wallboxSessionEnergyStateTypeId, content.toInt() / 10000.00);
thing->setStateValue("sessionEnergy", content.toInt() / 10000.00);
break;
case KeContact::BroadcastTypeState:
setDeviceState(thing, KeContact::State(content.toInt()));
@ -750,7 +813,7 @@ void IntegrationPluginKeba::onBroadcastReceived(KeContact::BroadcastType type, c
//Current preset value via Control pilot in milliampere
break;
case KeContact::BroadcastTypeEnableSys:
thing->setStateValue(wallboxSystemEnabledStateTypeId, (content.toInt() != 0));
thing->setStateValue("systemEnabled", (content.toInt() != 0));
break;
}
}

View File

@ -1,6 +1,6 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2020, nymea GmbH
* Copyright 2013 - 2022, nymea GmbH
* Contact: contact@nymea.io
*
* This file is part of nymea.
@ -44,6 +44,7 @@
#include <QDateTime>
#include <QUdpSocket>
#include "extern-plugininfo.h"
class IntegrationPluginKeba : public IntegrationPlugin
{
@ -75,6 +76,11 @@ private:
QHash<QUuid, ThingActionInfo *> m_asyncActions;
KebaDiscovery *m_runningDiscovery = nullptr;
QHash<ThingClassId, ParamTypeId> m_macAddressParamTypeIds;
QHash<ThingClassId, ParamTypeId> m_ipAddressParamTypeIds;
QHash<ThingClassId, ParamTypeId> m_modelParamTypeIds;
QHash<ThingClassId, ParamTypeId> m_serialNumberParamTypeIds;
void setDeviceState(Thing *device, KeContact::State state);
void setDevicePlugState(Thing *device, KeContact::PlugState plugState);

View File

@ -10,7 +10,7 @@
"thingClasses": [
{
"id": "900dacec-cae7-4a37-95ba-501846368ea2",
"name": "wallbox",
"name": "keba",
"displayName": "Keba KeContact",
"createMethods": ["discovery", "user"],
"interfaces": ["evcharger", "smartmeterconsumer", "connectable"],
@ -393,6 +393,228 @@
]
}
]
},
{
"id": "c5bca9d2-2a17-40c4-8bb2-ba89783a6dd1",
"name": "kebaSimple",
"displayName": "KeConnect German Edition",
"createMethods": ["discovery", "user"],
"interfaces": ["evcharger", "connectable"],
"paramTypes":[
{
"id": "8324cad1-0d9d-4e48-b472-8c22eb7a1057",
"name": "ipAddress",
"displayName": "IP address",
"type": "QString",
"inputType": "IPv4Address",
"defaultValue":"0.0.0.0"
},
{
"id": "e438179a-5202-4106-a622-d9e10a74fed9",
"name": "macAddress",
"displayName": "MAC address",
"type": "QString",
"inputType": "TextLine",
"defaultValue":"",
"readOnly": true
},
{
"id": "6f732eb9-1711-4da0-a9a4-abcfa19f5e34",
"name": "serialNumber",
"displayName": "Serial number",
"type": "QString",
"inputType": "TextLine",
"defaultValue":"",
"readOnly": true
},
{
"id": "5e49d289-9e32-47a8-8b30-43cb949695c8",
"name": "model",
"displayName": "Product name",
"type": "QString",
"inputType": "TextLine",
"defaultValue":"",
"readOnly": true
}
],
"stateTypes": [
{
"id": "995f2ccf-2082-434e-a46d-c506862e6d6a",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "63f84293-62aa-420d-bc0d-cc48618c6526",
"name": "power",
"displayName": "Charging enabled",
"displayNameEvent": "Charging enabled changed",
"displayNameAction": "Set charging enabled",
"type": "bool",
"writable": true,
"defaultValue": false,
"suggestLogging": true
},
{
"id": "8ade4b68-e44e-425c-87ea-a35d176f337d",
"name": "systemEnabled",
"displayName": "System enabled",
"displayNameEvent": "System enabled changed",
"type": "bool",
"defaultValue": false
},
{
"id": "955ffd64-42f6-4000-94c5-c7f862daa438",
"name": "activity",
"displayName": "Activity",
"displayNameEvent": "Activity changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "82aa0d67-eea6-4a5e-b7ab-2848a4012490",
"name": "plugState",
"displayName": "Plug state",
"displayNameEvent": "Plug state changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "faf68cc9-f014-4db5-94fa-0f10a0b85fb1",
"name": "pluggedIn",
"displayName": "Car plugged in",
"displayNameEvent": "Car plugged in changed",
"type": "bool",
"defaultValue": false
},
{
"id": "38affdf2-f62e-458c-b738-8db81aa13790",
"name": "charging",
"displayName": "Charging",
"displayNameEvent": "Charging changed",
"type": "bool",
"defaultValue": false
},
{
"id": "2a72ad9e-96bd-4281-afb7-ce4f5c6f5052",
"name": "maxChargingCurrent",
"displayName": "Maximal charging current",
"displayNameEvent": "Maximal charging current changed",
"displayNameAction": "Set maximal charging current",
"type": "uint",
"unit": "Ampere",
"defaultValue": 6,
"minValue": 6,
"maxValue": 32,
"writable": true,
"suggestLogging": true
},
{
"id": "33631b7f-a675-4625-8095-31e09e03a010",
"name": "maxChargingCurrentPercent",
"displayName": "Maximal charging current in percent",
"displayNameEvent": "Maximal charging current percentage changed",
"type": "uint",
"unit": "Percentage",
"defaultValue": 100,
"minValue": 0,
"maxValue": 100
},
{
"id": "f94a2381-28a8-478e-ac44-0902a5be8885",
"name": "maxChargingCurrentHardware",
"displayName": "Maximal hardware charging current",
"displayNameEvent": "Maximal hardware charging current changed",
"type": "uint",
"unit": "Ampere",
"defaultValue": 32,
"suggestLogging": true
},
{
"id": "043ea799-4348-44f9-985d-bee2ba280957",
"name": "outputX2",
"displayName": "Output X2",
"displayNameEvent": "Output X2 changed",
"displayNameAction": "Set output X2",
"type": "bool",
"writable": true,
"defaultValue": false
},
{
"id": "0ca0921d-5516-44fb-9483-242d9bb7a2d0",
"name": "input",
"displayName": "Input",
"displayNameEvent": "Input changed",
"type": "bool",
"defaultValue": false
},
{
"id": "2cffff03-63b2-468d-b2ef-a4741401d7c8",
"name": "uptime",
"displayName": "Uptime",
"displayNameEvent": "Uptime changed",
"type": "int",
"unit": "Minutes",
"defaultValue": 0,
"cached": false
},
{
"id": "8380c340-84ee-4d62-84b0-7c5738ab66bc",
"name": "error1",
"displayName": "Error 1",
"displayNameEvent": "Error 1 changed",
"type": "int",
"defaultValue": 0,
"cached": false
},
{
"id": "afe287a2-35e2-4762-a6bf-79d7c31d32ab",
"name": "error2",
"displayName": "Error 2",
"displayNameEvent": "Error 2 changed",
"type": "int",
"defaultValue": 0,
"cached": false
},
{
"id": "bfad6a1a-40e0-4b32-9f42-09efd5a7e94c",
"name": "failsafeMode",
"displayName": "Failsafe mode",
"displayNameEvent": "Failsafe mode changed",
"displayNameAction": "Set failsafe mode",
"writable": true,
"type": "bool",
"defaultValue": false
},
{
"id": "d473770e-c5b4-4845-8215-0dea304ea202",
"name": "firmware",
"displayName": "Firmware",
"displayNameEvent": "Firmware changed",
"type": "QString",
"defaultValue": ""
}
],
"actionTypes": [
{
"id": "e756c842-bec5-42ee-a28b-280d48e834b1",
"name": "display",
"displayName": "Display",
"paramTypes": [
{
"id": "ec14a880-0546-431c-ab4e-578d56ecbfb9",
"name": "message",
"displayName": "Display message",
"type": "QString",
"defaultValue": ""
}
]
}
],
"eventTypes": [ ]
}
]
}

View File

@ -4,290 +4,224 @@
<context>
<name>IntegrationPluginKeba</name>
<message>
<location filename="../integrationpluginkeba.cpp" line="60"/>
<location filename="../integrationpluginkeba.cpp" line="69"/>
<source>The communication could not be established.</source>
<translation type="unfinished"></translation>
<translation>Die Kommunikation konnte nicht aufgebaut werden.</translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="67"/>
<location filename="../integrationpluginkeba.cpp" line="76"/>
<source>The network discovery is not available. Please enter the IP address manually.</source>
<translation type="unfinished"></translation>
<translation>Das Durchsuchen des Netzwerks ist leider nicht möglich. Bitte geben Sie die IP Adresse manuell ein.</translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="131"/>
<location filename="../integrationpluginkeba.cpp" line="148"/>
<source>Error opening network port.</source>
<translation>Fehler beim Öffnen des Netzwerkports.</translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="141"/>
<location filename="../integrationpluginkeba.cpp" line="158"/>
<source>Already configured for this IP address.</source>
<translation type="unfinished"></translation>
<translation>Es wurde bereits ein Gerät für diese IP Addresse eingerichtet.</translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="184"/>
<source>The required communication interface is not enabled on this wallbox. Please make sure the DIP switch 1.3 is switched on and try again.</source>
<translation type="unfinished"></translation>
<location filename="../integrationpluginkeba.cpp" line="203"/>
<source>The required communication interface is not enabled on this keba. Please make sure the DIP switch 1.3 is switched on and try again.</source>
<translation>Die notwendige Schnittstelle ist nicht eingeschaltet. Bitte stellen Sie sicher, dass DIP switch 1.3 eingeschaltet ist und versuchen Sie es erneut.</translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="209"/>
<location filename="../integrationpluginkeba.cpp" line="248"/>
<source>This model does not support communication with smart devices.</source>
<translation type="unfinished"></translation>
<translation>Dieses Model unterstützt keine Kommunikation mit Smarten Geräten.</translation>
</message>
</context>
<context>
<name>Keba</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="136"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="108"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="111"/>
<source>Activity</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: activity, ID: {539e5602-6dd9-465d-9705-3bb59bcf8982})
<extracomment>The name of the StateType ({955ffd64-42f6-4000-94c5-c7f862daa438}) of ThingClass kebaSimple
----------
The name of the StateType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass wallbox</extracomment>
The name of the StateType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass keba</extracomment>
<translation>Aktivität</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="142"/>
<source>Activity changed</source>
<extracomment>The name of the EventType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass wallbox</extracomment>
<translation>Aktivität geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="145"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="114"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="117"/>
<source>Car plugged in</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: pluggedIn, ID: {6c227717-f420-4dcd-bd52-49973715603b})
<extracomment>The name of the StateType ({faf68cc9-f014-4db5-94fa-0f10a0b85fb1}) of ThingClass kebaSimple
----------
The name of the StateType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
The name of the StateType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass keba</extracomment>
<translation>Auto angesteckt</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="151"/>
<source>Car plugged in changed</source>
<extracomment>The name of the EventType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="154"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="120"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="123"/>
<source>Charging</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: charging, ID: {c9785626-2501-478d-8c18-c42ad5d9a269})
<extracomment>The name of the StateType ({38affdf2-f62e-458c-b738-8db81aa13790}) of ThingClass kebaSimple
----------
The name of the StateType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
The name of the StateType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass keba</extracomment>
<translation>Lade</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="160"/>
<source>Charging changed</source>
<extracomment>The name of the EventType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="163"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="166"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="126"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="129"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="132"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="135"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: power, ID: {63f84293-62aa-420d-bc0d-cc48618c6526})
----------
The name of the ParamType (ThingClass: wallbox, EventType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
The name of the StateType ({63f84293-62aa-420d-bc0d-cc48618c6526}) of ThingClass kebaSimple
----------
The name of the StateType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
----------
The name of the StateType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass keba</extracomment>
<translation>Laden ermöglicht</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="172"/>
<source>Charging enabled changed</source>
<extracomment>The name of the EventType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
<translation>Laden ermäglicht geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="175"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="138"/>
<source>Charging session finished</source>
<extracomment>The name of the EventType ({dac02c37-f051-481a-ae99-1de0885ef37a}) of ThingClass wallbox</extracomment>
<translation>Ladesession beendet</translation>
<extracomment>The name of the EventType ({dac02c37-f051-481a-ae99-1de0885ef37a}) of ThingClass keba</extracomment>
<translation>Ladevorgang beendet</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="178"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="141"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="144"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: connected, ID: {ce813458-d7d8-4f40-9648-dba4c41e92f0})
<extracomment>The name of the StateType ({995f2ccf-2082-434e-a46d-c506862e6d6a}) of ThingClass kebaSimple
----------
The name of the StateType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass wallbox</extracomment>
The name of the StateType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass keba</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="184"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass wallbox</extracomment>
<translation>Verbunden geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="190"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="147"/>
<source>Current phase A</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseA, ID: {31ec17b0-11e3-4332-92b0-fea821cf024f})
----------
The name of the StateType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass keba</extracomment>
<translation>Ladestrom Phase A</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="193"/>
<source>Current phase A changed</source>
<extracomment>The name of the EventType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="196"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="150"/>
<source>Current phase B</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseB, ID: {cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97})
----------
The name of the StateType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass keba</extracomment>
<translation>Ladestrom Phase B</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="202"/>
<source>Current phase B changed</source>
<extracomment>The name of the EventType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="208"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="153"/>
<source>Current phase C</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseC, ID: {da838dc8-85f0-4e55-b4b5-cb93a43b373d})
----------
The name of the StateType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass keba</extracomment>
<translation>Ladestrom Phase C</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="211"/>
<source>Current phase C changed</source>
<extracomment>The name of the EventType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="156"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="159"/>
<source>Display</source>
<extracomment>The name of the ActionType ({158b1a8f-fde9-4191-bf42-4ece5fe582e6}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({e756c842-bec5-42ee-a28b-280d48e834b1}) of ThingClass kebaSimple
----------
The name of the ActionType ({158b1a8f-fde9-4191-bf42-4ece5fe582e6}) of ThingClass keba</extracomment>
<translation>Anzeige</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="217"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="162"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="165"/>
<source>Display message</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: display, ID: {4e69a761-f4f1-42d0-83db-380894a86ebc})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: display, ID: {ec14a880-0546-431c-ab4e-578d56ecbfb9})
----------
The name of the ParamType (ThingClass: keba, ActionType: display, ID: {4e69a761-f4f1-42d0-83db-380894a86ebc})</extracomment>
<translation>Nachricht</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="220"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="168"/>
<source>Duration</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {60494d6f-853b-42b8-894e-108a52ed6feb})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {60494d6f-853b-42b8-894e-108a52ed6feb})</extracomment>
<translation>Dauer</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="171"/>
<source>Energy</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {c8de58b6-b671-4fee-b552-d2c14a37a769})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {c8de58b6-b671-4fee-b552-d2c14a37a769})</extracomment>
<translation>Energie</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="174"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="177"/>
<source>Error 1</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: error1, ID: {b44bc948-1234-4f87-9a22-bfb6de09df4d})
<extracomment>The name of the StateType ({8380c340-84ee-4d62-84b0-7c5738ab66bc}) of ThingClass kebaSimple
----------
The name of the StateType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass wallbox</extracomment>
The name of the StateType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass keba</extracomment>
<translation>Error 1</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="232"/>
<source>Error 1 changed</source>
<extracomment>The name of the EventType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass wallbox</extracomment>
<translation>Error 1 geändert</translation>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="219"/>
<source>KeConnect German Edition</source>
<extracomment>The name of the ThingClass ({c5bca9d2-2a17-40c4-8bb2-ba89783a6dd1})</extracomment>
<translation>KeConnect Deutschland Edition</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="180"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="183"/>
<source>Error 2</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: error2, ID: {afca201a-5213-43fe-bfec-cae6ce7509d2})
<extracomment>The name of the StateType ({afe287a2-35e2-4762-a6bf-79d7c31d32ab}) of ThingClass kebaSimple
----------
The name of the StateType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass wallbox</extracomment>
The name of the StateType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass keba</extracomment>
<translation>Error 2</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="241"/>
<source>Error 2 changed</source>
<extracomment>The name of the EventType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass wallbox</extracomment>
<translation>Error 2 geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="250"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="189"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="192"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="195"/>
<source>Failsafe mode</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: failsafeMode, ID: {bfad6a1a-40e0-4b32-9f42-09efd5a7e94c})
----------
The name of the ParamType (ThingClass: wallbox, EventType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
The name of the StateType ({bfad6a1a-40e0-4b32-9f42-09efd5a7e94c}) of ThingClass kebaSimple
----------
The name of the StateType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
----------
The name of the StateType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass keba</extracomment>
<translation>Failsafe Module</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="253"/>
<source>Failsafe mode changed</source>
<extracomment>The name of the EventType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
<translation>Failsafe Modus geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="256"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="259"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="201"/>
<source>Firmware</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: firmware, ID: {e941ace5-fb7f-4dc2-b3f2-188233f4e934})
<extracomment>The name of the StateType ({d473770e-c5b4-4845-8215-0dea304ea202}) of ThingClass kebaSimple
----------
The name of the StateType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass wallbox</extracomment>
The name of the StateType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass keba</extracomment>
<translation>Firmware</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="262"/>
<source>Firmware changed</source>
<extracomment>The name of the EventType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass wallbox</extracomment>
<translation>Firmware geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="265"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="204"/>
<source>ID</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {33446eae-f2cc-4cf2-af29-b3a45e4b91c0})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {33446eae-f2cc-4cf2-af29-b3a45e4b91c0})</extracomment>
<translation>ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="268"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="210"/>
<source>IP address</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {730cd3d3-5f0e-4028-a8c2-ced7574f13f3})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {8324cad1-0d9d-4e48-b472-8c22eb7a1057})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {730cd3d3-5f0e-4028-a8c2-ced7574f13f3})</extracomment>
<translation>IP Adresse</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="271"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="274"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="216"/>
<source>Input</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: input, ID: {ba600276-8b36-4404-b8ec-415245e5bc15})
<extracomment>The name of the StateType ({0ca0921d-5516-44fb-9483-242d9bb7a2d0}) of ThingClass kebaSimple
----------
The name of the StateType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass wallbox</extracomment>
The name of the StateType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass keba</extracomment>
<translation>Eingang</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="277"/>
<source>Input changed</source>
<extracomment>The name of the EventType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass wallbox</extracomment>
<translation>Eingang geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="280"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="222"/>
<source>Keba</source>
<extracomment>The name of the vendor ({f7cda40b-829a-4675-abaa-485697430f5f})</extracomment>
<translation>Keba</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="283"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="286"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="225"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="228"/>
<source>Keba KeContact</source>
<extracomment>The name of the ThingClass ({900dacec-cae7-4a37-95ba-501846368ea2})
----------
@ -295,307 +229,202 @@ The name of the plugin Keba ({9142b09f-30a9-43d0-9ede-2f8debe075ac})</extracomme
<translation>Keba KeContact</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="289"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="231"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="234"/>
<source>MAC address</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {c2df921d-ff8b-411c-9b1d-04a437d7dfa6})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {e438179a-5202-4106-a622-d9e10a74fed9})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {c2df921d-ff8b-411c-9b1d-04a437d7dfa6})</extracomment>
<translation>MAC Adresse</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="292"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="295"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="298"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="237"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="240"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="243"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="246"/>
<source>Maximal charging current</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: maxChargingCurrent, ID: {2a72ad9e-96bd-4281-afb7-ce4f5c6f5052})
----------
The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
The name of the StateType ({2a72ad9e-96bd-4281-afb7-ce4f5c6f5052}) of ThingClass kebaSimple
----------
The name of the StateType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
----------
The name of the StateType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass keba</extracomment>
<translation>Maximaler Ladestrom</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="301"/>
<source>Maximal charging current changed</source>
<extracomment>The name of the EventType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
<translation>Maximaler Ladestrom geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="304"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="307"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="249"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="252"/>
<source>Maximal charging current in percent</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrentPercent, ID: {3c7b83a0-0e42-47bf-9788-dde6aab5ceea})
<extracomment>The name of the StateType ({33631b7f-a675-4625-8095-31e09e03a010}) of ThingClass kebaSimple
----------
The name of the StateType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass wallbox</extracomment>
The name of the StateType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass keba</extracomment>
<translation>Maximaler Ladestrom in Prozent</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="310"/>
<source>Maximal charging current percentage changed</source>
<extracomment>The name of the EventType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass wallbox</extracomment>
<translation>Maximaler Ladestrom in Prozent geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="313"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="316"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="255"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="258"/>
<source>Maximal hardware charging current</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrentHardware, ID: {33e2ed95-f01e-44db-8156-34d124a8ecc8})
<extracomment>The name of the StateType ({f94a2381-28a8-478e-ac44-0902a5be8885}) of ThingClass kebaSimple
----------
The name of the StateType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
The name of the StateType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass keba</extracomment>
<translation>Maximaler Ladestrom der Hardware</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="319"/>
<source>Maximal hardware charging current changed</source>
<extracomment>The name of the EventType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="322"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="325"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="261"/>
<source>Number of connected phases</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: phaseCount, ID: {6713b2e7-41b3-4596-a304-3065726bdbe4})
----------
The name of the StateType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass keba</extracomment>
<translation>Anzahl angeschlossener Phasen</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="328"/>
<source>Number of connected phases changed</source>
<extracomment>The name of the EventType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="442"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="445"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="348"/>
<source>Voltage phase A</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseA, ID: {4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9})
----------
The name of the StateType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass keba</extracomment>
<translation>Spannung Phase A</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="448"/>
<source>Voltage phase A changed</source>
<extracomment>The name of the EventType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="451"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="454"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="351"/>
<source>Voltage phase B</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseB, ID: {c8344ca5-21ac-4cd1-8f4b-e5ed202c5862})
----------
The name of the StateType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass keba</extracomment>
<translation>Spannung Phase B</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="457"/>
<source>Voltage phase B changed</source>
<extracomment>The name of the EventType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="460"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="463"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="354"/>
<source>Voltage phase C</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseC, ID: {5f01e86c-0943-4849-a01a-db441916ebd5})
----------
The name of the StateType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the StateType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass keba</extracomment>
<translation>Spannung Phase C</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="466"/>
<source>Voltage phase C changed</source>
<extracomment>The name of the EventType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="331"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="334"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="337"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="264"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="267"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="270"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="273"/>
<source>Output X2</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: outputX2, ID: {043ea799-4348-44f9-985d-bee2ba280957})
----------
The name of the ParamType (ThingClass: wallbox, EventType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
The name of the StateType ({043ea799-4348-44f9-985d-bee2ba280957}) of ThingClass kebaSimple
----------
The name of the StateType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
----------
The name of the StateType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass keba</extracomment>
<translation>Ausgang X2</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="340"/>
<source>Output X2 changed</source>
<extracomment>The name of the EventType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
<translation>Ausgang X2 geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="343"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="346"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="276"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="279"/>
<source>Plug state</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: plugState, ID: {3b4d29f3-3101-47ad-90fd-269b6348783b})
<extracomment>The name of the StateType ({82aa0d67-eea6-4a5e-b7ab-2848a4012490}) of ThingClass kebaSimple
----------
The name of the StateType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass wallbox</extracomment>
The name of the StateType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass keba</extracomment>
<translation>Stecker-Status</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="349"/>
<source>Plug state changed</source>
<extracomment>The name of the EventType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass wallbox</extracomment>
<translation>Stecker-Status geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="352"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="355"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="282"/>
<source>Power consumption</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPower, ID: {7af9e93b-099d-4d9d-a480-9c0f66aecd8b})
----------
The name of the StateType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass keba</extracomment>
<translation>Leistungsaufnahme</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="358"/>
<source>Power consumtion changed</source>
<extracomment>The name of the EventType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass wallbox</extracomment>
<translation>Leistungsaufnahme geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="361"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="364"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="285"/>
<source>Power factor</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: powerFactor, ID: {889c3c9a-96b4-4408-bd9a-d79e36ed9296})
----------
The name of the StateType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass keba</extracomment>
<translation>Leistungsfaktor</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="367"/>
<source>Power factor changed</source>
<extracomment>The name of the EventType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass wallbox</extracomment>
<translation>Leistungsfaktor</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="370"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="288"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="291"/>
<source>Product name</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {a996c698-4831-4977-8979-f76f78ac7da8})</extracomment>
<translation type="unfinished"></translation>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {5e49d289-9e32-47a8-8b30-43cb949695c8})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {a996c698-4831-4977-8979-f76f78ac7da8})</extracomment>
<translation>Produktname</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="373"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="294"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="297"/>
<source>Serial number</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {45255155-318b-4204-8ce6-2c106a56286d})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {6f732eb9-1711-4da0-a9a4-abcfa19f5e34})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {45255155-318b-4204-8ce6-2c106a56286d})</extracomment>
<translation>Seriennummer</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="376"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="379"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="300"/>
<source>Session ID</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionId, ID: {1d30ce60-2ea0-450f-817e-5c88f59ebfbf})
----------
The name of the StateType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass keba</extracomment>
<translation>Session ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="382"/>
<source>Session ID changed</source>
<extracomment>The name of the EventType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass wallbox</extracomment>
<translation>Session ID geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="385"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="388"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="303"/>
<source>Session energy</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionEnergy, ID: {8e277efe-21ef-4536-bfc0-901b32d44d7c})
----------
The name of the StateType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass keba</extracomment>
<translation>Session Energie</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="391"/>
<source>Session energy changed</source>
<extracomment>The name of the EventType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass wallbox</extracomment>
<translation>Session Energie geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="394"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="397"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="306"/>
<source>Session time</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionTime, ID: {a6f35ea0-aaea-438b-b818-6d161762611e})
----------
The name of the StateType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass keba</extracomment>
<translation>Sessiondauer</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="400"/>
<source>Session time changed</source>
<extracomment>The name of the EventType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass wallbox</extracomment>
<translation>Sessiondauer geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="403"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="309"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="312"/>
<source>Set charging enabled</source>
<extracomment>The name of the ActionType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
<translation>Setze Laden ermöglicht</translation>
<extracomment>The name of the ActionType ({63f84293-62aa-420d-bc0d-cc48618c6526}) of ThingClass kebaSimple
----------
The name of the ActionType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass keba</extracomment>
<translation>Ermölgliche Laden</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="406"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="315"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="318"/>
<source>Set failsafe mode</source>
<extracomment>The name of the ActionType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({bfad6a1a-40e0-4b32-9f42-09efd5a7e94c}) of ThingClass kebaSimple
----------
The name of the ActionType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass keba</extracomment>
<translation>Setze Failsafe Modus</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="409"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="321"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="324"/>
<source>Set maximal charging current</source>
<extracomment>The name of the ActionType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({2a72ad9e-96bd-4281-afb7-ce4f5c6f5052}) of ThingClass kebaSimple
----------
The name of the ActionType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass keba</extracomment>
<translation>Setze maximaler Ladestrom</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="412"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="327"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="330"/>
<source>Set output X2</source>
<extracomment>The name of the ActionType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({043ea799-4348-44f9-985d-bee2ba280957}) of ThingClass kebaSimple
----------
The name of the ActionType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass keba</extracomment>
<translation>Setze Ausgang X2</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="415"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="418"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="333"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="336"/>
<source>System enabled</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: systemEnabled, ID: {e5631593-f486-47cb-9951-b7597d0b769b})
<extracomment>The name of the StateType ({8ade4b68-e44e-425c-87ea-a35d176f337d}) of ThingClass kebaSimple
----------
The name of the StateType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass wallbox</extracomment>
<translation>System ermöglicht</translation>
The name of the StateType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass keba</extracomment>
<translation>System eingeschaltet</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="421"/>
<source>System enabled changed</source>
<extracomment>The name of the EventType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass wallbox</extracomment>
<translation>System ermöglicht geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="424"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="427"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="339"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: totalEnergyConsumed, ID: {41e179b3-29a2-43ec-b537-023a527081e8})
----------
The name of the StateType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass keba</extracomment>
<translation>Gesamter Energieverbrauch</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="430"/>
<source>Total energy consumption changed</source>
<extracomment>The name of the EventType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass wallbox</extracomment>
<translation>Gesamter Energieverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="433"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="436"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="342"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="345"/>
<source>Uptime</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: uptime, ID: {3421ecf9-c95f-4dc1-ad0c-144e9b6ae056})
<extracomment>The name of the StateType ({2cffff03-63b2-468d-b2ef-a4741401d7c8}) of ThingClass kebaSimple
----------
The name of the StateType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass wallbox</extracomment>
The name of the StateType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass keba</extracomment>
<translation>Betriebszeit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="439"/>
<source>Uptime changed</source>
<extracomment>The name of the EventType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass wallbox</extracomment>
<translation>Betriebszeit geändert</translation>
</message>
</context>
</TS>

View File

@ -4,32 +4,32 @@
<context>
<name>IntegrationPluginKeba</name>
<message>
<location filename="../integrationpluginkeba.cpp" line="60"/>
<location filename="../integrationpluginkeba.cpp" line="69"/>
<source>The communication could not be established.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="67"/>
<location filename="../integrationpluginkeba.cpp" line="76"/>
<source>The network discovery is not available. Please enter the IP address manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="131"/>
<location filename="../integrationpluginkeba.cpp" line="148"/>
<source>Error opening network port.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="141"/>
<location filename="../integrationpluginkeba.cpp" line="158"/>
<source>Already configured for this IP address.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="184"/>
<source>The required communication interface is not enabled on this wallbox. Please make sure the DIP switch 1.3 is switched on and try again.</source>
<location filename="../integrationpluginkeba.cpp" line="203"/>
<source>The required communication interface is not enabled on this keba. Please make sure the DIP switch 1.3 is switched on and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginkeba.cpp" line="209"/>
<location filename="../integrationpluginkeba.cpp" line="248"/>
<source>This model does not support communication with smart devices.</source>
<translation type="unfinished"></translation>
</message>
@ -37,257 +37,191 @@
<context>
<name>Keba</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="136"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="108"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="111"/>
<source>Activity</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: activity, ID: {539e5602-6dd9-465d-9705-3bb59bcf8982})
<extracomment>The name of the StateType ({955ffd64-42f6-4000-94c5-c7f862daa438}) of ThingClass kebaSimple
----------
The name of the StateType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass wallbox</extracomment>
The name of the StateType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="142"/>
<source>Activity changed</source>
<extracomment>The name of the EventType ({539e5602-6dd9-465d-9705-3bb59bcf8982}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="145"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="114"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="117"/>
<source>Car plugged in</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: pluggedIn, ID: {6c227717-f420-4dcd-bd52-49973715603b})
<extracomment>The name of the StateType ({faf68cc9-f014-4db5-94fa-0f10a0b85fb1}) of ThingClass kebaSimple
----------
The name of the StateType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass wallbox</extracomment>
The name of the StateType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="151"/>
<source>Car plugged in changed</source>
<extracomment>The name of the EventType ({6c227717-f420-4dcd-bd52-49973715603b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="154"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="120"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="123"/>
<source>Charging</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: charging, ID: {c9785626-2501-478d-8c18-c42ad5d9a269})
<extracomment>The name of the StateType ({38affdf2-f62e-458c-b738-8db81aa13790}) of ThingClass kebaSimple
----------
The name of the StateType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass wallbox</extracomment>
The name of the StateType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="160"/>
<source>Charging changed</source>
<extracomment>The name of the EventType ({c9785626-2501-478d-8c18-c42ad5d9a269}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="163"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="166"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="126"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="129"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="132"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="135"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: power, ID: {63f84293-62aa-420d-bc0d-cc48618c6526})
----------
The name of the ParamType (ThingClass: wallbox, EventType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
The name of the StateType ({63f84293-62aa-420d-bc0d-cc48618c6526}) of ThingClass kebaSimple
----------
The name of the StateType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: power, ID: {83ed0774-2a91-434d-b03c-d920d02f2981})
----------
The name of the StateType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="172"/>
<source>Charging enabled changed</source>
<extracomment>The name of the EventType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="175"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="138"/>
<source>Charging session finished</source>
<extracomment>The name of the EventType ({dac02c37-f051-481a-ae99-1de0885ef37a}) of ThingClass wallbox</extracomment>
<extracomment>The name of the EventType ({dac02c37-f051-481a-ae99-1de0885ef37a}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="178"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="141"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="144"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: connected, ID: {ce813458-d7d8-4f40-9648-dba4c41e92f0})
<extracomment>The name of the StateType ({995f2ccf-2082-434e-a46d-c506862e6d6a}) of ThingClass kebaSimple
----------
The name of the StateType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass wallbox</extracomment>
The name of the StateType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="184"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({ce813458-d7d8-4f40-9648-dba4c41e92f0}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="190"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="147"/>
<source>Current phase A</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseA, ID: {31ec17b0-11e3-4332-92b0-fea821cf024f})
----------
The name of the StateType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="193"/>
<source>Current phase A changed</source>
<extracomment>The name of the EventType ({31ec17b0-11e3-4332-92b0-fea821cf024f}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="196"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="150"/>
<source>Current phase B</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseB, ID: {cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97})
----------
The name of the StateType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="202"/>
<source>Current phase B changed</source>
<extracomment>The name of the EventType ({cdc7e10a-0d0a-4e93-ad2c-d34ffca45c97}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="208"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="153"/>
<source>Current phase C</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPhaseC, ID: {da838dc8-85f0-4e55-b4b5-cb93a43b373d})
----------
The name of the StateType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="211"/>
<source>Current phase C changed</source>
<extracomment>The name of the EventType ({da838dc8-85f0-4e55-b4b5-cb93a43b373d}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="156"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="159"/>
<source>Display</source>
<extracomment>The name of the ActionType ({158b1a8f-fde9-4191-bf42-4ece5fe582e6}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({e756c842-bec5-42ee-a28b-280d48e834b1}) of ThingClass kebaSimple
----------
The name of the ActionType ({158b1a8f-fde9-4191-bf42-4ece5fe582e6}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="217"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="162"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="165"/>
<source>Display message</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: display, ID: {4e69a761-f4f1-42d0-83db-380894a86ebc})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: display, ID: {ec14a880-0546-431c-ab4e-578d56ecbfb9})
----------
The name of the ParamType (ThingClass: keba, ActionType: display, ID: {4e69a761-f4f1-42d0-83db-380894a86ebc})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="220"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="168"/>
<source>Duration</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {60494d6f-853b-42b8-894e-108a52ed6feb})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {60494d6f-853b-42b8-894e-108a52ed6feb})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="171"/>
<source>Energy</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {c8de58b6-b671-4fee-b552-d2c14a37a769})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {c8de58b6-b671-4fee-b552-d2c14a37a769})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="174"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="177"/>
<source>Error 1</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: error1, ID: {b44bc948-1234-4f87-9a22-bfb6de09df4d})
<extracomment>The name of the StateType ({8380c340-84ee-4d62-84b0-7c5738ab66bc}) of ThingClass kebaSimple
----------
The name of the StateType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass wallbox</extracomment>
The name of the StateType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="232"/>
<source>Error 1 changed</source>
<extracomment>The name of the EventType ({b44bc948-1234-4f87-9a22-bfb6de09df4d}) of ThingClass wallbox</extracomment>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="219"/>
<source>KeConnect German Edition</source>
<extracomment>The name of the ThingClass ({c5bca9d2-2a17-40c4-8bb2-ba89783a6dd1})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="180"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="183"/>
<source>Error 2</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: error2, ID: {afca201a-5213-43fe-bfec-cae6ce7509d2})
<extracomment>The name of the StateType ({afe287a2-35e2-4762-a6bf-79d7c31d32ab}) of ThingClass kebaSimple
----------
The name of the StateType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass wallbox</extracomment>
The name of the StateType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="241"/>
<source>Error 2 changed</source>
<extracomment>The name of the EventType ({afca201a-5213-43fe-bfec-cae6ce7509d2}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="250"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="189"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="192"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="195"/>
<source>Failsafe mode</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: failsafeMode, ID: {bfad6a1a-40e0-4b32-9f42-09efd5a7e94c})
----------
The name of the ParamType (ThingClass: wallbox, EventType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
The name of the StateType ({bfad6a1a-40e0-4b32-9f42-09efd5a7e94c}) of ThingClass kebaSimple
----------
The name of the StateType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: failsafeMode, ID: {f1758c5c-2c02-41cb-93ec-b778a3c78d28})
----------
The name of the StateType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="253"/>
<source>Failsafe mode changed</source>
<extracomment>The name of the EventType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="256"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="259"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="201"/>
<source>Firmware</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: firmware, ID: {e941ace5-fb7f-4dc2-b3f2-188233f4e934})
<extracomment>The name of the StateType ({d473770e-c5b4-4845-8215-0dea304ea202}) of ThingClass kebaSimple
----------
The name of the StateType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass wallbox</extracomment>
The name of the StateType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="262"/>
<source>Firmware changed</source>
<extracomment>The name of the EventType ({e941ace5-fb7f-4dc2-b3f2-188233f4e934}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="265"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="204"/>
<source>ID</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: chargingSessionFinished, ID: {33446eae-f2cc-4cf2-af29-b3a45e4b91c0})</extracomment>
<extracomment>The name of the ParamType (ThingClass: keba, EventType: chargingSessionFinished, ID: {33446eae-f2cc-4cf2-af29-b3a45e4b91c0})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="268"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="210"/>
<source>IP address</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {730cd3d3-5f0e-4028-a8c2-ced7574f13f3})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="271"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="274"/>
<source>Input</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: input, ID: {ba600276-8b36-4404-b8ec-415245e5bc15})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {8324cad1-0d9d-4e48-b472-8c22eb7a1057})
----------
The name of the StateType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, Type: thing, ID: {730cd3d3-5f0e-4028-a8c2-ced7574f13f3})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="277"/>
<source>Input changed</source>
<extracomment>The name of the EventType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass wallbox</extracomment>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="216"/>
<source>Input</source>
<extracomment>The name of the StateType ({0ca0921d-5516-44fb-9483-242d9bb7a2d0}) of ThingClass kebaSimple
----------
The name of the StateType ({ba600276-8b36-4404-b8ec-415245e5bc15}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="280"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="222"/>
<source>Keba</source>
<extracomment>The name of the vendor ({f7cda40b-829a-4675-abaa-485697430f5f})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="283"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="286"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="225"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="228"/>
<source>Keba KeContact</source>
<extracomment>The name of the ThingClass ({900dacec-cae7-4a37-95ba-501846368ea2})
----------
@ -295,306 +229,201 @@ The name of the plugin Keba ({9142b09f-30a9-43d0-9ede-2f8debe075ac})</extracomme
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="289"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="231"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="234"/>
<source>MAC address</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {c2df921d-ff8b-411c-9b1d-04a437d7dfa6})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {e438179a-5202-4106-a622-d9e10a74fed9})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {c2df921d-ff8b-411c-9b1d-04a437d7dfa6})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="292"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="295"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="298"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="237"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="240"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="243"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="246"/>
<source>Maximal charging current</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: maxChargingCurrent, ID: {2a72ad9e-96bd-4281-afb7-ce4f5c6f5052})
----------
The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
The name of the StateType ({2a72ad9e-96bd-4281-afb7-ce4f5c6f5052}) of ThingClass kebaSimple
----------
The name of the StateType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: maxChargingCurrent, ID: {593656f0-babf-4308-8767-68f34e10fb15})
----------
The name of the StateType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="301"/>
<source>Maximal charging current changed</source>
<extracomment>The name of the EventType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="304"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="307"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="249"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="252"/>
<source>Maximal charging current in percent</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrentPercent, ID: {3c7b83a0-0e42-47bf-9788-dde6aab5ceea})
<extracomment>The name of the StateType ({33631b7f-a675-4625-8095-31e09e03a010}) of ThingClass kebaSimple
----------
The name of the StateType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass wallbox</extracomment>
The name of the StateType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="310"/>
<source>Maximal charging current percentage changed</source>
<extracomment>The name of the EventType ({3c7b83a0-0e42-47bf-9788-dde6aab5ceea}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="313"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="316"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="255"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="258"/>
<source>Maximal hardware charging current</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: maxChargingCurrentHardware, ID: {33e2ed95-f01e-44db-8156-34d124a8ecc8})
<extracomment>The name of the StateType ({f94a2381-28a8-478e-ac44-0902a5be8885}) of ThingClass kebaSimple
----------
The name of the StateType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass wallbox</extracomment>
The name of the StateType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="319"/>
<source>Maximal hardware charging current changed</source>
<extracomment>The name of the EventType ({33e2ed95-f01e-44db-8156-34d124a8ecc8}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="322"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="325"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="261"/>
<source>Number of connected phases</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: phaseCount, ID: {6713b2e7-41b3-4596-a304-3065726bdbe4})
----------
The name of the StateType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="328"/>
<source>Number of connected phases changed</source>
<extracomment>The name of the EventType ({6713b2e7-41b3-4596-a304-3065726bdbe4}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="442"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="445"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="348"/>
<source>Voltage phase A</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseA, ID: {4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9})
----------
The name of the StateType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="448"/>
<source>Voltage phase A changed</source>
<extracomment>The name of the EventType ({4a2d75d8-a3a0-4b40-9ca7-e8b6f11d0ef9}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="451"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="454"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="351"/>
<source>Voltage phase B</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseB, ID: {c8344ca5-21ac-4cd1-8f4b-e5ed202c5862})
----------
The name of the StateType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="457"/>
<source>Voltage phase B changed</source>
<extracomment>The name of the EventType ({c8344ca5-21ac-4cd1-8f4b-e5ed202c5862}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="460"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="463"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="354"/>
<source>Voltage phase C</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: voltagePhaseC, ID: {5f01e86c-0943-4849-a01a-db441916ebd5})
----------
The name of the StateType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="466"/>
<source>Voltage phase C changed</source>
<extracomment>The name of the EventType ({5f01e86c-0943-4849-a01a-db441916ebd5}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="331"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="334"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="337"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="264"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="267"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="270"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="273"/>
<source>Output X2</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, ActionType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
<extracomment>The name of the ParamType (ThingClass: kebaSimple, ActionType: outputX2, ID: {043ea799-4348-44f9-985d-bee2ba280957})
----------
The name of the ParamType (ThingClass: wallbox, EventType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
The name of the StateType ({043ea799-4348-44f9-985d-bee2ba280957}) of ThingClass kebaSimple
----------
The name of the StateType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
The name of the ParamType (ThingClass: keba, ActionType: outputX2, ID: {96b2d176-6460-4109-8824-3af4679c6573})
----------
The name of the StateType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="340"/>
<source>Output X2 changed</source>
<extracomment>The name of the EventType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="343"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="346"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="276"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="279"/>
<source>Plug state</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: plugState, ID: {3b4d29f3-3101-47ad-90fd-269b6348783b})
<extracomment>The name of the StateType ({82aa0d67-eea6-4a5e-b7ab-2848a4012490}) of ThingClass kebaSimple
----------
The name of the StateType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass wallbox</extracomment>
The name of the StateType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="349"/>
<source>Plug state changed</source>
<extracomment>The name of the EventType ({3b4d29f3-3101-47ad-90fd-269b6348783b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="352"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="355"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="282"/>
<source>Power consumption</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: currentPower, ID: {7af9e93b-099d-4d9d-a480-9c0f66aecd8b})
----------
The name of the StateType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="358"/>
<source>Power consumtion changed</source>
<extracomment>The name of the EventType ({7af9e93b-099d-4d9d-a480-9c0f66aecd8b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="361"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="364"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="285"/>
<source>Power factor</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: powerFactor, ID: {889c3c9a-96b4-4408-bd9a-d79e36ed9296})
----------
The name of the StateType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="367"/>
<source>Power factor changed</source>
<extracomment>The name of the EventType ({889c3c9a-96b4-4408-bd9a-d79e36ed9296}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="370"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="288"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="291"/>
<source>Product name</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {a996c698-4831-4977-8979-f76f78ac7da8})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {5e49d289-9e32-47a8-8b30-43cb949695c8})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {a996c698-4831-4977-8979-f76f78ac7da8})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="373"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="294"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="297"/>
<source>Serial number</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, Type: thing, ID: {45255155-318b-4204-8ce6-2c106a56286d})</extracomment>
<extracomment>The name of the ParamType (ThingClass: kebaSimple, Type: thing, ID: {6f732eb9-1711-4da0-a9a4-abcfa19f5e34})
----------
The name of the ParamType (ThingClass: keba, Type: thing, ID: {45255155-318b-4204-8ce6-2c106a56286d})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="376"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="379"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="300"/>
<source>Session ID</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionId, ID: {1d30ce60-2ea0-450f-817e-5c88f59ebfbf})
----------
The name of the StateType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="382"/>
<source>Session ID changed</source>
<extracomment>The name of the EventType ({1d30ce60-2ea0-450f-817e-5c88f59ebfbf}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="385"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="388"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="303"/>
<source>Session energy</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionEnergy, ID: {8e277efe-21ef-4536-bfc0-901b32d44d7c})
----------
The name of the StateType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="391"/>
<source>Session energy changed</source>
<extracomment>The name of the EventType ({8e277efe-21ef-4536-bfc0-901b32d44d7c}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="394"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="397"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="306"/>
<source>Session time</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: sessionTime, ID: {a6f35ea0-aaea-438b-b818-6d161762611e})
----------
The name of the StateType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="400"/>
<source>Session time changed</source>
<extracomment>The name of the EventType ({a6f35ea0-aaea-438b-b818-6d161762611e}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="403"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="309"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="312"/>
<source>Set charging enabled</source>
<extracomment>The name of the ActionType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({63f84293-62aa-420d-bc0d-cc48618c6526}) of ThingClass kebaSimple
----------
The name of the ActionType ({83ed0774-2a91-434d-b03c-d920d02f2981}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="406"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="315"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="318"/>
<source>Set failsafe mode</source>
<extracomment>The name of the ActionType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({bfad6a1a-40e0-4b32-9f42-09efd5a7e94c}) of ThingClass kebaSimple
----------
The name of the ActionType ({f1758c5c-2c02-41cb-93ec-b778a3c78d28}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="409"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="321"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="324"/>
<source>Set maximal charging current</source>
<extracomment>The name of the ActionType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({2a72ad9e-96bd-4281-afb7-ce4f5c6f5052}) of ThingClass kebaSimple
----------
The name of the ActionType ({593656f0-babf-4308-8767-68f34e10fb15}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="412"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="327"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="330"/>
<source>Set output X2</source>
<extracomment>The name of the ActionType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass wallbox</extracomment>
<extracomment>The name of the ActionType ({043ea799-4348-44f9-985d-bee2ba280957}) of ThingClass kebaSimple
----------
The name of the ActionType ({96b2d176-6460-4109-8824-3af4679c6573}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="415"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="418"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="333"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="336"/>
<source>System enabled</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: systemEnabled, ID: {e5631593-f486-47cb-9951-b7597d0b769b})
<extracomment>The name of the StateType ({8ade4b68-e44e-425c-87ea-a35d176f337d}) of ThingClass kebaSimple
----------
The name of the StateType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass wallbox</extracomment>
The name of the StateType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="421"/>
<source>System enabled changed</source>
<extracomment>The name of the EventType ({e5631593-f486-47cb-9951-b7597d0b769b}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="424"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="427"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="339"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: totalEnergyConsumed, ID: {41e179b3-29a2-43ec-b537-023a527081e8})
----------
The name of the StateType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass wallbox</extracomment>
<extracomment>The name of the StateType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="430"/>
<source>Total energy consumption changed</source>
<extracomment>The name of the EventType ({41e179b3-29a2-43ec-b537-023a527081e8}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="433"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="436"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="342"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="345"/>
<source>Uptime</source>
<extracomment>The name of the ParamType (ThingClass: wallbox, EventType: uptime, ID: {3421ecf9-c95f-4dc1-ad0c-144e9b6ae056})
<extracomment>The name of the StateType ({2cffff03-63b2-468d-b2ef-a4741401d7c8}) of ThingClass kebaSimple
----------
The name of the StateType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass wallbox</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/keba/plugininfo.h" line="439"/>
<source>Uptime changed</source>
<extracomment>The name of the EventType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass wallbox</extracomment>
The name of the StateType ({3421ecf9-c95f-4dc1-ad0c-144e9b6ae056}) of ThingClass keba</extracomment>
<translation type="unfinished"></translation>
</message>
</context>