Merge PR #11: Modbus Commander: improve setup

This commit is contained in:
Jenkins nymea 2020-12-15 11:05:43 +01:00
commit 53874f279d
10 changed files with 477 additions and 243 deletions

View File

@ -45,8 +45,7 @@ ModbusRTUMaster::ModbusRTUMaster(QString serialPort, uint baudrate, QSerialPort:
m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, dataBits); m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, dataBits);
m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, stopBits); m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, stopBits);
m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, parity); m_modbusRtuSerialMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, parity);
//m_modbusRtuSerialMaster->setTimeout(100);
//m_modbusRtuSerialMaster->setNumberOfRetries(1);
connect(m_modbusRtuSerialMaster, &QModbusTcpClient::stateChanged, this, &ModbusRTUMaster::onModbusStateChanged); connect(m_modbusRtuSerialMaster, &QModbusTcpClient::stateChanged, this, &ModbusRTUMaster::onModbusStateChanged);
connect(m_modbusRtuSerialMaster, &QModbusRtuSerialMaster::errorOccurred, this, &ModbusRTUMaster::onModbusErrorOccurred); connect(m_modbusRtuSerialMaster, &QModbusRtuSerialMaster::errorOccurred, this, &ModbusRTUMaster::onModbusErrorOccurred);
@ -70,7 +69,7 @@ ModbusRTUMaster::~ModbusRTUMaster()
bool ModbusRTUMaster::connectDevice() bool ModbusRTUMaster::connectDevice()
{ {
qCDebug(dcModbusRTU()) << "Setting up TCP connecion"; qCDebug(dcModbusRTU()) << "Setting up RTU client connecion";
if (!m_modbusRtuSerialMaster) if (!m_modbusRtuSerialMaster)
return false; return false;
@ -78,6 +77,11 @@ bool ModbusRTUMaster::connectDevice()
return m_modbusRtuSerialMaster->connectDevice(); return m_modbusRtuSerialMaster->connectDevice();
} }
bool ModbusRTUMaster::connected()
{
return (m_modbusRtuSerialMaster->state() == QModbusDevice::State::ConnectedState);
}
void ModbusRTUMaster::setNumberOfRetries(int number) void ModbusRTUMaster::setNumberOfRetries(int number)
{ {
m_modbusRtuSerialMaster->setNumberOfRetries(number); m_modbusRtuSerialMaster->setNumberOfRetries(number);
@ -88,6 +92,16 @@ void ModbusRTUMaster::setTimeout(int timeout)
m_modbusRtuSerialMaster->setTimeout(timeout); m_modbusRtuSerialMaster->setTimeout(timeout);
} }
int ModbusRTUMaster::timeout()
{
return m_modbusRtuSerialMaster->timeout();
}
int ModbusRTUMaster::numberOfRetries()
{
return m_modbusRtuSerialMaster->numberOfRetries();
}
QString ModbusRTUMaster::serialPort() QString ModbusRTUMaster::serialPort()
{ {
return m_modbusRtuSerialMaster->connectionParameter(QModbusDevice::SerialPortNameParameter).toString(); return m_modbusRtuSerialMaster->connectionParameter(QModbusDevice::SerialPortNameParameter).toString();
@ -380,15 +394,18 @@ QUuid ModbusRTUMaster::readHoldingRegister(uint slaveAddress, uint registerAddre
void ModbusRTUMaster::onModbusErrorOccurred(QModbusDevice::Error error) void ModbusRTUMaster::onModbusErrorOccurred(QModbusDevice::Error error)
{ {
qCWarning(dcModbusRTU()) << "An error occured" << error; qCWarning(dcModbusRTU()) << "An error occured" << error;
if (error == QModbusDevice::Error::ConnectionError) {
emit connectionStateChanged(false);
}
} }
void ModbusRTUMaster::onModbusStateChanged(QModbusDevice::State state) void ModbusRTUMaster::onModbusStateChanged(QModbusDevice::State state)
{ {
bool connected = (state != QModbusDevice::UnconnectedState); qCWarning(dcModbusRTU()) << "State changed" << state;
if (!connected) { if (state == QModbusDevice::UnconnectedState) {
//try to reconnect in 10 seconds //try to reconnect in 10 seconds
m_reconnectTimer->start(10000); m_reconnectTimer->start(10000);
} }
emit connectionStateChanged(connected); emit connectionStateChanged(state == QModbusDevice::ConnectedState);
} }

View File

@ -45,9 +45,13 @@ public:
~ModbusRTUMaster(); ~ModbusRTUMaster();
bool connectDevice(); bool connectDevice();
bool connected();
void setNumberOfRetries(int number); void setNumberOfRetries(int number);
void setTimeout(int timeout); void setTimeout(int timeout);
int timeout();
int numberOfRetries();
QUuid readCoil(uint slaveAddress, uint registerAddress, uint size = 1); QUuid readCoil(uint slaveAddress, uint registerAddress, uint size = 1);
QUuid readDiscreteInput(uint slaveAddress, uint registerAddress, uint size = 1); QUuid readDiscreteInput(uint slaveAddress, uint registerAddress, uint size = 1);
QUuid readInputRegister(uint slaveAddress, uint registerAddress, uint size = 1); QUuid readInputRegister(uint slaveAddress, uint registerAddress, uint size = 1);

View File

@ -71,6 +71,11 @@ bool ModbusTCPMaster::connectDevice() {
return m_modbusTcpClient->connectDevice(); return m_modbusTcpClient->connectDevice();
} }
bool ModbusTCPMaster::connected()
{
return (m_modbusTcpClient->state() == QModbusDevice::State::ConnectedState);
}
void ModbusTCPMaster::setNumberOfRetries(int number) void ModbusTCPMaster::setNumberOfRetries(int number)
{ {
m_modbusTcpClient->setNumberOfRetries(number); m_modbusTcpClient->setNumberOfRetries(number);

View File

@ -45,6 +45,7 @@ public:
~ModbusTCPMaster(); ~ModbusTCPMaster();
bool connectDevice(); bool connectDevice();
bool connected();
void setNumberOfRetries(int number); void setNumberOfRetries(int number);
void setTimeout(int timeout); void setTimeout(int timeout);

View File

@ -1,27 +1,62 @@
# Modbus Commander # Modbus Commander
A nymea plugin to send Modbus commands. A nymea integration plugin to send Modbus RTU or TCP requests.
## Usage
Set up one Modbus RTU or TCP client first. Afterwards a register **thing** can be set-up
and during the setup process the modbus client can be selected.
## Supported Things ## Supported Things
* Modbus TCP client * Modbus TCP client
* Gateway * Modbus TCP interface
* IP Address and Port of the target device are requried.
* Modbus RTU client * Modbus RTU client
* Gateway * Modbus RTU interface
* Discovery setup * All available serial ports will be discovered.
* Baudrate, data bits, stop bits and parity are required.
* Coil * Coil
* Writes and reads a single Modbus Coil * Writes and reads a single Modbus Coil
* Modbus device- and register address are required.
* Discrete input * Discrete input
* Reads a single Modbus discrete input * Reads a single Modbus discrete input
* Modbus device- and register address are required.
* Input register * Input register
* Reads a single Modbus input register * Reads a single Modbus input register
* Modbus device- and register address are required.
* Holding register * Holding register
* Writes and reads a single Modbus holding register * Writes and reads a single Modbus holding register
* Modbus device- and register address are required.
## Requirements ## Requirements
* The package 'nymea-plugin-modbuscommander' must be installed. * The package 'nymea-plugin-modbuscommander' must be installed.
* For Modbus RTU a serial port must be available. * For Modbus RTU, a serial port must be available.
* For Modbus TCP, the target deviecc must be in the same network.
## Settings
### Plug-In Configuration
*Update interval*
Defines the interval for register polling in seconds.
Minimum and default value is 1 second.
### Modbus TCP & RTU Client Settings
*Timeout*
Default value is 100 ms, the minimum timeout is 10 ms.
The timeout is used by the Modbus client to determine how long it waits
for a response from the server. The request failes if the response
is not received within the given timeout.
*Number of retries*
Sets the number of retries a client will perform before a request fails.
The default value is set to 3.
## More ## More

View File

@ -40,7 +40,6 @@ IntegrationPluginModbusCommander::IntegrationPluginModbusCommander()
void IntegrationPluginModbusCommander::init() void IntegrationPluginModbusCommander::init()
{ {
connect(this, &IntegrationPluginModbusCommander::configValueChanged, this, &IntegrationPluginModbusCommander::onPluginConfigurationChanged); connect(this, &IntegrationPluginModbusCommander::configValueChanged, this, &IntegrationPluginModbusCommander::onPluginConfigurationChanged);
//QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = false"));
m_slaveAddressParamTypeId.insert(coilThingClassId, coilThingSlaveAddressParamTypeId); m_slaveAddressParamTypeId.insert(coilThingClassId, coilThingSlaveAddressParamTypeId);
m_slaveAddressParamTypeId.insert(inputRegisterThingClassId, inputRegisterThingSlaveAddressParamTypeId); m_slaveAddressParamTypeId.insert(inputRegisterThingClassId, inputRegisterThingSlaveAddressParamTypeId);
@ -52,6 +51,8 @@ void IntegrationPluginModbusCommander::init()
m_registerAddressParamTypeId.insert(discreteInputThingClassId, discreteInputThingRegisterAddressParamTypeId); m_registerAddressParamTypeId.insert(discreteInputThingClassId, discreteInputThingRegisterAddressParamTypeId);
m_registerAddressParamTypeId.insert(holdingRegisterThingClassId, holdingRegisterThingRegisterAddressParamTypeId); m_registerAddressParamTypeId.insert(holdingRegisterThingClassId, holdingRegisterThingRegisterAddressParamTypeId);
m_connectedStateTypeId.insert(modbusRTUClientThingClassId, modbusRTUClientConnectedStateTypeId);
m_connectedStateTypeId.insert(modbusTCPClientThingClassId, modbusTCPClientConnectedStateTypeId);
m_connectedStateTypeId.insert(coilThingClassId, coilConnectedStateTypeId); m_connectedStateTypeId.insert(coilThingClassId, coilConnectedStateTypeId);
m_connectedStateTypeId.insert(inputRegisterThingClassId, inputRegisterConnectedStateTypeId); m_connectedStateTypeId.insert(inputRegisterThingClassId, inputRegisterConnectedStateTypeId);
m_connectedStateTypeId.insert(discreteInputThingClassId, discreteInputConnectedStateTypeId); m_connectedStateTypeId.insert(discreteInputThingClassId, discreteInputConnectedStateTypeId);
@ -63,94 +64,44 @@ void IntegrationPluginModbusCommander::init()
m_valueStateTypeId.insert(holdingRegisterThingClassId, holdingRegisterValueStateTypeId); m_valueStateTypeId.insert(holdingRegisterThingClassId, holdingRegisterValueStateTypeId);
} }
void IntegrationPluginModbusCommander::setupThing(ThingSetupInfo *info)
{
Thing *thing = info->thing();
if (thing->thingClassId() == modbusTCPClientThingClassId) {
QHostAddress hostAddress = QHostAddress(thing->paramValue(modbusTCPClientThingIpAddressParamTypeId).toString());
uint port = thing->paramValue(modbusTCPClientThingPortParamTypeId).toUInt();
foreach (ModbusTCPMaster *modbusTCPMaster, m_modbusTCPMasters.values()) {
if ((modbusTCPMaster->hostAddress() == hostAddress) && (modbusTCPMaster->port() == port)){
m_modbusTCPMasters.insert(thing, modbusTCPMaster);
return info->finish(Thing::ThingErrorNoError);
}
}
ModbusTCPMaster *modbusTCPMaster = new ModbusTCPMaster(hostAddress, port, this);
connect(modbusTCPMaster, &ModbusTCPMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged);
connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted);
connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestError, this, &IntegrationPluginModbusCommander::onRequestError);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister);
modbusTCPMaster->connectDevice();
m_modbusTCPMasters.insert(thing, modbusTCPMaster);
m_asyncTCPSetup.insert(modbusTCPMaster, info);
} else if (thing->thingClassId() == modbusRTUClientThingClassId) {
QString serialPort = thing->paramValue(modbusRTUClientThingSerialPortParamTypeId).toString();
uint baudrate = thing->paramValue(modbusRTUClientThingBaudRateParamTypeId).toUInt();
uint stopBits = thing->paramValue(modbusRTUClientThingStopBitsParamTypeId).toUInt();
uint dataBits = thing->paramValue(modbusRTUClientThingDataBitsParamTypeId).toUInt();
QSerialPort::Parity parity = QSerialPort::Parity::NoParity;
if (thing->paramValue(modbusRTUClientThingParityParamTypeId).toString().contains("No")) {
parity = QSerialPort::Parity::NoParity;
} else if (thing->paramValue(modbusRTUClientThingParityParamTypeId).toString().contains("Even")) {
parity = QSerialPort::Parity::EvenParity;
} else if (thing->paramValue(modbusRTUClientThingParityParamTypeId).toString().contains("Odd")) {
parity = QSerialPort::Parity::OddParity;
}
ModbusRTUMaster *modbusRTUMaster = new ModbusRTUMaster(serialPort, baudrate, parity, dataBits, stopBits, this);
connect(modbusRTUMaster, &ModbusRTUMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged);
connect(modbusRTUMaster, &ModbusRTUMaster::requestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted);
connect(modbusRTUMaster, &ModbusRTUMaster::requestError, this, &IntegrationPluginModbusCommander::onRequestError);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister);
modbusRTUMaster->connectDevice();
m_modbusRTUMasters.insert(thing, modbusRTUMaster);
m_asyncRTUSetup.insert(modbusRTUMaster, info);
} else if ((thing->thingClassId() == coilThingClassId)
|| (thing->thingClassId() == discreteInputThingClassId)
|| (thing->thingClassId() == holdingRegisterThingClassId)
|| (thing->thingClassId() == inputRegisterThingClassId)) {
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginModbusCommander::discoverThings(ThingDiscoveryInfo *info) void IntegrationPluginModbusCommander::discoverThings(ThingDiscoveryInfo *info)
{ {
ThingClassId thingClassId = info->thingClassId(); ThingClassId thingClassId = info->thingClassId();
if (thingClassId == modbusRTUClientThingClassId) { if (thingClassId == modbusRTUClientThingClassId) {
Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) { Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) {
//Serial port is not yet used, create now a new one qCDebug(dcModbusCommander()) << "Found serial port:" << port.systemLocation() << "manufacturer" << port.manufacturer() << "description" << port.description() << "serial number" << port.serialNumber();
qCDebug(dcModbusCommander()) << "Found serial port:" << port.systemLocation(); if (port.isBusy()) {
QString description = port.manufacturer() + " " + port.description(); qCDebug(dcModbusCommander()) << "Serial port ist busy, skipping.";
ThingDescriptor thingDescriptor(thingClassId, port.portName(), description); continue;
}
QString manufacturer = port.manufacturer();
if (manufacturer.isEmpty()) {
manufacturer = "unknown";
}
QString description = port.description()+" Manufacturer: "+port.manufacturer();
ThingDescriptor thingDescriptor(thingClassId, "Modbus RTU interface", description);
ParamList parameters; ParamList parameters;
QString serialPort = port.systemLocation(); QString serialPort = port.systemLocation();
foreach (Thing *existingThing, myThings()) { QString serialnumber = port.serialNumber();
if (existingThing->paramValue(modbusRTUClientThingSerialPortParamTypeId).toString() == serialPort) { if (serialnumber.isEmpty()) {
thingDescriptor.setThingId(existingThing->id()); serialnumber = port.manufacturer()+QString::number(port.productIdentifier(), 16);
break;
} }
qCDebug(dcModbusCommander()) << " - Serial number" << serialnumber;
Q_FOREACH (Thing *exisingThing, myThings().filterByParam(modbusRTUClientThingClassId)) {
thingDescriptor.setThingId(exisingThing->id());
// Rediscovery is broken because of a missing unique device id
// This is a workaround and doesnt work if multiple uart converters are attached.
// ThingDiscoveryInfo may be extended to distinquish between discovery and rediscovery
break;
} }
parameters.append(Param(modbusRTUClientThingSerialPortParamTypeId, serialPort)); parameters.append(Param(modbusRTUClientThingSerialPortParamTypeId, serialPort));
parameters.append(Param(modbusRTUClientThingSerialnumberParamTypeId, serialnumber));
thingDescriptor.setParams(parameters); thingDescriptor.setParams(parameters);
info->addThingDescriptor(thingDescriptor); info->addThingDescriptor(thingDescriptor);
} }
//FIXME missing info if it is a rediscovery
info->finish(Thing::ThingErrorNoError); info->finish(Thing::ThingErrorNoError);
return; return;
} else if (thingClassId == discreteInputThingClassId) { } else if (thingClassId == discreteInputThingClassId) {
@ -220,20 +171,160 @@ void IntegrationPluginModbusCommander::discoverThings(ThingDiscoveryInfo *info)
} }
} }
void IntegrationPluginModbusCommander::postSetupThing(Thing *info) void IntegrationPluginModbusCommander::setupThing(ThingSetupInfo *info)
{ {
Thing *thing = info->thing();
if (thing->thingClassId() == modbusTCPClientThingClassId) {
QHostAddress hostAddress = QHostAddress(thing->paramValue(modbusTCPClientThingIpAddressParamTypeId).toString());
uint port = thing->paramValue(modbusTCPClientThingPortParamTypeId).toUInt();
uint numberOfRetries = thing->setting(modbusTCPClientSettingsNumberOfRetriesParamTypeId).toUInt();
uint timeout = thing->setting(modbusTCPClientSettingsTimeoutParamTypeId).toUInt();
if (m_modbusTCPMasters.contains(thing)) {
// In case of a rediscovery
m_modbusTCPMasters.take(thing)->deleteLater();
}
foreach (ModbusTCPMaster *modbusTCPMaster, m_modbusTCPMasters.values()) {
if ((modbusTCPMaster->hostAddress() == hostAddress) && (modbusTCPMaster->port() == port)) {
m_modbusTCPMasters.insert(thing, modbusTCPMaster);
return info->finish(Thing::ThingErrorNoError);
}
}
qCDebug(dcModbusCommander()) << "Setting up TCP client" << thing->name();
qCDebug(dcModbusCommander()) << " address:" << hostAddress.toString();
qCDebug(dcModbusCommander()) << " port:" << port;
qCDebug(dcModbusCommander()) << " number of retries:" << numberOfRetries;
qCDebug(dcModbusCommander()) << " timeout:" << timeout;
ModbusTCPMaster *modbusTCPMaster = new ModbusTCPMaster(hostAddress, port, this);
connect(modbusTCPMaster, &ModbusTCPMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged);
connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted);
connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestError, this, &IntegrationPluginModbusCommander::onRequestError);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister);
connect(modbusTCPMaster, &ModbusTCPMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister);
connect(modbusTCPMaster, &ModbusTCPMaster::connectionStateChanged, info, [info, modbusTCPMaster, this] (bool connected) {
if (connected) {
info->finish(Thing::ThingErrorNoError);
m_modbusTCPMasters.insert(info->thing(), modbusTCPMaster);
}
});
connect(thing, &Thing::settingChanged, thing, [thing, modbusTCPMaster] (const ParamTypeId &paramTypeId, const QVariant &value) {
if (paramTypeId == modbusTCPClientSettingsNumberOfRetriesParamTypeId) {
qCDebug(dcModbusCommander()) << "Set number of retries" << thing->name() << value.toUInt();
modbusTCPMaster->setNumberOfRetries(value.toUInt());
} else if (paramTypeId == modbusTCPClientSettingsTimeoutParamTypeId) {
qCDebug(dcModbusCommander()) << "Set timeout " << thing->name() << value.toUInt();
modbusTCPMaster->setTimeout(value.toUInt());
}
});
modbusTCPMaster->connectDevice();
} else if (thing->thingClassId() == modbusRTUClientThingClassId) {
QString serialPort = thing->paramValue(modbusRTUClientThingSerialPortParamTypeId).toString();
uint baudrate = thing->paramValue(modbusRTUClientThingBaudRateParamTypeId).toUInt();
uint stopBits = thing->paramValue(modbusRTUClientThingStopBitsParamTypeId).toUInt();
uint dataBits = thing->paramValue(modbusRTUClientThingDataBitsParamTypeId).toUInt();
uint numberOfRetries = thing->setting(modbusRTUClientSettingsNumberOfRetriesParamTypeId).toUInt();
uint timeout = thing->setting(modbusRTUClientSettingsTimeoutParamTypeId).toUInt();
QSerialPort::Parity parity = QSerialPort::Parity::NoParity;
QString parityString = thing->paramValue(modbusRTUClientThingParityParamTypeId).toString();
if (parityString.contains("No")) {
parity = QSerialPort::Parity::NoParity;
} else if (parityString.contains("Even")) {
parity = QSerialPort::Parity::EvenParity;
} else if (parityString.contains("Odd")) {
parity = QSerialPort::Parity::OddParity;
}
qCDebug(dcModbusCommander()) << "Setting up RTU client" << thing->name();
qCDebug(dcModbusCommander()) << " baud:" << baudrate;
qCDebug(dcModbusCommander()) << " stop bits:" << stopBits;
qCDebug(dcModbusCommander()) << " data bits:" << dataBits;
qCDebug(dcModbusCommander()) << " parity:" << parityString;
qCDebug(dcModbusCommander()) << " number of retries:" << numberOfRetries;
qCDebug(dcModbusCommander()) << " timeout:" << timeout;
if (m_modbusRTUMasters.contains(thing)) {
// In case of a rediscovery
m_modbusRTUMasters.take(thing)->deleteLater();
}
ModbusRTUMaster *modbusRTUMaster = new ModbusRTUMaster(serialPort, baudrate, parity, dataBits, stopBits, this);
modbusRTUMaster->setTimeout(timeout);
modbusRTUMaster->setNumberOfRetries(numberOfRetries);
connect(modbusRTUMaster, &ModbusRTUMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged);
connect(modbusRTUMaster, &ModbusRTUMaster::requestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted);
connect(modbusRTUMaster, &ModbusRTUMaster::requestError, this, &IntegrationPluginModbusCommander::onRequestError);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister);
connect(modbusRTUMaster, &ModbusRTUMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister);
connect(modbusRTUMaster, &ModbusRTUMaster::connectionStateChanged, info, [info, modbusRTUMaster, this] (bool connected) {
if (connected) {
info->finish(Thing::ThingErrorNoError);
m_modbusRTUMasters.insert(info->thing(), modbusRTUMaster);
}
});
connect(thing, &Thing::settingChanged, thing, [thing, modbusRTUMaster] (const ParamTypeId &paramTypeId, const QVariant &value) {
if (paramTypeId == modbusRTUClientSettingsNumberOfRetriesParamTypeId) {
qCDebug(dcModbusCommander()) << "Set number of retries" << thing->name() << value.toUInt();
modbusRTUMaster->setNumberOfRetries(value.toUInt());
} else if (paramTypeId == modbusRTUClientSettingsTimeoutParamTypeId) {
qCDebug(dcModbusCommander()) << "Set timeout " << thing->name() << value.toUInt();
modbusRTUMaster->setTimeout(value.toUInt());
}
});
modbusRTUMaster->connectDevice();
} else if ((thing->thingClassId() == coilThingClassId)
|| (thing->thingClassId() == discreteInputThingClassId)
|| (thing->thingClassId() == holdingRegisterThingClassId)
|| (thing->thingClassId() == inputRegisterThingClassId)) {
qCDebug(dcModbusCommander()) << "Setting up modbus register" << thing->name();
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginModbusCommander::postSetupThing(Thing *thing)
{
qCDebug(dcModbusCommander()) << "Post setup thing" << thing->name();
if (!m_refreshTimer) { if (!m_refreshTimer) {
// Refresh timer for TCP read
int refreshTime = configValue(modbusCommanderPluginUpdateIntervalParamTypeId).toInt(); int refreshTime = configValue(modbusCommanderPluginUpdateIntervalParamTypeId).toInt();
qCDebug(dcModbusCommander()) << "Starting refresh timer with interval" << refreshTime << "s";
m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(refreshTime); m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(refreshTime);
connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginModbusCommander::onRefreshTimer); connect(m_refreshTimer, &PluginTimer::timeout, this, [this] {
foreach (Thing *thing, myThings()) {
if ((thing->thingClassId() == coilThingClassId) ||
(thing->thingClassId() == discreteInputThingClassId) ||
(thing->thingClassId() == holdingRegisterThingClassId) ||
(thing->thingClassId() == inputRegisterThingClassId)) {
readRegister(thing);
}
}
});
} }
if ((info->thingClassId() == coilThingClassId) || if ((thing->thingClassId() == modbusRTUClientThingClassId) ||
(info->thingClassId() == discreteInputThingClassId) || (thing->thingClassId() == modbusTCPClientThingClassId)) {
(info->thingClassId() == holdingRegisterThingClassId) || thing->setStateValue(m_connectedStateTypeId.value(thing->thingClassId()), true);
(info->thingClassId() == inputRegisterThingClassId)) { } else if ((thing->thingClassId() == coilThingClassId) ||
readRegister(info); (thing->thingClassId() == discreteInputThingClassId) ||
(thing->thingClassId() == holdingRegisterThingClassId) ||
(thing->thingClassId() == inputRegisterThingClassId)) {
readRegister(thing);
} else {
Q_ASSERT_X(false, "postSetupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
} }
} }
@ -241,27 +332,33 @@ void IntegrationPluginModbusCommander::postSetupThing(Thing *info)
void IntegrationPluginModbusCommander::executeAction(ThingActionInfo *info) void IntegrationPluginModbusCommander::executeAction(ThingActionInfo *info)
{ {
Thing *thing = info->thing(); Thing *thing = info->thing();
Action action = info->action();
if (thing->thingClassId() == coilThingClassId) { if (thing->thingClassId() == coilThingClassId) {
if (info->action().actionTypeId() == coilValueActionTypeId) { if (action.actionTypeId() == coilValueActionTypeId) {
writeRegister(thing, info); writeRegister(thing, info);
return; return;
} else {
Q_ASSERT_X(false, "Execute action", QString("Unhandled action type id: %1").arg(action.actionTypeId().toString()).toUtf8());
} }
} else if (thing->thingClassId() == holdingRegisterThingClassId) { } else if (thing->thingClassId() == holdingRegisterThingClassId) {
if (info->action().actionTypeId() == holdingRegisterValueActionTypeId) { if (action.actionTypeId() == holdingRegisterValueActionTypeId) {
writeRegister(thing, info); writeRegister(thing, info);
return; return;
} else {
Q_ASSERT_X(false, "Execute action", QString("Unhandled action type id: %1").arg(action.actionTypeId().toString()).toUtf8());
} }
} else {
Q_ASSERT_X(false, "Execute action", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
} }
qCWarning(dcModbusCommander()) << "Unhandled deviceclass/actiontype in executeAction!";
info->finish(Thing::ThingErrorThingClassNotFound);
} }
void IntegrationPluginModbusCommander::thingRemoved(Thing *thing) void IntegrationPluginModbusCommander::thingRemoved(Thing *thing)
{ {
qCDebug(dcModbusCommander()) << "Removing thing" << thing->name();
if (thing->thingClassId() == modbusTCPClientThingClassId) { if (thing->thingClassId() == modbusTCPClientThingClassId) {
ModbusTCPMaster *modbus = m_modbusTCPMasters.take(thing); ModbusTCPMaster *modbus = m_modbusTCPMasters.take(thing);
modbus->deleteLater(); modbus->deleteLater();
@ -271,31 +368,23 @@ void IntegrationPluginModbusCommander::thingRemoved(Thing *thing)
} }
if (myThings().empty()) { if (myThings().empty()) {
qCDebug(dcModbusCommander()) << "No more Modbus commander things, stopping timer";
hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer); hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer);
m_refreshTimer = nullptr; m_refreshTimer = nullptr;
} }
} }
void IntegrationPluginModbusCommander::onRefreshTimer()
{
foreach (Thing *thing, myThings()) {
if ((thing->thingClassId() == coilThingClassId) ||
(thing->thingClassId() == discreteInputThingClassId) ||
(thing->thingClassId() == holdingRegisterThingClassId) ||
(thing->thingClassId() == inputRegisterThingClassId)) {
readRegister(thing);
}
}
}
void IntegrationPluginModbusCommander::onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value) void IntegrationPluginModbusCommander::onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value)
{ {
// Check refresh schedule // Check refresh schedule
if (paramTypeId == modbusCommanderPluginUpdateIntervalParamTypeId) {; if (paramTypeId == modbusCommanderPluginUpdateIntervalParamTypeId) {;
qCDebug(dcModbusCommander()) << "Update interval has changed to" << value.toUInt() << "s";
if (m_refreshTimer) { if (m_refreshTimer) {
uint refreshTime = value.toUInt(); uint refreshTime = value.toUInt();
m_refreshTimer->stop(); m_refreshTimer->stop();
m_refreshTimer->startTimer(refreshTime); m_refreshTimer->startTimer(refreshTime);
} else {
qCWarning(dcModbusCommander()) << "Update interval changed but refresh timer is not initialized";
} }
} }
} }
@ -304,20 +393,13 @@ void IntegrationPluginModbusCommander::onConnectionStateChanged(bool status)
{ {
auto modbus = sender(); auto modbus = sender();
if (m_asyncRTUSetup.contains(static_cast<ModbusRTUMaster *>(modbus))) {
ThingSetupInfo *info = m_asyncRTUSetup.take(static_cast<ModbusRTUMaster *>(modbus));
info->finish(Thing::ThingErrorNoError);
} else if (m_asyncTCPSetup.contains(static_cast<ModbusTCPMaster *>(modbus))) {
ThingSetupInfo *info = m_asyncTCPSetup.take(static_cast<ModbusTCPMaster *>(modbus));
info->finish(Thing::ThingErrorNoError);
}
if (m_modbusRTUMasters.values().contains(static_cast<ModbusRTUMaster *>(modbus))) { if (m_modbusRTUMasters.values().contains(static_cast<ModbusRTUMaster *>(modbus))) {
Thing *thing = m_modbusRTUMasters.key(static_cast<ModbusRTUMaster *>(modbus)); Thing *thing = m_modbusRTUMasters.key(static_cast<ModbusRTUMaster *>(modbus));
qCDebug(dcModbusCommander()) << "Connections state changed" << thing->name() << status;
thing->setStateValue(modbusRTUClientConnectedStateTypeId, status); thing->setStateValue(modbusRTUClientConnectedStateTypeId, status);
} else if (m_modbusTCPMasters.values().contains(static_cast<ModbusTCPMaster *>(modbus))) { } else if (m_modbusTCPMasters.values().contains(static_cast<ModbusTCPMaster *>(modbus))) {
Thing *thing = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus)); Thing *thing = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
qCDebug(dcModbusCommander()) << "Connections state changed" << thing->name() << status;
thing->setStateValue(modbusTCPClientConnectedStateTypeId, status); thing->setStateValue(modbusTCPClientConnectedStateTypeId, status);
} }
} }
@ -496,6 +578,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing)
if (!modbus) if (!modbus)
return; return;
if (!modbus->connected())
return; // Send requests only if the modbus interface is connected
if (thing->thingClassId() == coilThingClassId) { if (thing->thingClassId() == coilThingClassId) {
requestId = modbus->readCoil(slaveAddress, registerAddress); requestId = modbus->readCoil(slaveAddress, registerAddress);
} else if (thing->thingClassId() == discreteInputThingClassId) { } else if (thing->thingClassId() == discreteInputThingClassId) {
@ -511,6 +596,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing)
if (!modbus) if (!modbus)
return; return;
if (!modbus->connected())
return; // Send requests only if the modbus interface is connected
if (thing->thingClassId() == coilThingClassId) { if (thing->thingClassId() == coilThingClassId) {
requestId = modbus->readCoil(slaveAddress, registerAddress); requestId = modbus->readCoil(slaveAddress, registerAddress);
} else if (thing->thingClassId() == discreteInputThingClassId) { } else if (thing->thingClassId() == discreteInputThingClassId) {

View File

@ -65,9 +65,6 @@ private:
QHash<QUuid, ThingActionInfo*> m_asyncActions; QHash<QUuid, ThingActionInfo*> m_asyncActions;
QHash<QUuid, Thing*> m_readRequests; QHash<QUuid, Thing*> m_readRequests;
QHash<ModbusRTUMaster*, ThingSetupInfo *> m_asyncRTUSetup;
QHash<ModbusTCPMaster*, ThingSetupInfo *> m_asyncTCPSetup;
void readRegister(Thing *thing); void readRegister(Thing *thing);
void writeRegister(Thing *thing, ThingActionInfo *info); void writeRegister(Thing *thing, ThingActionInfo *info);
@ -77,8 +74,6 @@ private:
QHash<ThingClassId, StateTypeId> m_valueStateTypeId; QHash<ThingClassId, StateTypeId> m_valueStateTypeId;
private slots: private slots:
void onRefreshTimer();
void onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value); void onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value);
void onConnectionStateChanged(bool status); void onConnectionStateChanged(bool status);

View File

@ -24,6 +24,23 @@
"displayName": "Modbus TCP client", "displayName": "Modbus TCP client",
"createMethods": ["user"], "createMethods": ["user"],
"interfaces": ["connectable"], "interfaces": ["connectable"],
"settingsTypes": [
{
"id": "a6aa4eff-205b-426d-ad05-90971a122138",
"name": "timeout",
"displayName": "Timeout",
"type": "uint",
"minValue": 10,
"defaultValue": 100
},
{
"id": "b27c95c9-7584-46e1-9e62-89890c7bde67",
"name": "numberOfRetries",
"displayName": "Number of retries",
"type": "uint",
"defaultValue": 3
}
],
"paramTypes": [ "paramTypes": [
{ {
"id": "2a3fcb23-931b-4ba1-b134-c49b656c76f7", "id": "2a3fcb23-931b-4ba1-b134-c49b656c76f7",
@ -57,6 +74,23 @@
"displayName": "Modbus RTU client", "displayName": "Modbus RTU client",
"createMethods": ["discovery", "user"], "createMethods": ["discovery", "user"],
"interfaces": ["connectable"], "interfaces": ["connectable"],
"settingsTypes": [
{
"id": "b0af32f0-b8cc-4642-af5a-576732522b2c",
"name": "timeout",
"displayName": "Timeout",
"type": "uint",
"minValue": 10,
"defaultValue": 100
},
{
"id": "c4f16d6c-c1f2-4862-b0bd-6fae7193eaa8",
"name": "numberOfRetries",
"displayName": "Number of retries",
"type": "uint",
"defaultValue": 3
}
],
"paramTypes": [ "paramTypes": [
{ {
"id": "ed49f7d8-ab18-4c37-9b80-1004b75dcb91", "id": "ed49f7d8-ab18-4c37-9b80-1004b75dcb91",
@ -66,6 +100,13 @@
"inputType": "TextLine", "inputType": "TextLine",
"defaultValue": "ttyAMA0" "defaultValue": "ttyAMA0"
}, },
{
"id": "9908b01f-a76b-4b21-8242-b507c9252254",
"name": "serialnumber",
"displayName": "Serial number",
"type": "QString",
"defaultValue": ""
},
{ {
"id": "45dfc828-f238-4263-89a3-9b35cf5dea39", "id": "45dfc828-f238-4263-89a3-9b35cf5dea39",
"name": "baudRate", "name": "baudRate",
@ -98,7 +139,7 @@
"Even Parity", "Even Parity",
"Odd Parity" "Odd Parity"
], ],
"defaultValue": "Even Parity" "defaultValue": "No Parity"
} }
], ],
"stateTypes": [ "stateTypes": [

View File

@ -4,30 +4,30 @@
<context> <context>
<name>ModbusCommander</name> <name>ModbusCommander</name>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="78"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="88"/>
<source>Baud rate</source> <source>Baud rate</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment>
<translation>Baudrate</translation> <translation>Baudrate</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="81"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="91"/>
<source>Coil</source> <source>Coil</source>
<extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment> <extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment>
<translation>Coil</translation> <translation>Coil</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="84"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="87"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="90"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="100"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="93"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="103"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="96"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="106"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="99"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="109"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="102"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="105"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="115"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="108"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="118"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="111"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="114"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="117"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="127"/>
<source>Connected</source> <source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, EventType: connected, ID: {1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, EventType: connected, ID: {1f55b72a-5d13-4ae1-b136-bfd84fd9761f})
---------- ----------
@ -55,11 +55,11 @@ The name of the StateType ({725b541a-9e0c-4634-81eb-e415c0b8f012}) of ThingClass
<translation>Verbunden</translation> <translation>Verbunden</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="120"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="123"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="126"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="136"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="129"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="132"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="142"/>
<source>Connection status changed</source> <source>Connection status changed</source>
<extracomment>The name of the EventType ({1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) of ThingClass holdingRegister <extracomment>The name of the EventType ({1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) of ThingClass holdingRegister
---------- ----------
@ -73,70 +73,79 @@ The name of the EventType ({725b541a-9e0c-4634-81eb-e415c0b8f012}) of ThingClass
<translation>Verbunden geändert</translation> <translation>Verbunden geändert</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="135"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="145"/>
<source>Data bits</source> <source>Data bits</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment>
<translation>Datenbits</translation> <translation>Datenbits</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="138"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="148"/>
<source>Discrete input</source> <source>Discrete input</source>
<extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment> <extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment>
<translation>Discrete input</translation> <translation>Discrete input</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="141"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="151"/>
<source>Holding register</source> <source>Holding register</source>
<extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment> <extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment>
<translation>Holding Register</translation> <translation>Holding Register</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="144"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="154"/>
<source>IP Address</source> <source>IP Address</source>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment>
<translation>IP-Adresse</translation> <translation>IP-Adresse</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="147"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="157"/>
<source>Input register</source> <source>Input register</source>
<extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment> <extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment>
<translation>Input Register</translation> <translation>Input Register</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="150"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="160"/>
<source>Modbus Commander</source> <source>Modbus Commander</source>
<extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment> <extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment>
<translation>Modbus Commander</translation> <translation>Modbus Commander</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="153"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="163"/>
<source>Modbus RTU client</source> <source>Modbus RTU client</source>
<extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment> <extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment>
<translation>Modbus RTU Client</translation> <translation>Modbus RTU Client</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="156"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="166"/>
<source>Modbus TCP client</source> <source>Modbus TCP client</source>
<extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment> <extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment>
<translation>Modbus TCP Client</translation> <translation>Modbus TCP Client</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="159"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="172"/>
<source>Number of retries</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: settings, ID: {c4f16d6c-c1f2-4862-b0bd-6fae7193eaa8})
----------
The name of the ParamType (ThingClass: modbusTCPClient, Type: settings, ID: {b27c95c9-7584-46e1-9e62-89890c7bde67})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="175"/>
<source>Parity</source> <source>Parity</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment>
<translation>Parity</translation> <translation>Parity</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="162"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="178"/>
<source>Port</source> <source>Port</source>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment>
<translation>Port</translation> <translation>Port</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="165"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="168"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="184"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="171"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="174"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="190"/>
<source>Register address</source> <source>Register address</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {c771e09e-15fe-4ea9-9662-c44e2df556a8}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {c771e09e-15fe-4ea9-9662-c44e2df556a8})
---------- ----------
@ -148,16 +157,22 @@ The name of the ParamType (ThingClass: coil, Type: thing, ID: {9d40c4ce-d251-43b
<translation>Registeradresse</translation> <translation>Registeradresse</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="177"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="193"/>
<source>Serial number</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {9908b01f-a76b-4b21-8242-b507c9252254})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="196"/>
<source>Serial port</source> <source>Serial port</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment>
<translation>Serielle Schnittstelle</translation> <translation>Serielle Schnittstelle</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="180"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="183"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="202"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="186"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="189"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="208"/>
<source>Slave address</source> <source>Slave address</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {35879cf9-631c-4fe0-95c0-a4bb2e9039e6}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {35879cf9-631c-4fe0-95c0-a4bb2e9039e6})
---------- ----------
@ -169,28 +184,37 @@ The name of the ParamType (ThingClass: coil, Type: thing, ID: {d85977a2-4f9c-40f
<translation>Slaveadresse</translation> <translation>Slaveadresse</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="192"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="211"/>
<source>Stop bits</source> <source>Stop bits</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment>
<translation>Stopbits</translation> <translation>Stopbits</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="195"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="217"/>
<source>Timeout</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: settings, ID: {b0af32f0-b8cc-4642-af5a-576732522b2c})
----------
The name of the ParamType (ThingClass: modbusTCPClient, Type: settings, ID: {a6aa4eff-205b-426d-ad05-90971a122138})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="220"/>
<source>Update interval</source> <source>Update interval</source>
<extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment>
<translation>Updateinterval</translation> <translation>Updateinterval</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="198"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="201"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="204"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="207"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="232"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="210"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="213"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="216"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="241"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="219"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="222"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="225"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="250"/>
<source>Value</source> <source>Value</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, ActionType: value, ID: {585cc4fc-07da-415f-a176-12f3baeef025}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, ActionType: value, ID: {585cc4fc-07da-415f-a176-12f3baeef025})
---------- ----------
@ -214,8 +238,8 @@ The name of the StateType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClass
<translation>Wert</translation> <translation>Wert</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="228"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="253"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="231"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="256"/>
<source>Value changed</source> <source>Value changed</source>
<extracomment>The name of the EventType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister <extracomment>The name of the EventType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister
---------- ----------
@ -223,14 +247,14 @@ The name of the EventType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClass
<translation>Wert geändert</translation> <translation>Wert geändert</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="234"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="259"/>
<source>Value received</source> <source>Value received</source>
<extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment> <extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment>
<translation>Wert empfangen</translation> <translation>Wert empfangen</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="237"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="262"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="240"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="265"/>
<source>Write value</source> <source>Write value</source>
<extracomment>The name of the ActionType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister <extracomment>The name of the ActionType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister
---------- ----------
@ -238,19 +262,19 @@ The name of the ActionType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClas
<translation>Schreibe Wert</translation> <translation>Schreibe Wert</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="243"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="268"/>
<source>connection status changed</source> <source>connection status changed</source>
<extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment> <extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment>
<translation>Verbindung geändert</translation> <translation>Verbindung geändert</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="246"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="271"/>
<source>nymea</source> <source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment> <extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation>nymea</translation> <translation>nymea</translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="249"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="274"/>
<source>value changed</source> <source>value changed</source>
<extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment> <extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment>
<translation>Wert geändert</translation> <translation>Wert geändert</translation>

View File

@ -4,30 +4,30 @@
<context> <context>
<name>ModbusCommander</name> <name>ModbusCommander</name>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="78"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="88"/>
<source>Baud rate</source> <source>Baud rate</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="81"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="91"/>
<source>Coil</source> <source>Coil</source>
<extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment> <extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="84"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="87"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="90"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="100"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="93"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="103"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="96"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="106"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="99"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="109"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="102"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="105"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="115"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="108"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="118"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="111"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="114"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="117"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="127"/>
<source>Connected</source> <source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, EventType: connected, ID: {1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, EventType: connected, ID: {1f55b72a-5d13-4ae1-b136-bfd84fd9761f})
---------- ----------
@ -55,11 +55,11 @@ The name of the StateType ({725b541a-9e0c-4634-81eb-e415c0b8f012}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="120"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="123"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="126"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="136"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="129"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="132"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="142"/>
<source>Connection status changed</source> <source>Connection status changed</source>
<extracomment>The name of the EventType ({1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) of ThingClass holdingRegister <extracomment>The name of the EventType ({1f55b72a-5d13-4ae1-b136-bfd84fd9761f}) of ThingClass holdingRegister
---------- ----------
@ -73,70 +73,79 @@ The name of the EventType ({725b541a-9e0c-4634-81eb-e415c0b8f012}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="135"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="145"/>
<source>Data bits</source> <source>Data bits</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="138"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="148"/>
<source>Discrete input</source> <source>Discrete input</source>
<extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment> <extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="141"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="151"/>
<source>Holding register</source> <source>Holding register</source>
<extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment> <extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="144"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="154"/>
<source>IP Address</source> <source>IP Address</source>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="147"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="157"/>
<source>Input register</source> <source>Input register</source>
<extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment> <extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="150"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="160"/>
<source>Modbus Commander</source> <source>Modbus Commander</source>
<extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment> <extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="153"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="163"/>
<source>Modbus RTU client</source> <source>Modbus RTU client</source>
<extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment> <extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="156"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="166"/>
<source>Modbus TCP client</source> <source>Modbus TCP client</source>
<extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment> <extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="159"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="172"/>
<source>Number of retries</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: settings, ID: {c4f16d6c-c1f2-4862-b0bd-6fae7193eaa8})
----------
The name of the ParamType (ThingClass: modbusTCPClient, Type: settings, ID: {b27c95c9-7584-46e1-9e62-89890c7bde67})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="175"/>
<source>Parity</source> <source>Parity</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="162"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="178"/>
<source>Port</source> <source>Port</source>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="165"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="168"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="184"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="171"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="174"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="190"/>
<source>Register address</source> <source>Register address</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {c771e09e-15fe-4ea9-9662-c44e2df556a8}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {c771e09e-15fe-4ea9-9662-c44e2df556a8})
---------- ----------
@ -148,16 +157,22 @@ The name of the ParamType (ThingClass: coil, Type: thing, ID: {9d40c4ce-d251-43b
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="177"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="193"/>
<source>Serial number</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {9908b01f-a76b-4b21-8242-b507c9252254})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="196"/>
<source>Serial port</source> <source>Serial port</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="180"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="183"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="202"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="186"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="189"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="208"/>
<source>Slave address</source> <source>Slave address</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {35879cf9-631c-4fe0-95c0-a4bb2e9039e6}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, Type: thing, ID: {35879cf9-631c-4fe0-95c0-a4bb2e9039e6})
---------- ----------
@ -169,28 +184,37 @@ The name of the ParamType (ThingClass: coil, Type: thing, ID: {d85977a2-4f9c-40f
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="192"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="211"/>
<source>Stop bits</source> <source>Stop bits</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="195"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="217"/>
<source>Timeout</source>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: settings, ID: {b0af32f0-b8cc-4642-af5a-576732522b2c})
----------
The name of the ParamType (ThingClass: modbusTCPClient, Type: settings, ID: {a6aa4eff-205b-426d-ad05-90971a122138})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="220"/>
<source>Update interval</source> <source>Update interval</source>
<extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment> <extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="198"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="201"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="204"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="207"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="232"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="210"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="213"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="216"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="241"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="219"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="222"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="225"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="250"/>
<source>Value</source> <source>Value</source>
<extracomment>The name of the ParamType (ThingClass: holdingRegister, ActionType: value, ID: {585cc4fc-07da-415f-a176-12f3baeef025}) <extracomment>The name of the ParamType (ThingClass: holdingRegister, ActionType: value, ID: {585cc4fc-07da-415f-a176-12f3baeef025})
---------- ----------
@ -214,8 +238,8 @@ The name of the StateType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="228"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="253"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="231"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="256"/>
<source>Value changed</source> <source>Value changed</source>
<extracomment>The name of the EventType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister <extracomment>The name of the EventType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister
---------- ----------
@ -223,14 +247,14 @@ The name of the EventType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="234"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="259"/>
<source>Value received</source> <source>Value received</source>
<extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment> <extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="237"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="262"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="240"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="265"/>
<source>Write value</source> <source>Write value</source>
<extracomment>The name of the ActionType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister <extracomment>The name of the ActionType ({585cc4fc-07da-415f-a176-12f3baeef025}) of ThingClass holdingRegister
---------- ----------
@ -238,19 +262,19 @@ The name of the ActionType ({1cd4cd53-3043-4ed9-9ba8-62985000c599}) of ThingClas
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="243"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="268"/>
<source>connection status changed</source> <source>connection status changed</source>
<extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment> <extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="246"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="271"/>
<source>nymea</source> <source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment> <extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="249"/> <location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/modbuscommander/plugininfo.h" line="274"/>
<source>value changed</source> <source>value changed</source>
<extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment> <extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>