Wattsonic: Add modbus slave ID as discovery parameter
parent
36f9f3c512
commit
be428a5709
|
|
@ -76,7 +76,8 @@ void IntegrationPluginWattsonic::discoverThings(ThingDiscoveryInfo *info)
|
|||
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
});
|
||||
discovery->startDiscovery();
|
||||
|
||||
discovery->startDiscovery(info->params().paramValue(inverterDiscoverySlaveAddressParamTypeId).toUInt());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,13 +14,22 @@
|
|||
"id": "688bef8d-2ba8-4eb3-b30e-16193eba02fb",
|
||||
"createMethods": ["discovery", "user"],
|
||||
"interfaces": ["solarinverter", "connectable"],
|
||||
"discoveryParamTypes": [
|
||||
{
|
||||
"id": "a4e58882-d26a-43ee-813f-11c6ca74ee6d",
|
||||
"name": "slaveAddress",
|
||||
"displayName": "Modbus slave address",
|
||||
"type": "uint",
|
||||
"defaultValue": 247
|
||||
}
|
||||
],
|
||||
"paramTypes": [
|
||||
{
|
||||
"id": "55a7d9ed-5f4f-41a2-8dc1-c6a5a79512d2",
|
||||
"name": "slaveAddress",
|
||||
"displayName": "Modbus slave address",
|
||||
"type": "uint",
|
||||
"defaultValue": 1
|
||||
"defaultValue": 247
|
||||
},
|
||||
{
|
||||
"id": "4f1238b5-07e0-4516-b84a-71670141ef81",
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@
|
|||
|
||||
#include <modbusdatautils.h>
|
||||
|
||||
QList<int> slaveIdCandidates = {247};
|
||||
|
||||
WattsonicDiscovery::WattsonicDiscovery(ModbusRtuHardwareResource *modbusRtuResource, QObject *parent):
|
||||
QObject{parent},
|
||||
m_modbusRtuResource(modbusRtuResource)
|
||||
|
|
@ -42,7 +40,7 @@ WattsonicDiscovery::WattsonicDiscovery(ModbusRtuHardwareResource *modbusRtuResou
|
|||
|
||||
}
|
||||
|
||||
void WattsonicDiscovery::startDiscovery()
|
||||
void WattsonicDiscovery::startDiscovery(quint16 slaveId)
|
||||
{
|
||||
qCInfo(dcWattsonic()) << "Discovery: Searching for Wattsonic device on modbus RTU...";
|
||||
|
||||
|
|
@ -54,16 +52,16 @@ void WattsonicDiscovery::startDiscovery()
|
|||
}
|
||||
|
||||
if (candidateMasters.isEmpty()) {
|
||||
qCWarning(dcWattsonic()) << "No usable modbus RTU master found.";
|
||||
qCWarning(dcWattsonic()) << "Discovery: No usable modbus RTU master found.";
|
||||
emit discoveryFinished(false);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (ModbusRtuMaster *master, candidateMasters) {
|
||||
if (master->connected()) {
|
||||
tryConnect(master, 0);
|
||||
tryConnect(master, slaveId);
|
||||
} else {
|
||||
qCWarning(dcWattsonic()) << "Modbus RTU master" << master->modbusUuid().toString() << "is not connected.";
|
||||
qCWarning(dcWattsonic()) << "Discovery: Modbus RTU master" << master->modbusUuid().toString() << "is not connected.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -73,28 +71,21 @@ QList<WattsonicDiscovery::Result> WattsonicDiscovery::discoveryResults() const
|
|||
return m_discoveryResults;
|
||||
}
|
||||
|
||||
void WattsonicDiscovery::tryConnect(ModbusRtuMaster *master, quint16 slaveIdIndex)
|
||||
void WattsonicDiscovery::tryConnect(ModbusRtuMaster *master, quint16 slaveId)
|
||||
{
|
||||
quint8 slaveId = slaveIdCandidates.at(slaveIdIndex);
|
||||
qCDebug(dcWattsonic()) << "Scanning modbus RTU master" << master->modbusUuid() << "Slave ID:" << slaveId;
|
||||
qCDebug(dcWattsonic()) << "Discovery: Scanning modbus RTU master" << master->modbusUuid() << "Slave ID:" << slaveId;
|
||||
|
||||
ModbusRtuReply *reply = master->readHoldingRegister(slaveId, 10000, 8);
|
||||
connect(reply, &ModbusRtuReply::finished, this, [=](){
|
||||
connect(reply, &ModbusRtuReply::finished, this, [this, master, reply, slaveId](){
|
||||
|
||||
if (reply->error() == ModbusRtuReply::NoError) {
|
||||
|
||||
QString serialNumber = ModbusDataUtils::convertToString(reply->result(), ModbusDataUtils::ByteOrderBigEndian);
|
||||
qCDebug(dcWattsonic()) << "Test reply finished!" << reply->error() << reply->result() << serialNumber;
|
||||
qCDebug(dcWattsonic()) << "Discovery: Test reply finished!" << reply->error() << reply->result() << serialNumber;
|
||||
|
||||
Result result {master->modbusUuid(), serialNumber, slaveId};
|
||||
m_discoveryResults.append(result);
|
||||
|
||||
}
|
||||
|
||||
if (slaveIdIndex < slaveIdCandidates.count() - 1) {
|
||||
tryConnect(master, slaveIdIndex+1);
|
||||
} else {
|
||||
emit discoveryFinished(true);
|
||||
}
|
||||
emit discoveryFinished(true);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public:
|
|||
quint16 slaveId;
|
||||
};
|
||||
|
||||
void startDiscovery();
|
||||
void startDiscovery(quint16 slaveId);
|
||||
|
||||
QList<Result> discoveryResults() const;
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ signals:
|
|||
void discoveryFinished(bool modbusRtuMasterAvailable);
|
||||
|
||||
private slots:
|
||||
void tryConnect(ModbusRtuMaster *master, quint16 slaveIdIndex);
|
||||
void tryConnect(ModbusRtuMaster *master, quint16 slaveId);
|
||||
|
||||
private:
|
||||
ModbusRtuHardwareResource *m_modbusRtuResource = nullptr;
|
||||
|
|
|
|||
Loading…
Reference in New Issue