Rename Package to packet and fix connections
This commit is contained in:
parent
c8bf9dd471
commit
b6e9d7a1a1
@ -257,11 +257,11 @@ void IntegrationPluginSma::setupThing(ThingSetupInfo *info)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(meter, &SpeedwireMeter::reachableChanged, this, [=](bool reachable){
|
connect(meter, &SpeedwireMeter::reachableChanged, thing, [=](bool reachable){
|
||||||
thing->setStateValue(speedwireMeterConnectedStateTypeId, reachable);
|
thing->setStateValue(speedwireMeterConnectedStateTypeId, reachable);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(meter, &SpeedwireMeter::valuesUpdated, this, [=](){
|
connect(meter, &SpeedwireMeter::valuesUpdated, thing, [=](){
|
||||||
thing->setStateValue(speedwireMeterConnectedStateTypeId, true);
|
thing->setStateValue(speedwireMeterConnectedStateTypeId, true);
|
||||||
thing->setStateValue(speedwireMeterCurrentPowerStateTypeId, meter->currentPower());
|
thing->setStateValue(speedwireMeterCurrentPowerStateTypeId, meter->currentPower());
|
||||||
thing->setStateValue(speedwireMeterCurrentPowerPhaseAStateTypeId, meter->currentPowerPhaseA());
|
thing->setStateValue(speedwireMeterCurrentPowerPhaseAStateTypeId, meter->currentPowerPhaseA());
|
||||||
@ -331,11 +331,11 @@ void IntegrationPluginSma::setupThing(ThingSetupInfo *info)
|
|||||||
|
|
||||||
|
|
||||||
// Runtime connections
|
// Runtime connections
|
||||||
connect(inverter, &SpeedwireInverter::reachableChanged, this, [=](bool reachable){
|
connect(inverter, &SpeedwireInverter::reachableChanged, thing, [=](bool reachable){
|
||||||
thing->setStateValue(speedwireInverterConnectedStateTypeId, reachable);
|
thing->setStateValue(speedwireInverterConnectedStateTypeId, reachable);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(inverter, &SpeedwireInverter::valuesUpdated, this, [=](){
|
connect(inverter, &SpeedwireInverter::valuesUpdated, thing, [=](){
|
||||||
thing->setStateValue(speedwireInverterTotalEnergyProducedStateTypeId, inverter->totalEnergyProduced());
|
thing->setStateValue(speedwireInverterTotalEnergyProducedStateTypeId, inverter->totalEnergyProduced());
|
||||||
thing->setStateValue(speedwireInverterEnergyProducedTodayStateTypeId, inverter->todayEnergyProduced());
|
thing->setStateValue(speedwireInverterEnergyProducedTodayStateTypeId, inverter->todayEnergyProduced());
|
||||||
thing->setStateValue(speedwireInverterCurrentPowerStateTypeId, -inverter->totalAcPower());
|
thing->setStateValue(speedwireInverterCurrentPowerStateTypeId, -inverter->totalAcPower());
|
||||||
|
|||||||
@ -95,7 +95,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct InverterPackage {
|
typedef struct InverterPacket {
|
||||||
quint8 wordCount = 0;
|
quint8 wordCount = 0;
|
||||||
quint8 control = 0;
|
quint8 control = 0;
|
||||||
quint16 destinationModelId = 0;
|
quint16 destinationModelId = 0;
|
||||||
@ -108,7 +108,7 @@ public:
|
|||||||
quint16 fragmentId = 0;
|
quint16 fragmentId = 0;
|
||||||
quint16 packetId = 0;
|
quint16 packetId = 0;
|
||||||
quint32 command = 0;
|
quint32 command = 0;
|
||||||
} InverterPackage;
|
} InverterPacket;
|
||||||
|
|
||||||
Speedwire() = default;
|
Speedwire() = default;
|
||||||
|
|
||||||
@ -259,23 +259,23 @@ public:
|
|||||||
return header;
|
return header;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Speedwire::InverterPackage parseInverterPackage(QDataStream &stream) {
|
static Speedwire::InverterPacket parseInverterPacket(QDataStream &stream) {
|
||||||
// Make sure the data stream is little endian
|
// Make sure the data stream is little endian
|
||||||
stream.setByteOrder(QDataStream::LittleEndian);
|
stream.setByteOrder(QDataStream::LittleEndian);
|
||||||
InverterPackage package;
|
InverterPacket packet;
|
||||||
stream >> package.wordCount;
|
stream >> packet.wordCount;
|
||||||
stream >> package.control;
|
stream >> packet.control;
|
||||||
stream >> package.destinationModelId;
|
stream >> packet.destinationModelId;
|
||||||
stream >> package.destinationSerialNumber;
|
stream >> packet.destinationSerialNumber;
|
||||||
stream >> package.destinationControl;
|
stream >> packet.destinationControl;
|
||||||
stream >> package.sourceModelId;
|
stream >> packet.sourceModelId;
|
||||||
stream >> package.sourceSerialNumber;
|
stream >> packet.sourceSerialNumber;
|
||||||
stream >> package.sourceControl;
|
stream >> packet.sourceControl;
|
||||||
stream >> package.errorCode;
|
stream >> packet.errorCode;
|
||||||
stream >> package.fragmentId;
|
stream >> packet.fragmentId;
|
||||||
stream >> package.packetId;
|
stream >> packet.packetId;
|
||||||
stream >> package.command;
|
stream >> packet.command;
|
||||||
return package;
|
return packet;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -285,14 +285,14 @@ inline QDebug operator<<(QDebug debug, const Speedwire::Header &header)
|
|||||||
return debug.maybeSpace();
|
return debug.maybeSpace();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline QDebug operator<<(QDebug debug, const Speedwire::InverterPackage &package)
|
inline QDebug operator<<(QDebug debug, const Speedwire::InverterPacket &packet)
|
||||||
{
|
{
|
||||||
debug.nospace() << "InverterPackage(" << package.sourceSerialNumber;
|
debug.nospace() << "InverterPacket(" << packet.sourceSerialNumber;
|
||||||
debug.nospace() << ", Model ID: " << package.sourceModelId;
|
debug.nospace() << ", Model ID: " << packet.sourceModelId;
|
||||||
debug.nospace() << ", command: " << package.command;
|
debug.nospace() << ", command: " << packet.command;
|
||||||
debug.nospace() << ", error: " << package.errorCode;
|
debug.nospace() << ", error: " << packet.errorCode;
|
||||||
debug.nospace() << ", fragment: " << package.fragmentId;
|
debug.nospace() << ", fragment: " << packet.fragmentId;
|
||||||
debug.nospace() << ", package ID: " << package.fragmentId;
|
debug.nospace() << ", packet ID: " << packet.fragmentId;
|
||||||
debug.nospace() << ")";
|
debug.nospace() << ")";
|
||||||
return debug.maybeSpace();
|
return debug.maybeSpace();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -294,9 +294,9 @@ void SpeedwireDiscovery::processDatagram(const QHostAddress &senderAddress, quin
|
|||||||
m_results[senderAddress].modelId = modelId;
|
m_results[senderAddress].modelId = modelId;
|
||||||
m_results[senderAddress].serialNumber = serialNumber;
|
m_results[senderAddress].serialNumber = serialNumber;
|
||||||
} else if (header.protocolId == Speedwire::ProtocolIdInverter) {
|
} else if (header.protocolId == Speedwire::ProtocolIdInverter) {
|
||||||
Speedwire::InverterPackage inverterPackage = Speedwire::parseInverterPackage(stream);
|
Speedwire::InverterPacket inverterPacket = Speedwire::parseInverterPacket(stream);
|
||||||
// Response from inverter 534d4100 0004 02a0 0000 0001 004e 0010 6065 1390 7d00 52be283a 0000 b500 c2c12e12 0000 0000 00000 1800102000000000000000000000003000000ff0000ecd5ff1f0100b500c2c12e1200000a000c00000000000000030000000101000000000000
|
// Response from inverter 534d4100 0004 02a0 0000 0001 004e 0010 6065 1390 7d00 52be283a 0000 b500 c2c12e12 0000 0000 00000 1800102000000000000000000000003000000ff0000ecd5ff1f0100b500c2c12e1200000a000c00000000000000030000000101000000000000
|
||||||
qCDebug(dcSma()) << "SpeedwireDiscovery:" << inverterPackage;
|
qCDebug(dcSma()) << "SpeedwireDiscovery:" << inverterPacket;
|
||||||
|
|
||||||
if (!m_results.contains(senderAddress)) {
|
if (!m_results.contains(senderAddress)) {
|
||||||
SpeedwireDiscoveryResult result;
|
SpeedwireDiscoveryResult result;
|
||||||
@ -309,8 +309,8 @@ void SpeedwireDiscovery::processDatagram(const QHostAddress &senderAddress, quin
|
|||||||
m_results[senderAddress].networkDeviceInfo = m_networkDeviceInfos.get(senderAddress);
|
m_results[senderAddress].networkDeviceInfo = m_networkDeviceInfos.get(senderAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_results[senderAddress].modelId = inverterPackage.sourceModelId;
|
m_results[senderAddress].modelId = inverterPacket.sourceModelId;
|
||||||
m_results[senderAddress].serialNumber = inverterPackage.sourceSerialNumber;
|
m_results[senderAddress].serialNumber = inverterPacket.sourceSerialNumber;
|
||||||
} else {
|
} else {
|
||||||
qCWarning(dcSma()) << "SpeedwireDiscovery: Unhandled data received" << datagram.toHex();
|
qCWarning(dcSma()) << "SpeedwireDiscovery: Unhandled data received" << datagram.toHex();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -177,7 +177,7 @@ SpeedwireInverterReply *SpeedwireInverter::sendLoginRequest(const QString &passw
|
|||||||
Speedwire::Command command = Speedwire::CommandLogin;
|
Speedwire::Command command = Speedwire::CommandLogin;
|
||||||
|
|
||||||
// The payload is little endian encoded
|
// The payload is little endian encoded
|
||||||
buildPackage(stream, command, packetId);
|
buildPacket(stream, command, packetId);
|
||||||
|
|
||||||
// User type: 7 = user, a = installer
|
// User type: 7 = user, a = installer
|
||||||
stream << (loginAsUser ? static_cast<quint32>(0x00000007) : static_cast<quint32>(0x0000000a));
|
stream << (loginAsUser ? static_cast<quint32>(0x00000007) : static_cast<quint32>(0x0000000a));
|
||||||
@ -279,7 +279,7 @@ SpeedwireInverterReply *SpeedwireInverter::sendSoftwareVersionRequest()
|
|||||||
Speedwire::Command command = Speedwire::CommandQueryDevice;
|
Speedwire::Command command = Speedwire::CommandQueryDevice;
|
||||||
|
|
||||||
// The payload is little endian encoded
|
// The payload is little endian encoded
|
||||||
buildPackage(stream, command, packetId);
|
buildPacket(stream, command, packetId);
|
||||||
|
|
||||||
// First and last word
|
// First and last word
|
||||||
stream << static_cast<quint32>(0x00823400);
|
stream << static_cast<quint32>(0x00823400);
|
||||||
@ -309,7 +309,7 @@ SpeedwireInverterReply *SpeedwireInverter::sendDeviceTypeRequest()
|
|||||||
Speedwire::Command command = Speedwire::CommandQueryDevice;
|
Speedwire::Command command = Speedwire::CommandQueryDevice;
|
||||||
|
|
||||||
// The payload is little endian encoded
|
// The payload is little endian encoded
|
||||||
buildPackage(stream, command, packetId);
|
buildPacket(stream, command, packetId);
|
||||||
|
|
||||||
// 2 words
|
// 2 words
|
||||||
stream << static_cast<quint32>(0x00821e00);
|
stream << static_cast<quint32>(0x00821e00);
|
||||||
@ -354,7 +354,7 @@ void SpeedwireInverter::sendNextReply()
|
|||||||
|
|
||||||
// Pick the next reply and send request
|
// Pick the next reply and send request
|
||||||
m_currentReply = m_replyQueue.dequeue();
|
m_currentReply = m_replyQueue.dequeue();
|
||||||
qCDebug(dcSma()) << "Inverter: --> Sending" << m_currentReply->request().command() << "package ID:" << m_currentReply->request().packetId();
|
qCDebug(dcSma()) << "Inverter: --> Sending" << m_currentReply->request().command() << "packet ID:" << m_currentReply->request().packetId();
|
||||||
m_interface->sendData(m_currentReply->request().requestData());
|
m_interface->sendData(m_currentReply->request().requestData());
|
||||||
m_currentReply->startWaiting();
|
m_currentReply->startWaiting();
|
||||||
}
|
}
|
||||||
@ -403,9 +403,9 @@ void SpeedwireInverter::buildDefaultHeader(QDataStream &stream, quint16 payloadS
|
|||||||
stream << control;
|
stream << control;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpeedwireInverter::buildPackage(QDataStream &stream, quint32 command, quint16 packetId)
|
void SpeedwireInverter::buildPacket(QDataStream &stream, quint32 command, quint16 packetId)
|
||||||
{
|
{
|
||||||
// ========= package header (little endian)
|
// ========= packet header (little endian)
|
||||||
// == 7a01842a71b30001
|
// == 7a01842a71b30001
|
||||||
|
|
||||||
// 7a01 : destination model id
|
// 7a01 : destination model id
|
||||||
@ -492,7 +492,7 @@ SpeedwireInverterReply *SpeedwireInverter::sendQueryRequest(Speedwire::Command c
|
|||||||
quint16 packetId = m_packetId++ | 0x8000;
|
quint16 packetId = m_packetId++ | 0x8000;
|
||||||
|
|
||||||
// The payload is little endian encoded
|
// The payload is little endian encoded
|
||||||
buildPackage(stream, command, packetId);
|
buildPacket(stream, command, packetId);
|
||||||
|
|
||||||
// First and second word
|
// First and second word
|
||||||
stream << firstWord;
|
stream << firstWord;
|
||||||
@ -995,19 +995,19 @@ void SpeedwireInverter::processData(const QByteArray &data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Speedwire::InverterPackage package = Speedwire::parseInverterPackage(stream);
|
Speedwire::InverterPacket packet = Speedwire::parseInverterPacket(stream);
|
||||||
if (package.sourceModelId != m_modelId || package.sourceSerialNumber != m_serialNumber) {
|
if (packet.sourceModelId != m_modelId || packet.sourceSerialNumber != m_serialNumber) {
|
||||||
qCWarning(dcSma()) << "Inverter: Received datagram from different inverter" << package.sourceSerialNumber << "Ignoring data...";
|
qCWarning(dcSma()) << "Inverter: Received datagram from different inverter" << packet.sourceSerialNumber << "Ignoring data...";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(dcSma()) << "Inverter: <-- Received" << static_cast<Speedwire::Command>(package.command) << "Packet ID:" << package.packetId;
|
qCDebug(dcSma()) << "Inverter: <-- Received" << static_cast<Speedwire::Command>(packet.command) << "Packet ID:" << packet.packetId;
|
||||||
//qCDebug(dcSma()) << "Inverter:" << data.toHex();
|
//qCDebug(dcSma()) << "Inverter:" << data.toHex();
|
||||||
if (m_currentReply && m_currentReply->request().packetId() == package.packetId) {
|
if (m_currentReply && m_currentReply->request().packetId() == packet.packetId) {
|
||||||
qCDebug(dcSma()) << "Inverter: Received response for current reply" << static_cast<Speedwire::Command>(m_currentReply->request().command()) << "Packet ID:" << m_currentReply->request().packetId();
|
qCDebug(dcSma()) << "Inverter: Received response for current reply" << static_cast<Speedwire::Command>(m_currentReply->request().command()) << "Packet ID:" << m_currentReply->request().packetId();
|
||||||
m_currentReply->m_responseData = data;
|
m_currentReply->m_responseData = data;
|
||||||
m_currentReply->m_responseHeader = header;
|
m_currentReply->m_responseHeader = header;
|
||||||
m_currentReply->m_responsePackage = package;
|
m_currentReply->m_responsePacket = packet;
|
||||||
// Set the payload
|
// Set the payload
|
||||||
while (!stream.atEnd()) {
|
while (!stream.atEnd()) {
|
||||||
quint8 byte;
|
quint8 byte;
|
||||||
@ -1015,7 +1015,7 @@ void SpeedwireInverter::processData(const QByteArray &data)
|
|||||||
m_currentReply->m_responsePayload.append(byte);
|
m_currentReply->m_responsePayload.append(byte);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (package.errorCode != 0) {
|
if (packet.errorCode != 0) {
|
||||||
m_currentReply->finishReply(SpeedwireInverterReply::ErrorInverterError);
|
m_currentReply->finishReply(SpeedwireInverterReply::ErrorInverterError);
|
||||||
} else {
|
} else {
|
||||||
m_currentReply->finishReply(SpeedwireInverterReply::ErrorNoError);
|
m_currentReply->finishReply(SpeedwireInverterReply::ErrorNoError);
|
||||||
@ -1027,7 +1027,7 @@ void SpeedwireInverter::processData(const QByteArray &data)
|
|||||||
qCWarning(dcSma()) << "Inverter: Received unexpected data: not waiting for any response.";
|
qCWarning(dcSma()) << "Inverter: Received unexpected data: not waiting for any response.";
|
||||||
}
|
}
|
||||||
qCWarning(dcSma()) << "Inverter:" << header;
|
qCWarning(dcSma()) << "Inverter:" << header;
|
||||||
qCWarning(dcSma()) << "Inverter:" << package;
|
qCWarning(dcSma()) << "Inverter:" << packet;
|
||||||
qCWarning(dcSma()) << "Inverter:" << data.toHex();
|
qCWarning(dcSma()) << "Inverter:" << data.toHex();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -169,7 +169,7 @@ private:
|
|||||||
|
|
||||||
// Request builder function
|
// Request builder function
|
||||||
void buildDefaultHeader(QDataStream &stream, quint16 payloadSize = 38, quint8 control = 0xa0);
|
void buildDefaultHeader(QDataStream &stream, quint16 payloadSize = 38, quint8 control = 0xa0);
|
||||||
void buildPackage(QDataStream &stream, quint32 command, quint16 packetId);
|
void buildPacket(QDataStream &stream, quint32 command, quint16 packetId);
|
||||||
|
|
||||||
// Send generic request for internal use
|
// Send generic request for internal use
|
||||||
SpeedwireInverterReply *sendQueryRequest(Speedwire::Command command, quint32 firstWord, quint32 secondWord);
|
SpeedwireInverterReply *sendQueryRequest(Speedwire::Command command, quint32 firstWord, quint32 secondWord);
|
||||||
|
|||||||
@ -62,9 +62,9 @@ Speedwire::Header SpeedwireInverterReply::responseHeader() const
|
|||||||
return m_responseHeader;
|
return m_responseHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
Speedwire::InverterPackage SpeedwireInverterReply::responsePackage() const
|
Speedwire::InverterPacket SpeedwireInverterReply::responsePacket() const
|
||||||
{
|
{
|
||||||
return m_responsePackage;
|
return m_responsePacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SpeedwireInverterReply::responsePayload() const
|
QByteArray SpeedwireInverterReply::responsePayload() const
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public:
|
|||||||
// Response
|
// Response
|
||||||
QByteArray responseData() const;
|
QByteArray responseData() const;
|
||||||
Speedwire::Header responseHeader() const;
|
Speedwire::Header responseHeader() const;
|
||||||
Speedwire::InverterPackage responsePackage() const;
|
Speedwire::InverterPacket responsePacket() const;
|
||||||
QByteArray responsePayload() const;
|
QByteArray responsePayload() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -77,7 +77,7 @@ private:
|
|||||||
|
|
||||||
QByteArray m_responseData;
|
QByteArray m_responseData;
|
||||||
Speedwire::Header m_responseHeader;
|
Speedwire::Header m_responseHeader;
|
||||||
Speedwire::InverterPackage m_responsePackage;
|
Speedwire::InverterPacket m_responsePacket;
|
||||||
QByteArray m_responsePayload;
|
QByteArray m_responsePayload;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user