Merge PR #685: EVBox: Split thing class into one with and one without meter

master
jenkins 2023-05-16 12:59:11 +02:00
commit 65dd24e075
4 changed files with 242 additions and 85 deletions

View File

@ -7,6 +7,7 @@ This integration allows nymea to control EVBox wallboxes supporting the Protocol
Generally, all EVBox wallboxes supporting the Protocol Max v4 are supported. We've tested it with Generally, all EVBox wallboxes supporting the Protocol Max v4 are supported. We've tested it with
* Elvi * Elvi
* Elvi + MID meter
## Requirements ## Requirements

View File

@ -83,10 +83,12 @@ void IntegrationPluginEVBox::discoverThings(ThingDiscoveryInfo *info)
return; return;
} }
ThingDescriptor thingDescriptor(info->thingClassId(), "EVBox Elvi", serial); ThingDescriptor thingDescriptor(info->thingClassId(), thingClass(info->thingClassId()).displayName(), serial);
ParamTypeId serialPortParamTypeId = thingClass(info->thingClassId()).paramTypes().findByName("serialPort").id();
ParamTypeId serialNumberParamTypeId = thingClass(info->thingClassId()).paramTypes().findByName("serialNumber").id();
ParamList params{ ParamList params{
{evboxThingSerialPortParamTypeId, portInfo.portName()}, {serialPortParamTypeId, portInfo.portName()},
{evboxThingSerialNumberParamTypeId, serial} {serialNumberParamTypeId, serial}
}; };
thingDescriptor.setParams(params); thingDescriptor.setParams(params);
Thing *existingThing = myThings().findByParams(params); Thing *existingThing = myThings().findByParams(params);
@ -117,8 +119,8 @@ void IntegrationPluginEVBox::discoverThings(ThingDiscoveryInfo *info)
void IntegrationPluginEVBox::setupThing(ThingSetupInfo *info) void IntegrationPluginEVBox::setupThing(ThingSetupInfo *info)
{ {
Thing *thing = info->thing(); Thing *thing = info->thing();
QString portName = thing->paramValue(evboxThingSerialPortParamTypeId).toString(); QString portName = thing->paramValue("serialPort").toString();
QString serialNumber = thing->paramValue(evboxThingSerialNumberParamTypeId).toString(); QString serialNumber = thing->paramValue("serialNumber").toString();
// Opening the port, sharing with others if already opened. // Opening the port, sharing with others if already opened.
EVBoxPort *port = m_ports.value(portName); EVBoxPort *port = m_ports.value(portName);
@ -154,7 +156,7 @@ void IntegrationPluginEVBox::setupThing(ThingSetupInfo *info)
// And connect the signals to the thing for when the setup went well // And connect the signals to the thing for when the setup went well
connect(port, &EVBoxPort::closed, thing, [thing, portName](){ connect(port, &EVBoxPort::closed, thing, [thing, portName](){
qCInfo(dcEVBox()) << "Port" << portName << "closed. Marking thing as offline:" << thing->name(); qCInfo(dcEVBox()) << "Port" << portName << "closed. Marking thing as offline:" << thing->name();
thing->setStateValue(evboxConnectedStateTypeId, false); thing->setStateValue("connected", false);
}); });
connect(port, &EVBoxPort::opened, thing, [portName](){ connect(port, &EVBoxPort::opened, thing, [portName](){
qCInfo(dcEVBox()) << "Port" << portName << "opened."; qCInfo(dcEVBox()) << "Port" << portName << "opened.";
@ -164,7 +166,7 @@ void IntegrationPluginEVBox::setupThing(ThingSetupInfo *info)
if (serial != serialNumber) { if (serial != serialNumber) {
return; return;
} }
thing->setStateValue(evboxConnectedStateTypeId, true); thing->setStateValue("connected", true);
finishPendingAction(thing); finishPendingAction(thing);
m_waitingForResponses[thing] = false; m_waitingForResponses[thing] = false;
}); });
@ -173,31 +175,37 @@ void IntegrationPluginEVBox::setupThing(ThingSetupInfo *info)
if (serial != serialNumber) { if (serial != serialNumber) {
return; return;
} }
thing->setStateValue(evboxConnectedStateTypeId, true); thing->setStateValue("connected", true);
finishPendingAction(thing); finishPendingAction(thing);
m_waitingForResponses[thing] = false; m_waitingForResponses[thing] = false;
double currentPower = (chargingCurrentL1 + chargingCurrentL2 + chargingCurrentL3) * 23; thing->setStateMinMaxValues("maxChargingCurrent", minChargingCurrent / 10, maxChargingCurrent / 10);
thing->setStateValue(evboxCurrentPowerStateTypeId, currentPower);
thing->setStateMinMaxValues(evboxMaxChargingCurrentStateTypeId, minChargingCurrent / 10, maxChargingCurrent / 10);
thing->setStateValue(evboxTotalEnergyConsumedStateTypeId, totalEnergyConsumed / 1000.0);
thing->setStateValue(evboxChargingStateTypeId, currentPower > 0);
int phaseCount = 0; if (thing->thingClassId() == elviMidThingClassId) {
if (chargingCurrentL1 > 0) { double currentPower = (chargingCurrentL1 + chargingCurrentL2 + chargingCurrentL3) * 23;
phaseCount++; thing->setStateValue("currentPower", currentPower);
} thing->setStateValue("totalEnergyConsumed", totalEnergyConsumed / 1000.0);
if (chargingCurrentL2 > 0) { thing->setStateValue("charging", currentPower > 0);
phaseCount++; int phaseCount = 0;
} if (chargingCurrentL1 > 0) {
if (chargingCurrentL3 > 0) { phaseCount++;
phaseCount++; }
} if (chargingCurrentL2 > 0) {
// If all phases are on 0, we aren't charging and don't know how many phases are available... phaseCount++;
// Only updating the count if we actually do know that at least one is charging. }
if (phaseCount > 0) { if (chargingCurrentL3 > 0) {
thing->setStateValue(evboxPhaseCountStateTypeId, phaseCount); phaseCount++;
}
// If all phases are on 0, we aren't charging and don't know how many phases are available...
// Only updating the count if we actually do know that at least one is charging.
if (phaseCount > 0) {
thing->setStateValue("phaseCount", phaseCount);
}
} else {
thing->setStateValue("charging", thing->stateValue("maxChargingCurrent").toUInt() > 0 && thing->stateValue("power").toBool());
thing->setStateValue("phaseCount", thing->setting("phaseCount").toUInt());
} }
}); });
} }
@ -207,19 +215,19 @@ void IntegrationPluginEVBox::postSetupThing(Thing */*thing*/)
m_timer = hardwareManager()->pluginTimerManager()->registerTimer(5); m_timer = hardwareManager()->pluginTimerManager()->registerTimer(5);
connect(m_timer, &PluginTimer::timeout, this, [this](){ connect(m_timer, &PluginTimer::timeout, this, [this](){
foreach (Thing *t, myThings()) { foreach (Thing *t, myThings()) {
QString portName = t->paramValue(evboxThingSerialPortParamTypeId).toString(); QString portName = t->paramValue("serialPort").toString();
QString serial = t->paramValue(evboxThingSerialNumberParamTypeId).toString(); QString serial = t->paramValue("serialNumber").toString();
if (m_waitingForResponses.value(t)) { if (m_waitingForResponses.value(t)) {
qCInfo(dcEVBox()) << "Wallbox" << t->name() << "did not respond to last command. Marking offline."; qCInfo(dcEVBox()) << "Wallbox" << t->name() << "did not respond to last command. Marking offline.";
t->setStateValue(evboxConnectedStateTypeId, false); t->setStateValue("connected", false);
} }
EVBoxPort *port = m_ports.value(portName); EVBoxPort *port = m_ports.value(portName);
if (port->isOpen()) { if (port->isOpen()) {
quint16 maxChargingCurrent = 0; quint16 maxChargingCurrent = 0;
if (t->stateValue(evboxPowerStateTypeId).toBool()) { if (t->stateValue("power").toBool()) {
maxChargingCurrent = t->stateValue(evboxMaxChargingCurrentStateTypeId).toUInt(); maxChargingCurrent = t->stateValue("maxChargingCurrent").toUInt();
} }
port->sendCommand(EVBoxPort::Command68, 60, maxChargingCurrent, serial); port->sendCommand(EVBoxPort::Command68, 60, maxChargingCurrent, serial);
m_waitingForResponses[t] = true; m_waitingForResponses[t] = true;
@ -231,8 +239,9 @@ void IntegrationPluginEVBox::postSetupThing(Thing */*thing*/)
void IntegrationPluginEVBox::thingRemoved(Thing *thing) void IntegrationPluginEVBox::thingRemoved(Thing *thing)
{ {
QString portName = thing->paramValue(evboxThingSerialPortParamTypeId).toString(); QString portName = thing->paramValue("serialPort").toString();
if (myThings().filterByParam(evboxThingSerialPortParamTypeId, portName).isEmpty()) { ParamTypeId serialPortParamTypeId = thing->thingClass().paramTypes().findByName("serialPort").id();
if (myThings().filterByParam(serialPortParamTypeId, portName).isEmpty()) {
qCInfo(dcEVBox()).nospace() << "No more EVBox devices using port " << portName << ". Destroying port."; qCInfo(dcEVBox()).nospace() << "No more EVBox devices using port " << portName << ". Destroying port.";
delete m_ports.take(portName); delete m_ports.take(portName);
} }
@ -247,17 +256,18 @@ void IntegrationPluginEVBox::executeAction(ThingActionInfo *info)
{ {
Thing *thing = info->thing(); Thing *thing = info->thing();
QString portName = thing->paramValue(evboxThingSerialPortParamTypeId).toString(); QString portName = thing->paramValue("serialPort").toString();
QString serial = thing->paramValue(evboxThingSerialNumberParamTypeId).toString(); QString serial = thing->paramValue("serialNumber").toString();
EVBoxPort *port = m_ports.value(portName); EVBoxPort *port = m_ports.value(portName);
qCDebug(dcEVBox()) << "Executing action" << info->action().actionTypeId().toString(); qCDebug(dcEVBox()) << "Executing action" << info->action().actionTypeId().toString();
if (info->action().actionTypeId() == evboxPowerActionTypeId) { ActionType actionType = thing->thingClass().actionTypes().findById(info->action().actionTypeId());
bool power = info->action().paramValue(evboxPowerActionPowerParamTypeId).toBool(); if (actionType.name() == "power") {
quint16 maxChargingCurrent = thing->stateValue(evboxMaxChargingCurrentStateTypeId).toUInt(); bool power = info->action().paramValue(actionType.id()).toBool();
quint16 maxChargingCurrent = thing->stateValue("maxChargingCurrent").toUInt();
port->sendCommand(EVBoxPort::Command68, 60, power ? maxChargingCurrent : 0, serial); port->sendCommand(EVBoxPort::Command68, 60, power ? maxChargingCurrent : 0, serial);
} else if (info->action().actionTypeId() == evboxMaxChargingCurrentActionTypeId) { } else if (actionType.name() == "maxChargingCurrent") {
int maxChargingCurrent = info->action().paramValue(evboxMaxChargingCurrentActionMaxChargingCurrentParamTypeId).toInt(); int maxChargingCurrent = info->action().paramValue(actionType.id()).toInt();
port->sendCommand(EVBoxPort::Command68, 60, maxChargingCurrent, serial); port->sendCommand(EVBoxPort::Command68, 60, maxChargingCurrent, serial);
} }
@ -273,10 +283,11 @@ void IntegrationPluginEVBox::finishPendingAction(Thing *thing)
if (!m_pendingActions.value(thing).isEmpty()) { if (!m_pendingActions.value(thing).isEmpty()) {
ThingActionInfo *info = m_pendingActions.value(thing).first(); ThingActionInfo *info = m_pendingActions.value(thing).first();
qCDebug(dcEVBox()) << "Finishing action:" << info->action().actionTypeId().toString(); qCDebug(dcEVBox()) << "Finishing action:" << info->action().actionTypeId().toString();
if (info->action().actionTypeId() == evboxPowerActionTypeId) { ActionType actionType = thing->thingClass().actionTypes().findById(info->action().actionTypeId());
thing->setStateValue(evboxPowerStateTypeId, info->action().paramValue(evboxPowerActionPowerParamTypeId)); if (actionType.name() == "power") {
} else if (info->action().actionTypeId() == evboxMaxChargingCurrentActionTypeId) { thing->setStateValue("power", info->action().paramValue(actionType.id()));
thing->setStateValue(evboxMaxChargingCurrentStateTypeId, info->action().paramValue(evboxMaxChargingCurrentActionMaxChargingCurrentParamTypeId)); } else if (actionType.name() == "maxChargingCurrent") {
thing->setStateValue("maxChargingCurrent", info->action().paramValue(actionType.id()));
} }
info->finish(Thing::ThingErrorNoError); info->finish(Thing::ThingErrorNoError);
} }

View File

@ -10,11 +10,12 @@
"thingClasses": [ "thingClasses": [
{ {
"id": "d73a14e3-10af-47bc-9bc7-a5ff6e52f72c", "id": "d73a14e3-10af-47bc-9bc7-a5ff6e52f72c",
"name": "evbox", "name": "elviMid",
"displayName": "Elvi", "displayName": "Elvi + MID meter",
"createMethods": ["discovery"], "createMethods": ["discovery"],
"discoveryType": "weak",
"setupMethod": "justadd", "setupMethod": "justadd",
"interfaces": [ "evcharger", "connectable" ], "interfaces": [ "evcharger", "smartmeterconsumer", "connectable" ],
"paramTypes": [ "paramTypes": [
{ {
"id": "bce7c412-c19a-4e60-a11f-fe8308408abf", "id": "bce7c412-c19a-4e60-a11f-fe8308408abf",
@ -94,6 +95,88 @@
"defaultValue": 1 "defaultValue": 1
} }
] ]
},
{
"id": "81df1344-3861-4554-972c-6cd4b2ec97a7",
"name": "elvi",
"displayName": "Elvi",
"createMethods": ["discovery"],
"discoveryType": "weak",
"setupMethod": "justadd",
"interfaces": [ "evcharger", "connectable" ],
"paramTypes": [
{
"id": "159fec55-e73d-4a9d-bbde-b2b44fe7f363",
"name":"serialPort",
"displayName": "Serial port",
"type": "QString"
},
{
"id": "987ddd33-cbcd-4716-bdaa-6824a5295d22",
"name":"serialNumber",
"displayName": "Serial number",
"type": "QString"
}
],
"settingsTypes": [
{
"id": "3b44ed38-5cfe-4f61-8ad4-a4fe282944ac",
"name": "phaseCount",
"displayName": "Connected phases",
"type": "uint",
"minValue": 1,
"maxValue": 3,
"defaultValue": 3
}
],
"stateTypes": [
{
"id": "e763b450-e180-4afb-9fcf-c75ad2f3d7c7",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "d9875cbf-3736-484c-bf07-08a1d7f9cc89",
"name": "power",
"displayName": "Charging enabled",
"displayNameAction": "Enable/disable charging",
"type": "bool",
"defaultValue": false,
"writable": true
},
{
"id": "186d792a-5bab-4144-837a-cbf5027de4fb",
"name": "maxChargingCurrent",
"displayName": "Maximum charging current",
"displayNameAction": "Set maximum charging current",
"type": "uint",
"writable": true,
"unit": "Ampere",
"minValue": "6",
"maxValue": "32",
"defaultValue": 6
},
{
"id": "91093627-ddae-4ba2-83f1-0241ea01aa01",
"name": "charging",
"displayName": "Charging",
"type": "bool",
"defaultValue": false
},
{
"id": "46781438-2a31-48d3-a140-11593888b268",
"name": "phaseCount",
"displayName": "Used phases",
"type": "uint",
"minValue": 1,
"maxValue": 3,
"defaultValue": 1
}
]
} }
] ]
} }

View File

@ -4,35 +4,53 @@
<context> <context>
<name>EVBox</name> <name>EVBox</name>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="40"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="54"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="57"/>
<source>Charging</source> <source>Charging</source>
<extracomment>The name of the StateType ({6439fdba-dc03-454f-bc33-0f6e2619d2ab}) of ThingClass evbox</extracomment> <extracomment>The name of the StateType ({91093627-ddae-4ba2-83f1-0241ea01aa01}) of ThingClass elvi
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="43"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="46"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: evbox, ActionType: power, ID: {e3ed9334-68bf-47eb-bd9a-d9a800529bce})
---------- ----------
The name of the StateType ({e3ed9334-68bf-47eb-bd9a-d9a800529bce}) of ThingClass evbox</extracomment> The name of the StateType ({6439fdba-dc03-454f-bc33-0f6e2619d2ab}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="49"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="60"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="63"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="66"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="69"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: elvi, ActionType: power, ID: {d9875cbf-3736-484c-bf07-08a1d7f9cc89})
----------
The name of the StateType ({d9875cbf-3736-484c-bf07-08a1d7f9cc89}) of ThingClass elvi
----------
The name of the ParamType (ThingClass: elviMid, ActionType: power, ID: {e3ed9334-68bf-47eb-bd9a-d9a800529bce})
----------
The name of the StateType ({e3ed9334-68bf-47eb-bd9a-d9a800529bce}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="72"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="75"/>
<source>Connected</source> <source>Connected</source>
<extracomment>The name of the StateType ({5ef06038-9fa9-4d5d-8d9b-0375b8aa343a}) of ThingClass evbox</extracomment> <extracomment>The name of the StateType ({e763b450-e180-4afb-9fcf-c75ad2f3d7c7}) of ThingClass elvi
----------
The name of the StateType ({5ef06038-9fa9-4d5d-8d9b-0375b8aa343a}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="52"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="78"/>
<source>Connected phases</source>
<extracomment>The name of the ParamType (ThingClass: elvi, Type: settings, ID: {3b44ed38-5cfe-4f61-8ad4-a4fe282944ac})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="81"/>
<source>Current power consumption</source> <source>Current power consumption</source>
<extracomment>The name of the StateType ({8d3c80b7-f1f1-48de-8b7a-f99b9bc688b7}) of ThingClass evbox</extracomment> <extracomment>The name of the StateType ({8d3c80b7-f1f1-48de-8b7a-f99b9bc688b7}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="55"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="84"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="58"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="87"/>
<source>EVBox</source> <source>EVBox</source>
<extracomment>The name of the vendor ({435d8843-887a-4642-b2f5-cd27d18bdb95}) <extracomment>The name of the vendor ({435d8843-887a-4642-b2f5-cd27d18bdb95})
---------- ----------
@ -40,60 +58,104 @@ The name of the plugin EVBox ({3362ac5c-5e2f-43c0-b3fc-70a98773e119})</extracomm
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="61"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="90"/>
<source>Elvi</source> <source>Elvi</source>
<extracomment>The name of the ThingClass ({81df1344-3861-4554-972c-6cd4b2ec97a7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="93"/>
<source>Elvi + MID meter</source>
<extracomment>The name of the ThingClass ({d73a14e3-10af-47bc-9bc7-a5ff6e52f72c})</extracomment> <extracomment>The name of the ThingClass ({d73a14e3-10af-47bc-9bc7-a5ff6e52f72c})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="64"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="96"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="99"/>
<source>Enable/disable charging</source> <source>Enable/disable charging</source>
<extracomment>The name of the ActionType ({e3ed9334-68bf-47eb-bd9a-d9a800529bce}) of ThingClass evbox</extracomment> <extracomment>The name of the ActionType ({d9875cbf-3736-484c-bf07-08a1d7f9cc89}) of ThingClass elvi
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="67"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="70"/>
<source>Maximum charging current</source>
<extracomment>The name of the ParamType (ThingClass: evbox, ActionType: maxChargingCurrent, ID: {cc9ae86d-fc86-473f-ae90-d9eb20d7a011})
---------- ----------
The name of the StateType ({cc9ae86d-fc86-473f-ae90-d9eb20d7a011}) of ThingClass evbox</extracomment> The name of the ActionType ({e3ed9334-68bf-47eb-bd9a-d9a800529bce}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="73"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="102"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="105"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="108"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="111"/>
<source>Maximum charging current</source>
<extracomment>The name of the ParamType (ThingClass: elvi, ActionType: maxChargingCurrent, ID: {186d792a-5bab-4144-837a-cbf5027de4fb})
----------
The name of the StateType ({186d792a-5bab-4144-837a-cbf5027de4fb}) of ThingClass elvi
----------
The name of the ParamType (ThingClass: elviMid, ActionType: maxChargingCurrent, ID: {cc9ae86d-fc86-473f-ae90-d9eb20d7a011})
----------
The name of the StateType ({cc9ae86d-fc86-473f-ae90-d9eb20d7a011}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="114"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="117"/>
<source>Serial number</source>
<extracomment>The name of the ParamType (ThingClass: elvi, Type: thing, ID: {987ddd33-cbcd-4716-bdaa-6824a5295d22})
----------
The name of the ParamType (ThingClass: elviMid, Type: thing, ID: {abc607a7-7dc5-48d4-b3d0-1545ddc63592})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="120"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="123"/>
<source>Serial port</source> <source>Serial port</source>
<extracomment>The name of the ParamType (ThingClass: evbox, Type: thing, ID: {bce7c412-c19a-4e60-a11f-fe8308408abf})</extracomment> <extracomment>The name of the ParamType (ThingClass: elvi, Type: thing, ID: {159fec55-e73d-4a9d-bbde-b2b44fe7f363})
----------
The name of the ParamType (ThingClass: elviMid, Type: thing, ID: {bce7c412-c19a-4e60-a11f-fe8308408abf})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="76"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="126"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="129"/>
<source>Set maximum charging current</source> <source>Set maximum charging current</source>
<extracomment>The name of the ActionType ({cc9ae86d-fc86-473f-ae90-d9eb20d7a011}) of ThingClass evbox</extracomment> <extracomment>The name of the ActionType ({186d792a-5bab-4144-837a-cbf5027de4fb}) of ThingClass elvi
----------
The name of the ActionType ({cc9ae86d-fc86-473f-ae90-d9eb20d7a011}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="79"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="132"/>
<source>Total consumed energy</source> <source>Total consumed energy</source>
<extracomment>The name of the StateType ({9fd15d14-c228-4af6-85af-4cb171d6f9f0}) of ThingClass evbox</extracomment> <extracomment>The name of the StateType ({9fd15d14-c228-4af6-85af-4cb171d6f9f0}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="82"/> <location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="135"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/evbox/plugininfo.h" line="138"/>
<source>Used phases</source> <source>Used phases</source>
<extracomment>The name of the StateType ({1120abe3-1878-4301-a701-014b24fd1e41}) of ThingClass evbox</extracomment> <extracomment>The name of the StateType ({46781438-2a31-48d3-a140-11593888b268}) of ThingClass elvi
----------
The name of the StateType ({1120abe3-1878-4301-a701-014b24fd1e41}) of ThingClass elviMid</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>IntegrationPluginEVBox</name> <name>IntegrationPluginEVBox</name>
<message> <message>
<location filename="../integrationpluginevbox.cpp" line="101"/> <location filename="../integrationpluginevbox.cpp" line="56"/>
<source>No serial ports are available on this system. Please connect a RS485 adapter first.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginevbox.cpp" line="110"/>
<source>Unable to open the RS485 port. Please make sure the RS485 adapter is connected properly and not in use by anything else.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginevbox.cpp" line="133"/>
<source>Unable to open the RS485 port. Please make sure the RS485 adapter is connected properly.</source> <source>Unable to open the RS485 port. Please make sure the RS485 adapter is connected properly.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginevbox.cpp" line="114"/> <location filename="../integrationpluginevbox.cpp" line="144"/>
<location filename="../integrationpluginevbox.cpp" line="152"/>
<source>The EVBox is not responding.</source> <source>The EVBox is not responding.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>