Rework after review
Signed-off-by: Martin Lukas <martin.lukas@chargebyte.com>
This commit is contained in:
parent
f90561fb26
commit
b88935bd2f
@ -768,30 +768,30 @@ void IntegrationPluginShelly::joinMulticastGroup()
|
|||||||
{
|
{
|
||||||
if (m_coap->joinMulticastGroup()) {
|
if (m_coap->joinMulticastGroup()) {
|
||||||
qCInfo(dcShelly()) << "Joined CoIoT multicast group";
|
qCInfo(dcShelly()) << "Joined CoIoT multicast group";
|
||||||
m_multicastRetryCnt = 0;
|
m_multicastWarningPrintCount = 0;
|
||||||
} else {
|
} else {
|
||||||
uint retryTime = 0;
|
uint mod = m_multicastWarningPrintCount % 120;
|
||||||
|
|
||||||
// FIXME: It would probably be better to monitor the network interfaces and re-join if necessary
|
// FIXME: It would probably be better to monitor the network interfaces and re-join if necessary
|
||||||
if (m_multicastRetryCnt < 12) {
|
if (m_multicastWarningPrintCount < 12) {
|
||||||
qCWarning(dcShelly()) << "Failed to join CoIoT multicast group. Retrying in 5 seconds...";
|
qCWarning(dcShelly()) << "Failed to join CoIoT multicast group. Retrying in 5 seconds...";
|
||||||
retryTime = 5000;
|
|
||||||
} else {
|
|
||||||
qCWarning(dcShelly()) << "Failed to join CoIoT multicast group. Retrying in 10 minutes...";
|
|
||||||
retryTime = 600000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QTimer::singleShot(retryTime, m_coap, [this](){
|
if (m_multicastWarningPrintCount >= 12 && mod == 0) {
|
||||||
|
qCWarning(dcShelly()) << "Failed to join CoIoT multicast group. Retrying in 10 minutes...";
|
||||||
|
}
|
||||||
|
|
||||||
|
QTimer::singleShot(5000, m_coap, [this](){
|
||||||
joinMulticastGroup();
|
joinMulticastGroup();
|
||||||
});
|
});
|
||||||
m_multicastRetryCnt++;
|
m_multicastWarningPrintCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginShelly::onMulticastMessageReceived(const QHostAddress &source, const CoapPdu &pdu)
|
void IntegrationPluginShelly::onMulticastMessageReceived(const QHostAddress &source, const CoapPdu &pdu)
|
||||||
{
|
{
|
||||||
Q_UNUSED(source)
|
Q_UNUSED(source)
|
||||||
// qCDebug(dcShelly()) << "Multicast message received" << source << pdu;
|
// qCDebug(dcShelly()) << "Multicast message received" << source << pdu;
|
||||||
if (pdu.reqRspCode() != 0x1e) {
|
if (pdu.reqRspCode() != 0x1e) {
|
||||||
// Not a shelly CoIoT status message (ReqRsp code "0.30")
|
// Not a shelly CoIoT status message (ReqRsp code "0.30")
|
||||||
return;
|
return;
|
||||||
@ -1502,7 +1502,7 @@ void IntegrationPluginShelly::setupGen1(ThingSetupInfo *info)
|
|||||||
rollerShutterChild.setParams(ParamList() << Param(shellyRollerThingChannelParamTypeId, 1));
|
rollerShutterChild.setParams(ParamList() << Param(shellyRollerThingChannelParamTypeId, 1));
|
||||||
autoChilds.append(rollerShutterChild);
|
autoChilds.append(rollerShutterChild);
|
||||||
|
|
||||||
// Create 2 measurement channels for shelly 2.5 (unless in roller mode)
|
// Create 2 measurement channels for shelly 2.5 (unless in roller mode)
|
||||||
} else if (info->thing()->thingClassId() == shelly25ThingClassId) {
|
} else if (info->thing()->thingClassId() == shelly25ThingClassId) {
|
||||||
ThingDescriptor channelChild(shellyPowerMeterChannelThingClassId, info->thing()->name() + " channel 1", QString(), info->thing()->id());
|
ThingDescriptor channelChild(shellyPowerMeterChannelThingClassId, info->thing()->name() + " channel 1", QString(), info->thing()->id());
|
||||||
channelChild.setParams(ParamList() << Param(shellyPowerMeterChannelThingChannelParamTypeId, 1));
|
channelChild.setParams(ParamList() << Param(shellyPowerMeterChannelThingChannelParamTypeId, 1));
|
||||||
@ -1555,17 +1555,17 @@ void IntegrationPluginShelly::setupGen1(ThingSetupInfo *info)
|
|||||||
});
|
});
|
||||||
|
|
||||||
// For testing and debugging, introspect the coap API. Allows introspecting the coap api on the device
|
// For testing and debugging, introspect the coap API. Allows introspecting the coap api on the device
|
||||||
// url.clear();
|
// url.clear();
|
||||||
// url.setScheme("coap");
|
// url.setScheme("coap");
|
||||||
// url.setHost(address.toString());
|
// url.setHost(address.toString());
|
||||||
// url.setPath("/cit/d");
|
// url.setPath("/cit/d");
|
||||||
|
|
||||||
// CoapRequest coapRequest(url);
|
// CoapRequest coapRequest(url);
|
||||||
// CoapReply *coapReply = m_coap->get(coapRequest);
|
// CoapReply *coapReply = m_coap->get(coapRequest);
|
||||||
// qCDebug(dcShelly) << "Coap request" << url;
|
// qCDebug(dcShelly) << "Coap request" << url;
|
||||||
// connect(coapReply, &CoapReply::finished, thing, [=](){
|
// connect(coapReply, &CoapReply::finished, thing, [=](){
|
||||||
// qCDebug(dcShelly) << "Coap reply" << coapReply->error() << qUtf8Printable(QJsonDocument::fromJson(coapReply->payload()).toJson());
|
// qCDebug(dcShelly) << "Coap reply" << coapReply->error() << qUtf8Printable(QJsonDocument::fromJson(coapReply->payload()).toJson());
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
|
||||||
// Handle thing settings of gateway devices
|
// Handle thing settings of gateway devices
|
||||||
@ -1718,7 +1718,7 @@ void IntegrationPluginShelly::setupGen2(ThingSetupInfo *info)
|
|||||||
ThingDescriptor rollerShutterChild(shellyRollerThingClassId, info->thing()->name() + " connected shutter", QString(), info->thing()->id());
|
ThingDescriptor rollerShutterChild(shellyRollerThingClassId, info->thing()->name() + " connected shutter", QString(), info->thing()->id());
|
||||||
rollerShutterChild.setParams(ParamList() << Param(shellyRollerThingChannelParamTypeId, 1));
|
rollerShutterChild.setParams(ParamList() << Param(shellyRollerThingChannelParamTypeId, 1));
|
||||||
children.append(rollerShutterChild);
|
children.append(rollerShutterChild);
|
||||||
// Create 2 measurement channels for Shelly Plus 2PM (unless in roller mode)
|
// Create 2 measurement channels for Shelly Plus 2PM (unless in roller mode)
|
||||||
} else {
|
} else {
|
||||||
ThingDescriptor channelChild(shellyPowerMeterChannelThingClassId, info->thing()->name() + " channel 1", QString(), info->thing()->id());
|
ThingDescriptor channelChild(shellyPowerMeterChannelThingClassId, info->thing()->name() + " channel 1", QString(), info->thing()->id());
|
||||||
channelChild.setParams(ParamList() << Param(shellyPowerMeterChannelThingChannelParamTypeId, 1));
|
channelChild.setParams(ParamList() << Param(shellyPowerMeterChannelThingChannelParamTypeId, 1));
|
||||||
@ -2092,9 +2092,9 @@ QHostAddress IntegrationPluginShelly::getIP(Thing *thing) const
|
|||||||
bool IntegrationPluginShelly::isGen2(const QString &shellyId) const
|
bool IntegrationPluginShelly::isGen2(const QString &shellyId) const
|
||||||
{
|
{
|
||||||
return shellyId.contains("Plus", Qt::CaseInsensitive)
|
return shellyId.contains("Plus", Qt::CaseInsensitive)
|
||||||
|| shellyId.contains("Pro", Qt::CaseInsensitive)
|
|| shellyId.contains("Pro", Qt::CaseInsensitive)
|
||||||
|| QRegExp("^(ShellyPlusPlugS|ShellyPlug(US|IT|UK))-[0-9A-Z]+$", Qt::CaseInsensitive).exactMatch(shellyId) // Plus plug variants need to be matched quite precisely to not also match the v1 Plug
|
|| QRegExp("^(ShellyPlusPlugS|ShellyPlug(US|IT|UK))-[0-9A-Z]+$", Qt::CaseInsensitive).exactMatch(shellyId) // Plus plug variants need to be matched quite precisely to not also match the v1 Plug
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginShelly::handleInputEvent(Thing *thing, const QString &buttonName, const QString &inputEventString, int inputEventCount)
|
void IntegrationPluginShelly::handleInputEvent(Thing *thing, const QString &buttonName, const QString &inputEventString, int inputEventCount)
|
||||||
|
|||||||
@ -94,7 +94,7 @@ private:
|
|||||||
PluginTimer *m_reconfigureTimer = nullptr;
|
PluginTimer *m_reconfigureTimer = nullptr;
|
||||||
|
|
||||||
Coap *m_coap = nullptr;
|
Coap *m_coap = nullptr;
|
||||||
uint m_multicastRetryCnt = 0;
|
uint m_multicastWarningPrintCount = 0;
|
||||||
|
|
||||||
QHash<Thing*, ShellyJsonRpcClient*> m_rpcClients;
|
QHash<Thing*, ShellyJsonRpcClient*> m_rpcClients;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user