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

View File

@ -45,9 +45,13 @@ public:
~ModbusRTUMaster();
bool connectDevice();
bool connected();
void setNumberOfRetries(int number);
void setTimeout(int timeout);
int timeout();
int numberOfRetries();
QUuid readCoil(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);

View File

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

View File

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

View File

@ -1,27 +1,62 @@
# 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
* Modbus TCP client
* Gateway
* Modbus TCP interface
* IP Address and Port of the target device are requried.
* Modbus RTU client
* Gateway
* Discovery setup
* Modbus RTU interface
* All available serial ports will be discovered.
* Baudrate, data bits, stop bits and parity are required.
* Coil
* Writes and reads a single Modbus Coil
* Modbus device- and register address are required.
* Discrete input
* Reads a single Modbus discrete input
* Modbus device- and register address are required.
* Input register
* Reads a single Modbus input register
* Modbus device- and register address are required.
* Holding register
* Writes and reads a single Modbus holding register
* Modbus device- and register address are required.
## Requirements
* 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

View File

@ -40,7 +40,6 @@ IntegrationPluginModbusCommander::IntegrationPluginModbusCommander()
void IntegrationPluginModbusCommander::init()
{
connect(this, &IntegrationPluginModbusCommander::configValueChanged, this, &IntegrationPluginModbusCommander::onPluginConfigurationChanged);
//QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = false"));
m_slaveAddressParamTypeId.insert(coilThingClassId, coilThingSlaveAddressParamTypeId);
m_slaveAddressParamTypeId.insert(inputRegisterThingClassId, inputRegisterThingSlaveAddressParamTypeId);
@ -52,6 +51,8 @@ void IntegrationPluginModbusCommander::init()
m_registerAddressParamTypeId.insert(discreteInputThingClassId, discreteInputThingRegisterAddressParamTypeId);
m_registerAddressParamTypeId.insert(holdingRegisterThingClassId, holdingRegisterThingRegisterAddressParamTypeId);
m_connectedStateTypeId.insert(modbusRTUClientThingClassId, modbusRTUClientConnectedStateTypeId);
m_connectedStateTypeId.insert(modbusTCPClientThingClassId, modbusTCPClientConnectedStateTypeId);
m_connectedStateTypeId.insert(coilThingClassId, coilConnectedStateTypeId);
m_connectedStateTypeId.insert(inputRegisterThingClassId, inputRegisterConnectedStateTypeId);
m_connectedStateTypeId.insert(discreteInputThingClassId, discreteInputConnectedStateTypeId);
@ -63,94 +64,44 @@ void IntegrationPluginModbusCommander::init()
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)
{
ThingClassId thingClassId = info->thingClassId();
if (thingClassId == modbusRTUClientThingClassId) {
Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) {
//Serial port is not yet used, create now a new one
qCDebug(dcModbusCommander()) << "Found serial port:" << port.systemLocation();
QString description = port.manufacturer() + " " + port.description();
ThingDescriptor thingDescriptor(thingClassId, port.portName(), description);
qCDebug(dcModbusCommander()) << "Found serial port:" << port.systemLocation() << "manufacturer" << port.manufacturer() << "description" << port.description() << "serial number" << port.serialNumber();
if (port.isBusy()) {
qCDebug(dcModbusCommander()) << "Serial port ist busy, skipping.";
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;
QString serialPort = port.systemLocation();
foreach (Thing *existingThing, myThings()) {
if (existingThing->paramValue(modbusRTUClientThingSerialPortParamTypeId).toString() == serialPort) {
thingDescriptor.setThingId(existingThing->id());
break;
}
QString serialnumber = port.serialNumber();
if (serialnumber.isEmpty()) {
serialnumber = port.manufacturer()+QString::number(port.productIdentifier(), 16);
}
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(modbusRTUClientThingSerialnumberParamTypeId, serialnumber));
thingDescriptor.setParams(parameters);
info->addThingDescriptor(thingDescriptor);
}
//FIXME missing info if it is a rediscovery
info->finish(Thing::ThingErrorNoError);
return;
} 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) {
// Refresh timer for TCP read
int refreshTime = configValue(modbusCommanderPluginUpdateIntervalParamTypeId).toInt();
qCDebug(dcModbusCommander()) << "Starting refresh timer with interval" << refreshTime << "s";
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) ||
(info->thingClassId() == discreteInputThingClassId) ||
(info->thingClassId() == holdingRegisterThingClassId) ||
(info->thingClassId() == inputRegisterThingClassId)) {
readRegister(info);
if ((thing->thingClassId() == modbusRTUClientThingClassId) ||
(thing->thingClassId() == modbusTCPClientThingClassId)) {
thing->setStateValue(m_connectedStateTypeId.value(thing->thingClassId()), true);
} else if ((thing->thingClassId() == coilThingClassId) ||
(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)
{
Thing *thing = info->thing();
Action action = info->action();
if (thing->thingClassId() == coilThingClassId) {
if (info->action().actionTypeId() == coilValueActionTypeId) {
if (action.actionTypeId() == coilValueActionTypeId) {
writeRegister(thing, info);
return;
} else {
Q_ASSERT_X(false, "Execute action", QString("Unhandled action type id: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else if (thing->thingClassId() == holdingRegisterThingClassId) {
if (info->action().actionTypeId() == holdingRegisterValueActionTypeId) {
if (action.actionTypeId() == holdingRegisterValueActionTypeId) {
writeRegister(thing, info);
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)
{
qCDebug(dcModbusCommander()) << "Removing thing" << thing->name();
if (thing->thingClassId() == modbusTCPClientThingClassId) {
ModbusTCPMaster *modbus = m_modbusTCPMasters.take(thing);
modbus->deleteLater();
@ -271,31 +368,23 @@ void IntegrationPluginModbusCommander::thingRemoved(Thing *thing)
}
if (myThings().empty()) {
qCDebug(dcModbusCommander()) << "No more Modbus commander things, stopping timer";
hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer);
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)
{
// Check refresh schedule
if (paramTypeId == modbusCommanderPluginUpdateIntervalParamTypeId) {;
qCDebug(dcModbusCommander()) << "Update interval has changed to" << value.toUInt() << "s";
if (m_refreshTimer) {
uint refreshTime = value.toUInt();
m_refreshTimer->stop();
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();
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))) {
Thing *thing = m_modbusRTUMasters.key(static_cast<ModbusRTUMaster *>(modbus));
qCDebug(dcModbusCommander()) << "Connections state changed" << thing->name() << status;
thing->setStateValue(modbusRTUClientConnectedStateTypeId, status);
} else if (m_modbusTCPMasters.values().contains(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);
}
}
@ -496,6 +578,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing)
if (!modbus)
return;
if (!modbus->connected())
return; // Send requests only if the modbus interface is connected
if (thing->thingClassId() == coilThingClassId) {
requestId = modbus->readCoil(slaveAddress, registerAddress);
} else if (thing->thingClassId() == discreteInputThingClassId) {
@ -511,6 +596,9 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing)
if (!modbus)
return;
if (!modbus->connected())
return; // Send requests only if the modbus interface is connected
if (thing->thingClassId() == coilThingClassId) {
requestId = modbus->readCoil(slaveAddress, registerAddress);
} else if (thing->thingClassId() == discreteInputThingClassId) {

View File

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

View File

@ -24,6 +24,23 @@
"displayName": "Modbus TCP client",
"createMethods": ["user"],
"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": [
{
"id": "2a3fcb23-931b-4ba1-b134-c49b656c76f7",
@ -57,6 +74,23 @@
"displayName": "Modbus RTU client",
"createMethods": ["discovery", "user"],
"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": [
{
"id": "ed49f7d8-ab18-4c37-9b80-1004b75dcb91",
@ -66,6 +100,13 @@
"inputType": "TextLine",
"defaultValue": "ttyAMA0"
},
{
"id": "9908b01f-a76b-4b21-8242-b507c9252254",
"name": "serialnumber",
"displayName": "Serial number",
"type": "QString",
"defaultValue": ""
},
{
"id": "45dfc828-f238-4263-89a3-9b35cf5dea39",
"name": "baudRate",
@ -98,7 +139,7 @@
"Even Parity",
"Odd Parity"
],
"defaultValue": "Even Parity"
"defaultValue": "No Parity"
}
],
"stateTypes": [

View File

@ -4,30 +4,30 @@
<context>
<name>ModbusCommander</name>
<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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment>
<translation>Baudrate</translation>
</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>
<extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment>
<translation>Coil</translation>
</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="87"/>
<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="93"/>
<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="99"/>
<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="105"/>
<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="111"/>
<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="117"/>
<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="97"/>
<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="103"/>
<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="109"/>
<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="115"/>
<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="121"/>
<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="127"/>
<source>Connected</source>
<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>
</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="123"/>
<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="129"/>
<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="130"/>
<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="136"/>
<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="142"/>
<source>Connection status changed</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment>
<translation>Datenbits</translation>
</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>
<extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment>
<translation>Discrete input</translation>
</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>
<extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment>
<translation>Holding Register</translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment>
<translation>IP-Adresse</translation>
</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>
<extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment>
<translation>Input Register</translation>
</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>
<extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment>
<translation>Modbus Commander</translation>
</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>
<extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment>
<translation>Modbus RTU Client</translation>
</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>
<extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment>
<translation>Modbus TCP Client</translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment>
<translation>Parity</translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment>
<translation>Port</translation>
</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="168"/>
<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="174"/>
<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="184"/>
<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="190"/>
<source>Register address</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment>
<translation>Serielle Schnittstelle</translation>
</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="183"/>
<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="189"/>
<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="202"/>
<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="208"/>
<source>Slave address</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment>
<translation>Stopbits</translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment>
<translation>Updateinterval</translation>
</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="201"/>
<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="207"/>
<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="213"/>
<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="219"/>
<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="225"/>
<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="226"/>
<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="232"/>
<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="238"/>
<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="244"/>
<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="250"/>
<source>Value</source>
<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>
</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="231"/>
<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="256"/>
<source>Value changed</source>
<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>
</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>
<extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment>
<translation>Wert empfangen</translation>
</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="240"/>
<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="265"/>
<source>Write value</source>
<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>
</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>
<extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment>
<translation>Verbindung geändert</translation>
</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>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation>nymea</translation>
</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>
<extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment>
<translation>Wert geändert</translation>

View File

@ -4,30 +4,30 @@
<context>
<name>ModbusCommander</name>
<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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {45dfc828-f238-4263-89a3-9b35cf5dea39})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({f53524ea-1d06-40a9-b7a4-041297b21e84})</extracomment>
<translation type="unfinished"></translation>
</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="87"/>
<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="93"/>
<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="99"/>
<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="105"/>
<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="111"/>
<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="117"/>
<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="97"/>
<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="103"/>
<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="109"/>
<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="115"/>
<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="121"/>
<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="127"/>
<source>Connected</source>
<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>
</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="123"/>
<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="129"/>
<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="130"/>
<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="136"/>
<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="142"/>
<source>Connection status changed</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {a27c664b-9f43-4573-a2cc-f65a8fa1a069})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({d7a15b39-48d3-4591-bdad-ec5e799aa6e5})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({61a2382c-3d9f-41a1-a2fd-27b2af203c56})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {2a3fcb23-931b-4ba1-b134-c49b656c76f7})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({e4c34050-d115-440f-b332-63d36e3e12b8})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the plugin ModbusCommander ({7dda1b6d-c37e-4c9f-a696-1666f9de66e6})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({776df314-6186-4eb5-b824-f0d916f6d9c3})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ThingClass ({35d3e7dc-1f33-4b8c-baa3-eb10b4f157a7})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {72de1b08-2a27-49c5-90e0-8788c3ea1da3})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusTCPClient, Type: thing, ID: {bee8b151-815a-4159-9d8a-42b76e99b42c})</extracomment>
<translation type="unfinished"></translation>
</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="168"/>
<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="174"/>
<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="184"/>
<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="190"/>
<source>Register address</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {ed49f7d8-ab18-4c37-9b80-1004b75dcb91})</extracomment>
<translation type="unfinished"></translation>
</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="183"/>
<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="189"/>
<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="202"/>
<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="208"/>
<source>Slave address</source>
<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>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusRTUClient, Type: thing, ID: {4ea8bcdf-d4c5-45a4-a54f-f10ac3f08a78})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the ParamType (ThingClass: modbusCommander, Type: plugin, ID: {0606c221-b157-4086-885d-7e7b166540a1})</extracomment>
<translation type="unfinished"></translation>
</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="201"/>
<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="207"/>
<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="213"/>
<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="219"/>
<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="225"/>
<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="226"/>
<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="232"/>
<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="238"/>
<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="244"/>
<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="250"/>
<source>Value</source>
<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>
</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="231"/>
<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="256"/>
<source>Value changed</source>
<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>
</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>
<extracomment>The name of the EventType ({eabe2d1b-abe5-4063-adab-3cdd8500b286}) of ThingClass inputRegister</extracomment>
<translation type="unfinished"></translation>
</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="240"/>
<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="265"/>
<source>Write value</source>
<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>
</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>
<extracomment>The name of the EventType ({dbe7c801-0888-4e7f-a88b-ba342efb11b6}) of ThingClass discreteInput</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation>
</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>
<extracomment>The name of the EventType ({c772bd7f-6e51-4b28-b182-3b979c1298ce}) of ThingClass discreteInput</extracomment>
<translation type="unfinished"></translation>