Merge PR #117: Schrack: Rework discovery

This commit is contained in:
jenkins 2023-03-07 17:25:40 +01:00
commit a67d896336
8 changed files with 329 additions and 140 deletions

12
schrack/README.md Normal file
View File

@ -0,0 +1,12 @@
# Schrack CION
This plugin adds support for the Schrack CION wallbox to nymea.
The wallbox needs to be connected to the nymea system using an RS485 interface which needs to be configured as a Modbus RTU interface with the following parameters:
* Baudrate: 57600
* Data bits: 8
* Stop bit: 1
* Parity: None
Once the Modbus RTU interface is configured, the Wallbox can be added to nymea. nymea will try to discover the wallbox on the first 10 slave ids. This means, the DIP switches on the Wallbox are required to be configred for a modbus Slave ID from 1 to 10.

76
schrack/ciondiscovery.cpp Normal file
View File

@ -0,0 +1,76 @@
#include "ciondiscovery.h"
#include"extern-plugininfo.h"
#include <modbusdatautils.h>
CionDiscovery::CionDiscovery(ModbusRtuHardwareResource *modbusRtuResource, QObject *parent)
: QObject{parent},
m_modbusRtuResource{modbusRtuResource}
{
}
void CionDiscovery::startDiscovery()
{
qCInfo(dcSchrack()) << "Discovery: Searching for Schrack i-CHARGE wallboxes on modbus RTU...";
QList<ModbusRtuMaster*> candidateMasters;
foreach (ModbusRtuMaster *master, m_modbusRtuResource->modbusRtuMasters()) {
if (master->baudrate() == 57600 && master->dataBits() == 8 && master->stopBits() == 1 && master->parity() == QSerialPort::NoParity) {
candidateMasters.append(master);
}
}
if (candidateMasters.isEmpty()) {
qCWarning(dcSchrack()) << "No usable modbus RTU master found.";
emit discoveryFinished(false);
return;
}
foreach (ModbusRtuMaster *master, candidateMasters) {
if (master->connected()) {
tryConnect(master, 1);
} else {
qCWarning(dcSchrack()) << "Modbus RTU master" << master->modbusUuid().toString() << "is not connected.";
}
}
}
QList<CionDiscovery::Result> CionDiscovery::discoveryResults() const
{
return m_discoveryResults;
}
void CionDiscovery::tryConnect(ModbusRtuMaster *master, quint16 slaveId)
{
qCDebug(dcSchrack()) << "Scanning modbus RTU master" << master->modbusUuid() << "Slave ID:" << slaveId;
ModbusRtuReply *reply = master->readHoldingRegister(slaveId, 832, 16);
connect(reply, &ModbusRtuReply::finished, this, [=](){
if (reply->error() == ModbusRtuReply::NoError) {
QString firmwareVersion = ModbusDataUtils::convertToString(reply->result());
qCDebug(dcSchrack()) << "Test reply finished!" << reply->error() << firmwareVersion;
// Version numbers seem to be wild west... We can't really understand what's in there...
// So let's assume this is a schrack if reading alone succeeded and it is a valid string and 18 to 32 chars long...
// Examples of how this looks like:
// EBE 1.2: "V1.2 15.02.2021"
// ICC: "003090056-01 20220913"
QRegExp re = QRegExp("[A-Z0-9\\.- ]{18,32}");
if (re.exactMatch(firmwareVersion)) {
Result result {master->modbusUuid(), firmwareVersion, slaveId};
m_discoveryResults.append(result);
}
}
if (slaveId < 10) {
tryConnect(master, slaveId+1);
} else {
emit discoveryFinished(true);
}
});
}

64
schrack/ciondiscovery.h Normal file
View File

@ -0,0 +1,64 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2023, nymea GmbH
* Contact: contact@nymea.io
*
* This file is part of nymea.
* This project including source code and documentation is protected by
* copyright law, and remains the property of nymea GmbH. All rights, including
* reproduction, publication, editing and translation, are reserved. The use of
* this project is subject to the terms of a license agreement to be concluded
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
* under https://nymea.io/license
*
* GNU Lesser General Public License Usage
* Alternatively, this project may be redistributed and/or modified under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; version 3. This project is distributed in the hope that
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this project. If not, see <https://www.gnu.org/licenses/>.
*
* For any further details and any questions please contact us under
* contact@nymea.io or see our FAQ/Licensing Information on
* https://nymea.io/license/faq
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef CIONDISCOVERY_H
#define CIONDISCOVERY_H
#include <QObject>
#include <hardware/modbus/modbusrtuhardwareresource.h>
class CionDiscovery : public QObject
{
Q_OBJECT
public:
explicit CionDiscovery(ModbusRtuHardwareResource *modbusRtuResource, QObject *parent = nullptr);
struct Result {
QUuid modbusRtuMasterId;
QString firmwareVersion;
quint16 slaveId;
};
void startDiscovery();
QList<Result> discoveryResults() const;
signals:
void discoveryFinished(bool modbusRtuMasterAvailable);
private slots:
void tryConnect(ModbusRtuMaster *master, quint16 slaveId);
private:
ModbusRtuHardwareResource *m_modbusRtuResource = nullptr;
QList<Result> m_discoveryResults;
};
#endif // CIONDISCOVERY_H

View File

@ -31,6 +31,8 @@
#include "integrationpluginschrack.h"
#include "plugininfo.h"
#include "ciondiscovery.h"
IntegrationPluginSchrack::IntegrationPluginSchrack()
{
}
@ -42,32 +44,36 @@ void IntegrationPluginSchrack::init()
void IntegrationPluginSchrack::discoverThings(ThingDiscoveryInfo *info)
{
qCDebug(dcSchrack()) << "Discovering modbus RTU resources...";
if (hardwareManager()->modbusRtuResource()->modbusRtuMasters().isEmpty()) {
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No Modbus RTU interface available. Please set up a Modbus RTU interface first."));
return;
}
CionDiscovery *discovery = new CionDiscovery(hardwareManager()->modbusRtuResource(), info);
uint slaveAddress = info->params().paramValue(cionDiscoverySlaveAddressParamTypeId).toUInt();
if (slaveAddress > 254 || slaveAddress == 0) {
info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The Modbus slave address must be a value between 1 and 254."));
return;
}
connect(discovery, &CionDiscovery::discoveryFinished, info, [this, info, discovery](bool modbusMasterAvailable){
if (!modbusMasterAvailable) {
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bis, 1 stop bit and no parity first."));
return;
}
foreach (ModbusRtuMaster *modbusMaster, hardwareManager()->modbusRtuResource()->modbusRtuMasters()) {
qCDebug(dcSchrack()) << "Found RTU master resource" << modbusMaster << "connected" << modbusMaster->connected();
if (!modbusMaster->connected())
continue;
qCInfo(dcSchrack()) << "Discovery results:" << discovery->discoveryResults().count();
ThingDescriptor descriptor(info->thingClassId(), "i-CHARGE CION", QString::number(slaveAddress) + " " + modbusMaster->serialPort());
ParamList params;
params << Param(cionThingSlaveAddressParamTypeId, slaveAddress);
params << Param(cionThingModbusMasterUuidParamTypeId, modbusMaster->modbusUuid());
descriptor.setParams(params);
info->addThingDescriptor(descriptor);
}
foreach (const CionDiscovery::Result &result, discovery->discoveryResults()) {
ThingDescriptor descriptor(cionThingClassId, "Schrack CION", QString("Slave ID: %1, Version: %2").arg(result.slaveId).arg(result.firmwareVersion));
info->finish(Thing::ThingErrorNoError);
ParamList params{
{cionThingModbusMasterUuidParamTypeId, result.modbusRtuMasterId},
{cionThingSlaveAddressParamTypeId, result.slaveId}
};
descriptor.setParams(params);
Thing *existingThing = myThings().findByParams(params);
if (existingThing) {
descriptor.setThingId(existingThing->id());
}
info->addThingDescriptor(descriptor);
}
info->finish(Thing::ThingErrorNoError);
});
discovery->startDiscovery();
}
void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info)
@ -130,6 +136,12 @@ void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info)
// Note: This register really only tells us if we can control anything... i.e. if the wallbox is unlocked via RFID
connect(cionConnection, &CionModbusRtuConnection::chargingEnabledChanged, thing, [=](quint16 charging){
qCDebug(dcSchrack()) << "Charge control enabled changed:" << charging;
// If this register goes 0->1 it means charging has been started. This could be because of an RFID tag.
// As we have may set charging current to 0 ourselves, we'll want to activate it again here
uint maxSetPoint = thing->stateValue(cionMaxChargingCurrentStateTypeId).toUInt();
if (cionConnection->chargingCurrentSetpoint() != maxSetPoint) {
cionConnection->setChargingCurrentSetpoint(maxSetPoint);
}
});
// We can write chargingCurrentSetpoint to the preferred charging we want, and the wallbox will take it,
@ -147,8 +159,11 @@ void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info)
connect(cionConnection, &CionModbusRtuConnection::currentChargingCurrentE3Changed, thing, [=](quint16 currentChargingCurrentE3){
qCDebug(dcSchrack()) << "Current charging current E3 current changed:" << currentChargingCurrentE3;
if (cionConnection->chargingCurrentSetpoint() > 0) {
if (cionConnection->chargingEnabled() == 1 && cionConnection->chargingCurrentSetpoint() > 0) {
thing->setStateValue(cionMaxChargingCurrentStateTypeId, currentChargingCurrentE3);
thing->setStateValue(cionPowerStateTypeId, true);
} else {
thing->setStateValue(cionPowerStateTypeId, false);
}
});

View File

@ -13,17 +13,8 @@
"name": "cion",
"displayName": "i-CHARGE CION",
"id": "075d389d-3330-4d0b-9649-9f085120ca40",
"createMethods": ["discovery"],
"createMethods": ["discovery", "user"],
"interfaces": ["evcharger", "connectable"],
"discoveryParamTypes": [
{
"id": "8004705f-0e13-4713-b75e-49d115cd9517",
"name": "slaveAddress",
"displayName": "Slave address",
"type": "int",
"defaultValue": 1
}
],
"paramTypes": [
{
"id": "dac10e08-734c-4e71-a5d6-0d2a1f416ca6",

View File

@ -6,8 +6,10 @@ MODBUS_CONNECTIONS += cion-registers.json
include(../modbus.pri)
SOURCES += \
ciondiscovery.cpp \
integrationpluginschrack.cpp
HEADERS += \
ciondiscovery.h \
integrationpluginschrack.h

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>IntegrationPluginSchrack</name>
<message>
<location filename="../integrationpluginschrack.cpp" line="51"/>
<source>No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bis, 1 stop bit and no parity first.</source>
<translation>Es wurde mein Modbus RTU Master mit passenden Einstellungen gefunden. Bitte richte einen Modbus RTU Master mit einer Baudrate von 57600, 8 Daten-Bits, 1 Stop-Bit und keiner Parität ein.</translation>
</message>
<message>
<location filename="../integrationpluginschrack.cpp" line="87"/>
<source>The Modbus address not valid. It must be a value between 1 and 254.</source>
<translation>Die Modbus Addresse ist ungültig. Sie muss zwischen 1 und 254 sein.</translation>
</message>
<message>
<location filename="../integrationpluginschrack.cpp" line="94"/>
<source>The Modbus RTU resource is not available.</source>
<translation>Die Modbus RTU Ressource ist nicht verfügbar.</translation>
</message>
</context>
<context>
<name>schrack</name>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="40"/>
<source>Charging</source>
<extracomment>The name of the StateType ({b59b4b4d-2cdb-4534-bf86-90123ae9bb1a}) of ThingClass cion</extracomment>
<translation>Ladend</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="43"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="46"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: cion, ActionType: power, ID: {61aea53a-bf8d-4fe6-859a-f1687e15d190})
----------
The name of the StateType ({61aea53a-bf8d-4fe6-859a-f1687e15d190}) of ThingClass cion</extracomment>
<translation>Laden freigegeben</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="49"/>
<source>Connected</source>
<extracomment>The name of the StateType ({b7aa8e49-a6c0-4b48-b65e-47259686185f}) of ThingClass cion</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="52"/>
<source>Enable or disable charging</source>
<extracomment>The name of the ActionType ({61aea53a-bf8d-4fe6-859a-f1687e15d190}) of ThingClass cion</extracomment>
<translation>Ladefreigabe erteilen/entfernen</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="55"/>
<source>Firmware version</source>
<extracomment>The name of the StateType ({33780b19-4855-4b5c-bd84-cec8400309be}) of ThingClass cion</extracomment>
<translation>Firmware-Version</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="58"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="61"/>
<source>Maximum charging current</source>
<extracomment>The name of the ParamType (ThingClass: cion, ActionType: maxChargingCurrent, ID: {221af869-a796-46c2-a5e0-27c8972a0bf2})
----------
The name of the StateType ({221af869-a796-46c2-a5e0-27c8972a0bf2}) of ThingClass cion</extracomment>
<translation>Maximaler Ladestrom</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="64"/>
<source>Modbus RTU master</source>
<extracomment>The name of the ParamType (ThingClass: cion, Type: thing, ID: {636241a9-4838-48ae-bcc8-3427ac3fc102})</extracomment>
<translation>Modbus RTU Master</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="67"/>
<source>Modbus slave address</source>
<extracomment>The name of the ParamType (ThingClass: cion, Type: thing, ID: {dac10e08-734c-4e71-a5d6-0d2a1f416ca6})</extracomment>
<translation>Modbus Slave Adresse</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="70"/>
<source>Plugged in</source>
<extracomment>The name of the StateType ({13423618-4314-49be-b48c-42d9415199a8}) of ThingClass cion</extracomment>
<translation>Eingesteckt</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="73"/>
<source>Schrack</source>
<extracomment>The name of the plugin schrack ({600beeb5-5c34-49fc-b2af-8f83c1b11eab})</extracomment>
<translation>Schrack</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="76"/>
<source>Schrack GmbH</source>
<extracomment>The name of the vendor ({cadbbbc5-216f-4d25-a8ad-ccf653d1518f})</extracomment>
<translation>Schrack GmbH</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="79"/>
<source>Set maximum charging current</source>
<extracomment>The name of the ActionType ({221af869-a796-46c2-a5e0-27c8972a0bf2}) of ThingClass cion</extracomment>
<translation>Setze maximalen Ladestrom</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="82"/>
<source>i-CHARGE CION</source>
<extracomment>The name of the ThingClass ({075d389d-3330-4d0b-9649-9f085120ca40})</extracomment>
<translation>i-CHARGE CION</translation>
</message>
</context>
</TS>

View File

@ -4,22 +4,17 @@
<context>
<name>IntegrationPluginSchrack</name>
<message>
<location filename="../integrationpluginschrack.cpp" line="64"/>
<source>No Modbus RTU interface available. Please set up a Modbus RTU interface first.</source>
<location filename="../integrationpluginschrack.cpp" line="51"/>
<source>No modbus RTU master with appropriate settings found. Please set up a modbus RTU master with a baudrate of 57600, 8 data bis, 1 stop bit and no parity first.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginschrack.cpp" line="70"/>
<source>The Modbus slave address must be a value between 1 and 254.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginschrack.cpp" line="99"/>
<location filename="../integrationpluginschrack.cpp" line="87"/>
<source>The Modbus address not valid. It must be a value between 1 and 254.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginschrack.cpp" line="106"/>
<location filename="../integrationpluginschrack.cpp" line="94"/>
<source>The Modbus RTU resource is not available.</source>
<translation type="unfinished"></translation>
</message>
@ -27,160 +22,85 @@
<context>
<name>schrack</name>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="56"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="59"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="40"/>
<source>Charging</source>
<extracomment>The name of the ParamType (ThingClass: cion, EventType: charging, ID: {b59b4b4d-2cdb-4534-bf86-90123ae9bb1a})
----------
The name of the StateType ({b59b4b4d-2cdb-4534-bf86-90123ae9bb1a}) of ThingClass cion</extracomment>
<extracomment>The name of the StateType ({b59b4b4d-2cdb-4534-bf86-90123ae9bb1a}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="62"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="65"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="68"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="43"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="46"/>
<source>Charging enabled</source>
<extracomment>The name of the ParamType (ThingClass: cion, ActionType: power, ID: {61aea53a-bf8d-4fe6-859a-f1687e15d190})
----------
The name of the ParamType (ThingClass: cion, EventType: power, ID: {61aea53a-bf8d-4fe6-859a-f1687e15d190})
----------
The name of the StateType ({61aea53a-bf8d-4fe6-859a-f1687e15d190}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="71"/>
<source>Charging enabled or disabled</source>
<extracomment>The name of the EventType ({61aea53a-bf8d-4fe6-859a-f1687e15d190}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="74"/>
<source>Charging started or stopped</source>
<extracomment>The name of the EventType ({b59b4b4d-2cdb-4534-bf86-90123ae9bb1a}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="77"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="80"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="49"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: cion, EventType: connected, ID: {b7aa8e49-a6c0-4b48-b65e-47259686185f})
----------
The name of the StateType ({b7aa8e49-a6c0-4b48-b65e-47259686185f}) of ThingClass cion</extracomment>
<extracomment>The name of the StateType ({b7aa8e49-a6c0-4b48-b65e-47259686185f}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="83"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({b7aa8e49-a6c0-4b48-b65e-47259686185f}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="86"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="89"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (ThingClass: cion, EventType: currentPower, ID: {db5c951f-47e0-4cdc-8b8b-285f7ed95285})
----------
The name of the StateType ({db5c951f-47e0-4cdc-8b8b-285f7ed95285}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="92"/>
<source>Current power consumption changed</source>
<extracomment>The name of the EventType ({db5c951f-47e0-4cdc-8b8b-285f7ed95285}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="95"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="52"/>
<source>Enable or disable charging</source>
<extracomment>The name of the ActionType ({61aea53a-bf8d-4fe6-859a-f1687e15d190}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="98"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="101"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="104"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="55"/>
<source>Firmware version</source>
<extracomment>The name of the StateType ({33780b19-4855-4b5c-bd84-cec8400309be}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="58"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="61"/>
<source>Maximum charging current</source>
<extracomment>The name of the ParamType (ThingClass: cion, ActionType: maxChargingCurrent, ID: {221af869-a796-46c2-a5e0-27c8972a0bf2})
----------
The name of the ParamType (ThingClass: cion, EventType: maxChargingCurrent, ID: {221af869-a796-46c2-a5e0-27c8972a0bf2})
----------
The name of the StateType ({221af869-a796-46c2-a5e0-27c8972a0bf2}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="107"/>
<source>Maximum charging current changed</source>
<extracomment>The name of the EventType ({221af869-a796-46c2-a5e0-27c8972a0bf2}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="110"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="64"/>
<source>Modbus RTU master</source>
<extracomment>The name of the ParamType (ThingClass: cion, Type: thing, ID: {636241a9-4838-48ae-bcc8-3427ac3fc102})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="113"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="67"/>
<source>Modbus slave address</source>
<extracomment>The name of the ParamType (ThingClass: cion, Type: thing, ID: {dac10e08-734c-4e71-a5d6-0d2a1f416ca6})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="116"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="119"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="70"/>
<source>Plugged in</source>
<extracomment>The name of the ParamType (ThingClass: cion, EventType: pluggedIn, ID: {13423618-4314-49be-b48c-42d9415199a8})
----------
The name of the StateType ({13423618-4314-49be-b48c-42d9415199a8}) of ThingClass cion</extracomment>
<extracomment>The name of the StateType ({13423618-4314-49be-b48c-42d9415199a8}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="122"/>
<source>Plugged or unplugged</source>
<extracomment>The name of the EventType ({13423618-4314-49be-b48c-42d9415199a8}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="125"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="73"/>
<source>Schrack</source>
<extracomment>The name of the plugin schrack ({600beeb5-5c34-49fc-b2af-8f83c1b11eab})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="128"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="76"/>
<source>Schrack GmbH</source>
<extracomment>The name of the vendor ({cadbbbc5-216f-4d25-a8ad-ccf653d1518f})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="131"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="79"/>
<source>Set maximum charging current</source>
<extracomment>The name of the ActionType ({221af869-a796-46c2-a5e0-27c8972a0bf2}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="134"/>
<source>Slave address</source>
<extracomment>The name of the ParamType (ThingClass: cion, Type: discovery, ID: {8004705f-0e13-4713-b75e-49d115cd9517})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="137"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="140"/>
<source>Total consumed energy</source>
<extracomment>The name of the ParamType (ThingClass: cion, EventType: totalEnergyConsumed, ID: {8390c005-a8ba-4db6-bb94-8f765ddcc784})
----------
The name of the StateType ({8390c005-a8ba-4db6-bb94-8f765ddcc784}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="143"/>
<source>Total consumed energy changed</source>
<extracomment>The name of the EventType ({8390c005-a8ba-4db6-bb94-8f765ddcc784}) of ThingClass cion</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="146"/>
<location filename="../../../build/nymea-plugins-modbus-Desktop-Debug/schrack/plugininfo.h" line="82"/>
<source>i-CHARGE CION</source>
<extracomment>The name of the ThingClass ({075d389d-3330-4d0b-9649-9f085120ca40})</extracomment>
<translation type="unfinished"></translation>