improbed debug output

This commit is contained in:
Boernsman 2021-01-18 13:58:19 +01:00
parent 8247e33a03
commit 6a1cf29dc9
3 changed files with 105 additions and 64 deletions

View File

@ -73,6 +73,7 @@ void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info)
ThingClassId ThingClassId = info->thingClassId();
if (ThingClassId == digitalInputThingClassId) {
qCDebug(dcUniPi()) << "Discovering digital inputs";
foreach(Thing *parent, myThings()) {
if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) {
foreach (QString circuit, m_unipi->digitalInputs()) {
@ -130,6 +131,7 @@ void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info)
}
return info->finish(Thing::ThingErrorNoError);
} else if (ThingClassId == digitalOutputThingClassId) {
qCDebug(dcUniPi()) << "Discovering digital outputs";
foreach(Thing *parent, myThings()) {
if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) {
foreach (QString circuit, m_unipi->digitalOutputs()) {
@ -187,6 +189,7 @@ void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info)
}
return info->finish(Thing::ThingErrorNoError);
} else if (ThingClassId == analogInputThingClassId) {
qCDebug(dcUniPi()) << "Discovering analog inputs";
foreach(Thing *parent, myThings()) {
if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) {
foreach (QString circuit, m_unipi->analogInputs()) {
@ -244,6 +247,7 @@ void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info)
}
return info->finish(Thing::ThingErrorNoError);
} else if (ThingClassId == analogOutputThingClassId) {
qCDebug(dcUniPi()) << "Discovering analog outputs";
foreach(Thing *parent, myThings()) {
if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) {
foreach (QString circuit, m_unipi->analogOutputs()) {
@ -301,6 +305,7 @@ void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info)
}
return info->finish(Thing::ThingErrorNoError);
} else if (ThingClassId == userLEDThingClassId) {
qCDebug(dcUniPi()) << "Discovering user LEDs";
QList<ThingDescriptor> ThingDescriptors;
foreach (NeuronExtension *neuronExtension, m_neuronExtensions) {
ThingId parentId = m_neuronExtensions.key(neuronExtension);
@ -351,8 +356,12 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
if(thing->thingClassId() == uniPi1ThingClassId
|| thing->thingClassId() == uniPi1LiteThingClassId) {
if (m_unipi)
qCDebug(dcUniPi()) << "Setting up UniPi 1 thing" << thing->name();
if (m_unipi) {
qCWarning(dcUniPi()) << "UniPi 1 already setted up, only one thing allowed";
return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("There is already a UniPi gateway in the system.")); //only one parent Thing allowed
}
if(thing->thingClassId() == uniPi1ThingClassId) {
m_unipi = new UniPi(hardwareManager()->i2cManager(), UniPi::UniPiType::UniPi1, this);
@ -371,8 +380,8 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
connect(m_unipi, &UniPi::analogInputStatusChanged, this, &IntegrationPluginUniPi::onUniPiAnalogInputStatusChanged);
connect(m_unipi, &UniPi::analogOutputStatusChanged, this, &IntegrationPluginUniPi::onUniPiAnalogOutputStatusChanged);
thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), true);
return info->finish(Thing::ThingErrorNoError);
} else if(thing->thingClassId() == neuronS103ThingClassId ||
thing->thingClassId() == neuronM103ThingClassId ||
thing->thingClassId() == neuronM203ThingClassId ||
@ -383,9 +392,12 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
thing->thingClassId() == neuronL403ThingClassId ||
thing->thingClassId() == neuronL503ThingClassId ||
thing->thingClassId() == neuronL513ThingClassId) {
qCDebug(dcUniPi()) << "Setting up Neuron thing" << thing->name();
if (!neuronDeviceInit())
if (!neuronDeviceInit()) {
qCWarning(dcUniPi()) << "Error initializing neuron thing";
return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up Neuron."));
}
Neuron *neuron;
if (thing->thingClassId() == neuronS103ThingClassId) {
@ -411,6 +423,7 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
} else if (thing->thingClassId() == neuronL513ThingClassId) {
neuron = new Neuron(Neuron::NeuronTypes::L513, m_modbusTCPMaster, this);
} else {
qCWarning(dcUniPi()) << "Neuron type not supported";
return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error unrecognized Neuron type."));
}
@ -431,8 +444,8 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
connect(neuron, &Neuron::userLEDStatusChanged, this, &IntegrationPluginUniPi::onNeuronUserLEDStatusChanged);
thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), (m_modbusTCPMaster->state() == QModbusDevice::ConnectedState));
return info->finish(Thing::ThingErrorNoError);
} else if(thing->thingClassId() == neuronXS10ThingClassId ||
thing->thingClassId() == neuronXS20ThingClassId ||
thing->thingClassId() == neuronXS30ThingClassId ||
@ -440,9 +453,11 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
thing->thingClassId() == neuronXS50ThingClassId ||
thing->thingClassId() == neuronXS11ThingClassId ||
thing->thingClassId() == neuronXS51ThingClassId) {
qCDebug(dcUniPi()) << "Setting up Neuron extension thing" << thing->name();
if (!neuronExtensionInterfaceInit())
if (!neuronExtensionInterfaceInit()) {
return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up Neuron."));
}
int slaveAddress;
NeuronExtension *neuronExtension;
@ -508,9 +523,10 @@ void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info)
void IntegrationPluginUniPi::postSetupThing(Thing *thing)
{
Q_UNUSED(thing)
qCDebug(dcUniPi()) << "Post setup" << thing->name();
if (!m_reconnectTimer) {
qCDebug(dcUniPi()) << "Creating reconnect timer";
m_reconnectTimer = new QTimer(this);
m_reconnectTimer->setSingleShot(true);
connect(m_reconnectTimer, &QTimer::timeout, this, &IntegrationPluginUniPi::onReconnectTimer);
@ -556,7 +572,7 @@ void IntegrationPluginUniPi::executeAction(ThingActionInfo *info)
}
return;
} else {
qCWarning(dcUniPi()) << "Hardware not initilized" << thing->name();
qCWarning(dcUniPi()) << "Hardware not initialized" << thing->name();
return info->finish(Thing::ThingErrorHardwareFailure);
}
} else {
@ -596,7 +612,7 @@ void IntegrationPluginUniPi::executeAction(ThingActionInfo *info)
}
return;
} else {
qCWarning(dcUniPi()) << "Hardware not initilized" << thing->name();
qCWarning(dcUniPi()) << "Hardware not initialized" << thing->name();
return info->finish(Thing::ThingErrorHardwareFailure);
}
} else {
@ -644,6 +660,7 @@ void IntegrationPluginUniPi::executeAction(ThingActionInfo *info)
void IntegrationPluginUniPi::thingRemoved(Thing *thing)
{
qCDebug(dcUniPi()) << "Deleting thing" << thing->name();
if(m_neurons.contains(thing->id())) {
Neuron *neuron = m_neurons.take(thing->id());
neuron->deleteLater();
@ -658,6 +675,7 @@ void IntegrationPluginUniPi::thingRemoved(Thing *thing)
}
if (myThings().isEmpty()) {
qCDebug(dcUniPi()) << "Stopping timers";
if (m_reconnectTimer) {
m_reconnectTimer->stop();
m_reconnectTimer->deleteLater();
@ -723,6 +741,7 @@ void IntegrationPluginUniPi::onNeuronConnectionStateChanged(bool state)
qCWarning(dcUniPi()) << "Could not find any Thing associated to Neuron obejct";
return;
}
qCDebug(dcUniPi()) << "Neuron connection state changed" << thing->name() << state;
thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), state);
}
@ -868,11 +887,14 @@ void IntegrationPluginUniPi::onNeuronExtensionConnectionStateChanged(bool state)
qCWarning(dcUniPi()) << "Could not find any Thing associated to NeuronExtension obejct";
return;
}
qCDebug(dcUniPi()) << "Neuron extension connection state changed" << thing->name() << state;
thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), state);
}
void IntegrationPluginUniPi::onRequestExecuted(const QUuid &requestId, bool success)
{
qCDebug(dcUniPi()) << "Request executed, pending requests:" << m_asyncActions.size();
if (m_asyncActions.contains(requestId)){
ThingActionInfo *info = m_asyncActions.take(requestId);
if (success){
@ -885,6 +907,7 @@ void IntegrationPluginUniPi::onRequestExecuted(const QUuid &requestId, bool succ
void IntegrationPluginUniPi::onRequestError(const QUuid &requestId, const QString &error)
{
qCDebug(dcUniPi()) << "Request error:" << error;
if (m_asyncActions.contains(requestId)){
ThingActionInfo *info = m_asyncActions.take(requestId);
info->finish(Thing::ThingErrorHardwareNotAvailable, error);
@ -910,16 +933,20 @@ void IntegrationPluginUniPi::onReconnectTimer()
{
if(m_modbusRTUMaster) {
if (!m_modbusRTUMaster->connectDevice()) {
qCWarning(dcUniPi()) << "Reconnecing to modbus RTU master failed, trying again in 10 seconds";
if (m_reconnectTimer)
qCWarning(dcUniPi()) << "Reconnecing to modbus RTU master failed";
if (m_reconnectTimer) {
qCDebug(dcUniPi()) << " - Starting reconnect timer";
m_reconnectTimer->start(10000);
}
}
}
if(m_modbusTCPMaster) {
if (!m_modbusTCPMaster->connectDevice()) {
qCWarning(dcUniPi()) << "Reconnecing to modbus TCP master failed, trying again in 10 seconds";
if (m_reconnectTimer)
if (m_reconnectTimer) {
qCDebug(dcUniPi()) << " - Starting reconnect timer";
m_reconnectTimer->start(10000);
}
}
}
}
@ -927,25 +954,29 @@ void IntegrationPluginUniPi::onReconnectTimer()
void IntegrationPluginUniPi::onModbusTCPStateChanged(QModbusDevice::State state)
{
bool connected = (state == QModbusDevice::State::ConnectedState);
qCDebug(dcUniPi()) << "Modbus TCP status changed:" << state;
if (!connected) {
//try to reconnect in 10 seconds
if (m_reconnectTimer)
if (m_reconnectTimer) {
qCDebug(dcUniPi()) << " - Starting reconnect timer";
m_reconnectTimer->start(10000);
}
}
qCDebug(dcUniPi()) << "Connection status changed:" << connected;
}
void IntegrationPluginUniPi::onModbusRTUStateChanged(QModbusDevice::State state)
{
bool connected = (state == QModbusDevice::State::ConnectedState);
qCDebug(dcUniPi()) << "Modbus RTU status changed:" << state;
if (!connected) {
//try to reconnect in 10 seconds
if (m_reconnectTimer)
if (m_reconnectTimer) {
qCDebug(dcUniPi()) << " - Starting reconnect timer";
m_reconnectTimer->start(10000);
}
}
qCDebug(dcUniPi()) << "Connection status changed:" << connected;
}
void IntegrationPluginUniPi::onUniPiDigitalInputStatusChanged(const QString &circuit, bool value)
@ -993,6 +1024,7 @@ void IntegrationPluginUniPi::onUniPiAnalogOutputStatusChanged(double value)
bool IntegrationPluginUniPi::neuronDeviceInit()
{
qCDebug(dcUniPi()) << "Neuron device init, creating Modbus TCP Master";
if(!m_modbusTCPMaster) {
int port = configValue(uniPiPluginPortParamTypeId).toInt();;
QHostAddress ipAddress = QHostAddress(configValue(uniPiPluginAddressParamTypeId).toString());
@ -1011,12 +1043,15 @@ bool IntegrationPluginUniPi::neuronDeviceInit()
m_modbusTCPMaster = nullptr;
return false;
}
} else {
qCDebug(dcUniPi()) << "Neuron Modbus TCP Master is already created";
}
return true;
}
bool IntegrationPluginUniPi::neuronExtensionInterfaceInit()
{
qCDebug(dcUniPi()) << "Neuron extension interface init, creating Modbus RTU Master";
if(!m_modbusRTUMaster) {
QString serialPort = configValue(uniPiPluginSerialPortParamTypeId).toString();
int baudrate = configValue(uniPiPluginBaudrateParamTypeId).toInt();
@ -1043,6 +1078,8 @@ bool IntegrationPluginUniPi::neuronExtensionInterfaceInit()
m_modbusRTUMaster = nullptr;
return false;
}
} else {
qCDebug(dcUniPi()) << "Neuron Extension Modbus RTU Master is already created";
}
return true;
}

View File

@ -166,6 +166,8 @@ QList<QString> Neuron::userLEDs()
bool Neuron::loadModbusMap()
{
qCDebug(dcUniPi()) << "Neuron Extension: load modbus map";
QStringList fileCoilList;
QStringList fileRegisterList;
@ -236,7 +238,7 @@ bool Neuron::loadModbusMap()
foreach(QString relativeFilePath, fileCoilList) {
QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath;
qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath;
qDebug(dcUniPi()) << "Neuron: Open CSV File:" << absoluteFilePath;
QFile *csvFile = new QFile(absoluteFilePath);
if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(dcUniPi()) << csvFile->errorString() << "Path:" << absoluteFilePath;
@ -248,7 +250,7 @@ bool Neuron::loadModbusMap()
QString line = textStream->readLine();
QStringList list = line.split(',');
if (list.length() <= 4) {
qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName();
qCWarning(dcUniPi()) << "Neuron: Currupted CSV file:" << csvFile->fileName();
csvFile->deleteLater();
return false;
}
@ -256,16 +258,16 @@ bool Neuron::loadModbusMap()
QString circuit = list[3].split(" ").last();
if (list[3].contains("Digital Input", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusDigitalInputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found input register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found input register" << circuit << list[0].toInt();
} else if (list[3].contains("Digital Output", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found output register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found output register" << circuit << list[0].toInt();
} else if (list[3].contains("Relay Output", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found relay register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found relay register" << circuit << list[0].toInt();
} else if (list[3].contains("User Programmable LED", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusUserLEDRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found user programmable led" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found user programmable led" << circuit << list[0].toInt();
}
}
}
@ -339,10 +341,10 @@ bool Neuron::loadModbusMap()
}
foreach (QString relativeFilePath, fileRegisterList) {
QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath;
qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath;
qDebug(dcUniPi()) << "Neuron: Open CSV File:" << absoluteFilePath;
QFile *csvFile = new QFile(absoluteFilePath);
if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(dcUniPi()) << csvFile->errorString() << "Path:" << absoluteFilePath;
qCWarning(dcUniPi()) << "Neuron:" << csvFile->errorString() << "Path:" << absoluteFilePath;
csvFile->deleteLater();
return false;
}
@ -351,7 +353,7 @@ bool Neuron::loadModbusMap()
QString line = textStream->readLine();
QStringList list = line.split(',');
if (list.length() <= 5) {
qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName();
qCWarning(dcUniPi()) << "Neuron: Currupted CSV file:" << csvFile->fileName();
csvFile->deleteLater();
return false;
}
@ -359,10 +361,10 @@ bool Neuron::loadModbusMap()
QString circuit = list[5].split(" ").last();
if (list[5].contains("Analog Input Value", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusAnalogInputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found analog input register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found analog input register" << circuit << list[0].toInt();
} else if (list[5].contains("Analog Output Value", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusAnalogOutputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found analog output register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "Neuron: Found analog output register" << circuit << list[0].toInt();
}
}
}
@ -403,7 +405,7 @@ bool Neuron::modbusWriteRequest(const Request &request)
}
} else {
requestExecuted(request.id, false);
qCWarning(dcUniPi()) << "Write response error:" << reply->error();
qCWarning(dcUniPi()) << "Neuron: Write response error:" << reply->error();
emit requestError(request.id, reply->errorString());
}
});
@ -413,7 +415,7 @@ bool Neuron::modbusWriteRequest(const Request &request)
return false;
}
} else {
qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString();
qCWarning(dcUniPi()) << "Neuron: Read error: " << m_modbusInterface->errorString();
return false;
}
return true;
@ -462,7 +464,7 @@ bool Neuron::modbusReadRequest(const QModbusDataUnit &request)
circuit = m_modbusUserLEDRegisters.key(modbusAddress);
emit userLEDStatusChanged(circuit, unit.value(i));
} else {
qCWarning(dcUniPi()) << "Received unrecorgnised modbus register" << modbusAddress;
qCWarning(dcUniPi()) << "Neuron: Received unrecorgnised modbus register" << modbusAddress;
}
break;
@ -471,7 +473,7 @@ bool Neuron::modbusReadRequest(const QModbusDataUnit &request)
circuit = m_modbusAnalogOutputRegisters.key(modbusAddress);
emit analogOutputStatusChanged(circuit, (unit.value(i) << 16 | unit.value(i+1)));
} else {
qCWarning(dcUniPi()) << "Received unrecognised modbus register" << modbusAddress;
qCWarning(dcUniPi()) << "Neuron: Received unrecognised modbus register" << modbusAddress;
}
break;
case QModbusDataUnit::RegisterType::InputRegisters:
@ -479,19 +481,19 @@ bool Neuron::modbusReadRequest(const QModbusDataUnit &request)
circuit = m_modbusAnalogInputRegisters.key(modbusAddress);
emit analogInputStatusChanged(circuit, (unit.value(i) << 16 | unit.value(i+1)));
} else {
qCWarning(dcUniPi()) << "Received unrecognised modbus register" << modbusAddress;
qCWarning(dcUniPi()) << "Neuron: Received unrecognised modbus register" << modbusAddress;
}
break;
case QModbusDataUnit::RegisterType::DiscreteInputs:
case QModbusDataUnit::RegisterType::Invalid:
qCWarning(dcUniPi()) << "Invalide register type";
qCWarning(dcUniPi()) << "Neuron: Invalide register type";
break;
}
}
} else if (reply->error() == QModbusDevice::ProtocolError) {
qCWarning(dcUniPi()) << "Read response error:" << reply->errorString() << reply->rawResult().exceptionCode();
qCWarning(dcUniPi()) << "Neuron: Read response error:" << reply->errorString() << reply->rawResult().exceptionCode();
} else {
qCWarning(dcUniPi()) << "Read response error:" << reply->error() << reply->errorString();
qCWarning(dcUniPi()) << "Neuron: Read response error:" << reply->error() << reply->errorString();
}
});
QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater);
@ -500,7 +502,7 @@ bool Neuron::modbusReadRequest(const QModbusDataUnit &request)
return false;
}
} else {
qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString();
qCWarning(dcUniPi()) << "Neuron: Read error: " << m_modbusInterface->errorString();
return false;
}
return true;
@ -539,7 +541,7 @@ bool Neuron::getInputRegisters(QList<int> registerList)
if (m_readRequestQueue.isEmpty()) {
modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
} else {
m_readRequestQueue.append(request);
}
@ -614,7 +616,7 @@ bool Neuron::getCoils(QList<int> registerList)
if (m_readRequestQueue.isEmpty()) {
modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
} else {
m_readRequestQueue.append(request);
}
@ -626,7 +628,7 @@ bool Neuron::getCoils(QList<int> registerList)
bool Neuron::getAllDigitalInputs()
{
if (!m_modbusInterface) {
qCWarning(dcUniPi()) << "Neuron modbus interface not initialized";
qCWarning(dcUniPi()) << "Neuron: ;Ḿodbus interface not initialized";
return false;
}
return getCoils(m_modbusDigitalInputRegisters.values());
@ -635,7 +637,7 @@ bool Neuron::getAllDigitalInputs()
bool Neuron::getAllDigitalOutputs()
{
if (!m_modbusInterface) {
qCWarning(dcUniPi()) << "Neuron modbus interface not initialized";
qCWarning(dcUniPi()) << "Neuron: Modbus interface not initialized";
return false;
}
return getCoils(m_modbusDigitalOutputRegisters.values());
@ -656,7 +658,7 @@ bool Neuron::getAllAnalogInputs()
bool Neuron::getAllAnalogOutputs()
{
if (!m_modbusInterface) {
qCWarning(dcUniPi()) << "Neuron modbus interface not initialized";
qCWarning(dcUniPi()) << "Neuron: Modbus interface not initialized";
return false;
}
foreach(QString circuit, m_modbusAnalogOutputRegisters.keys()) {
@ -668,7 +670,7 @@ bool Neuron::getAllAnalogOutputs()
bool Neuron::getDigitalInput(const QString &circuit)
{
int modbusAddress = m_modbusDigitalInputRegisters.value(circuit);
//qDebug(dcUniPi()) << "Reading digital Input" << circuit << modbusAddress;
//qDebug(dcUniPi()) << "Neuron: Reading digital Input" << circuit << modbusAddress;
if (!m_modbusInterface)
return false;
@ -677,7 +679,7 @@ bool Neuron::getDigitalInput(const QString &circuit)
if (m_readRequestQueue.isEmpty()) {
//return modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
return false;
} else {
//m_readRequestQueue.append(request); //FIXME
@ -688,7 +690,7 @@ bool Neuron::getDigitalInput(const QString &circuit)
bool Neuron::getAnalogOutput(const QString &circuit)
{
int modbusAddress = m_modbusAnalogInputRegisters.value(circuit);
qDebug(dcUniPi()) << "Reading analog Input" << circuit << modbusAddress;
qDebug(dcUniPi()) << "Neuron: Reading analog input" << circuit << modbusAddress;
if (!m_modbusInterface)
return false;
@ -709,7 +711,7 @@ bool Neuron::getAnalogOutput(const QString &circuit)
QUuid Neuron::setDigitalOutput(const QString &circuit, bool value)
{
int modbusAddress = m_modbusDigitalOutputRegisters.value(circuit);
//qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress << value;
//qDebug(dcUniPi()) << "Neuron: Setting digital ouput" << circuit << modbusAddress << value;
Request request;
request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1);
@ -739,7 +741,7 @@ bool Neuron::getDigitalOutput(const QString &circuit)
if (m_readRequestQueue.isEmpty()) {
return modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
return false;
} else {
m_readRequestQueue.append(request);
@ -751,7 +753,7 @@ bool Neuron::getDigitalOutput(const QString &circuit)
QUuid Neuron::setAnalogOutput(const QString &circuit, double value)
{
int modbusAddress = m_modbusAnalogOutputRegisters.value(circuit);
qDebug(dcUniPi()) << "Writing analog Output" << circuit << modbusAddress;
qDebug(dcUniPi()) << "Neuron: Writing analog Output" << circuit << modbusAddress;
if (!m_modbusInterface)
return "";
@ -777,7 +779,7 @@ QUuid Neuron::setAnalogOutput(const QString &circuit, double value)
bool Neuron::getAnalogInput(const QString &circuit)
{
int modbusAddress = m_modbusAnalogInputRegisters.value(circuit);
qDebug(dcUniPi()) << "Reading analog Input" << circuit << modbusAddress;
qDebug(dcUniPi()) << "Neuron: Reading analog Input" << circuit << modbusAddress;
if (!m_modbusInterface)
return false;
@ -786,7 +788,7 @@ bool Neuron::getAnalogInput(const QString &circuit)
if (m_readRequestQueue.isEmpty()) {
return modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
return false;
} else {
m_readRequestQueue.append(request);
@ -797,7 +799,7 @@ bool Neuron::getAnalogInput(const QString &circuit)
QUuid Neuron::setUserLED(const QString &circuit, bool value)
{
int modbusAddress = m_modbusUserLEDRegisters.value(circuit);
//qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress << value;
//qDebug(dcUniPi()) << "Neuron: Setting digital ouput" << circuit << modbusAddress << value;
if (!m_modbusInterface)
return "";
@ -823,7 +825,7 @@ QUuid Neuron::setUserLED(const QString &circuit, bool value)
bool Neuron::getUserLED(const QString &circuit)
{
int modbusAddress = m_modbusUserLEDRegisters.value(circuit);
//qDebug(dcUniPi()) << "Reading digital Output" << circuit << modbusAddress;
//qDebug(dcUniPi()) << "Neuron: Reading digital Output" << circuit << modbusAddress;
if (!m_modbusInterface)
return false;
@ -832,7 +834,7 @@ bool Neuron::getUserLED(const QString &circuit)
if (m_readRequestQueue.isEmpty()) {
//return modbusReadRequest(request);
} else if (m_readRequestQueue.length() > 100) {
qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests";
qCWarning(dcUniPi()) << "Neuron: Too many pending read requests";
return false;
} else {
//m_readRequestQueue.append(request);

View File

@ -164,6 +164,8 @@ QList<QString> NeuronExtension::userLEDs()
bool NeuronExtension::loadModbusMap()
{
qCDebug(dcUniPi()) << "Neuron Extension: load modbus map";
QStringList fileCoilList;
QStringList fileRegisterList;
@ -193,7 +195,7 @@ bool NeuronExtension::loadModbusMap()
foreach (QString relativeFilePath, fileCoilList) {
QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath;
qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath;
qDebug(dcUniPi()) << "Neuron Extension: Open CSV File:" << absoluteFilePath;
QFile *csvFile = new QFile(absoluteFilePath);
if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(dcUniPi()) << csvFile->errorString() << absoluteFilePath;
@ -205,7 +207,7 @@ bool NeuronExtension::loadModbusMap()
QString line = textStream->readLine();
QStringList list = line.split(',');
if (list.length() <= 4) {
qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName();
qCWarning(dcUniPi()) << "Neuron Extension: currupted CSV file:" << csvFile->fileName();
csvFile->deleteLater();
return false;
}
@ -256,7 +258,7 @@ bool NeuronExtension::loadModbusMap()
foreach (QString relativeFilePath, fileRegisterList) {
QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath;
qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath;
qDebug(dcUniPi()) << "Neuron Extension: Open CSV File:" << absoluteFilePath;
QFile *csvFile = new QFile(absoluteFilePath);
if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(dcUniPi()) << csvFile->errorString() << absoluteFilePath;
@ -268,13 +270,13 @@ bool NeuronExtension::loadModbusMap()
QString line = textStream->readLine();
QStringList list = line.split(',');
if (list.length() <= 5) {
qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName();
qCWarning(dcUniPi()) << "Neuron Extension: Currupted CSV file:" << csvFile->fileName();
csvFile->deleteLater();
return false;
}
if (list.last() == "Basic" && list[5].split(" ").length() > 3) {
if (list[5].split(" ").length() <= 3) {
qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName();
qCWarning(dcUniPi()) << "Neuron Extension: Currupted CSV file:" << csvFile->fileName();
csvFile->deleteLater();
return false;
}
@ -284,7 +286,7 @@ bool NeuronExtension::loadModbusMap()
qDebug(dcUniPi()) << "Found analog input register" << circuit << list[0].toInt();
} else if (list[5].contains("Analog Output Value", Qt::CaseSensitivity::CaseInsensitive)) {
m_modbusAnalogOutputRegisters.insert(circuit, list[0].toInt());
qDebug(dcUniPi()) << "Found analog output register" << circuit << list[0].toInt();
qDebug(dcUniPi()) << "FNeuron Extension: Found analog output register" << circuit << list[0].toInt();
}
}
}
@ -314,7 +316,7 @@ bool NeuronExtension::modbusReadRequest(const QModbusDataUnit &request)
const QModbusDataUnit unit = reply->result();
for (int i = 0; i < static_cast<int>(unit.valueCount()); i++) {
//qCDebug(dcUniPi()) << "Start Address:" << unit.startAddress() << "Register Type:" << unit.registerType() << "Value:" << unit.value(i);
//qCDebug(dcUniPi()) << "Neuron Extension: Start Address:" << unit.startAddress() << "Register Type:" << unit.registerType() << "Value:" << unit.value(i);
modbusAddress = unit.startAddress() + i;
if (m_previousModbusRegisterValue.contains(modbusAddress)) {
@ -360,15 +362,15 @@ bool NeuronExtension::modbusReadRequest(const QModbusDataUnit &request)
break;
case QModbusDataUnit::RegisterType::DiscreteInputs:
case QModbusDataUnit::RegisterType::Invalid:
qCWarning(dcUniPi()) << "Invalide register type";
qCWarning(dcUniPi()) << "Neuron Extension: Invalide register type";
break;
}
}
} else if (reply->error() == QModbusDevice::ProtocolError) {
qCWarning(dcUniPi()) << "Read response error:" << reply->errorString() << reply->rawResult().exceptionCode();
qCWarning(dcUniPi()) << "Neuron Extension: Read response error:" << reply->errorString() << reply->rawResult().exceptionCode();
} else {
qCWarning(dcUniPi()) << "Read response error:" << reply->error();
qCWarning(dcUniPi()) << "Neuron Extension: Read response error:" << reply->error();
}
});
QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater);
@ -377,7 +379,7 @@ bool NeuronExtension::modbusReadRequest(const QModbusDataUnit &request)
return false;
}
} else {
qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString();
qCWarning(dcUniPi()) << "Neuron Extension: Read error: " << m_modbusInterface->errorString();
return false;
}
return true;
@ -414,7 +416,7 @@ bool NeuronExtension::modbusWriteRequest(const Request &request)
}
} else {
requestExecuted(request.id, false);
qCWarning(dcUniPi()) << "Read response error:" << reply->error();
qCWarning(dcUniPi()) << "Neuron Extension: Read response error:" << reply->error();
emit requestError(request.id, reply->errorString());
}
});
@ -424,7 +426,7 @@ bool NeuronExtension::modbusWriteRequest(const Request &request)
return false;
}
} else {
qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString();
qCWarning(dcUniPi()) << "Neuron Extension: Read error: " << m_modbusInterface->errorString();
return false;
}
return true;