Rename Package to packet and fix connections

This commit is contained in:
Simon Stürz 2022-02-21 09:36:07 +01:00
parent c8bf9dd471
commit b6e9d7a1a1
7 changed files with 52 additions and 52 deletions

View File

@ -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());

View File

@ -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();
} }

View File

@ -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;

View File

@ -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();
} }
} }

View File

@ -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);

View File

@ -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

View File

@ -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;