Nanoleaf: auto rediscovery
This commit is contained in:
parent
e26d38e155
commit
314fa560b8
@ -52,7 +52,8 @@ void IntegrationPluginNanoleaf::discoverThings(ThingDiscoveryInfo *info)
|
|||||||
QStringList serialNumbers;
|
QStringList serialNumbers;
|
||||||
foreach (const ZeroConfServiceEntry &entry, m_zeroconfBrowser->serviceEntries()) {
|
foreach (const ZeroConfServiceEntry &entry, m_zeroconfBrowser->serviceEntries()) {
|
||||||
|
|
||||||
ThingDescriptor descriptor(lightPanelsThingClassId, entry.name(), entry.hostAddress().toString());
|
QHostAddress address = QHostAddress(entry.hostAddress().toString());
|
||||||
|
ThingDescriptor descriptor(lightPanelsThingClassId, entry.name(), address.toString());
|
||||||
ParamList params;
|
ParamList params;
|
||||||
|
|
||||||
QString serialNo;
|
QString serialNo;
|
||||||
@ -80,8 +81,6 @@ void IntegrationPluginNanoleaf::discoverThings(ThingDiscoveryInfo *info)
|
|||||||
|
|
||||||
serialNumbers.append(serialNo);
|
serialNumbers.append(serialNo);
|
||||||
qCDebug(dcNanoleaf()) << "Have device" << entry.name() << serialNo << model << firmwareVersion;
|
qCDebug(dcNanoleaf()) << "Have device" << entry.name() << serialNo << model << firmwareVersion;
|
||||||
params << Param(lightPanelsThingAddressParamTypeId, entry.hostAddress().toString());
|
|
||||||
params << Param(lightPanelsThingPortParamTypeId, entry.port());
|
|
||||||
params << Param(lightPanelsThingModelParamTypeId, model);
|
params << Param(lightPanelsThingModelParamTypeId, model);
|
||||||
params << Param(lightPanelsThingSerialNoParamTypeId, serialNo);
|
params << Param(lightPanelsThingSerialNoParamTypeId, serialNo);
|
||||||
params << Param(lightPanelsThingFirmwareVersionParamTypeId, firmwareVersion);
|
params << Param(lightPanelsThingFirmwareVersionParamTypeId, firmwareVersion);
|
||||||
@ -101,7 +100,9 @@ void IntegrationPluginNanoleaf::confirmPairing(ThingPairingInfo *info, const QSt
|
|||||||
{
|
{
|
||||||
Q_UNUSED(username)
|
Q_UNUSED(username)
|
||||||
Q_UNUSED(secret)
|
Q_UNUSED(secret)
|
||||||
Nanoleaf *nanoleaf = createNanoleafConnection(QHostAddress(info->params().paramValue(lightPanelsThingAddressParamTypeId).toString()), info->params().paramValue(lightPanelsThingPortParamTypeId).toInt());
|
QHostAddress address = getHostAddress(info->params().paramValue(lightPanelsThingSerialNoParamTypeId).toString());
|
||||||
|
uint port = getPort(info->params().paramValue(lightPanelsThingSerialNoParamTypeId).toString());
|
||||||
|
Nanoleaf *nanoleaf = createNanoleafConnection(address, port);
|
||||||
nanoleaf->addUser(); //push button pairing
|
nanoleaf->addUser(); //push button pairing
|
||||||
m_unfinishedNanoleafConnections.insert(info->thingId(), nanoleaf);
|
m_unfinishedNanoleafConnections.insert(info->thingId(), nanoleaf);
|
||||||
m_unfinishedPairing.insert(nanoleaf, info);
|
m_unfinishedPairing.insert(nanoleaf, info);
|
||||||
@ -116,6 +117,10 @@ void IntegrationPluginNanoleaf::setupThing(ThingSetupInfo *info)
|
|||||||
{
|
{
|
||||||
Thing *thing = info->thing();
|
Thing *thing = info->thing();
|
||||||
if(thing->thingClassId() == lightPanelsThingClassId) {
|
if(thing->thingClassId() == lightPanelsThingClassId) {
|
||||||
|
|
||||||
|
QString thingSerialNo = thing->paramValue(lightPanelsThingSerialNoParamTypeId).toString();
|
||||||
|
qCDebug(dcNanoleaf()) << "Setting up Nanoleaf light panel with serial number:" << thingSerialNo;
|
||||||
|
|
||||||
pluginStorage()->beginGroup(thing->id().toString());
|
pluginStorage()->beginGroup(thing->id().toString());
|
||||||
QString token = pluginStorage()->value("authToken").toString();
|
QString token = pluginStorage()->value("authToken").toString();
|
||||||
pluginStorage()->endGroup();
|
pluginStorage()->endGroup();
|
||||||
@ -128,8 +133,8 @@ void IntegrationPluginNanoleaf::setupThing(ThingSetupInfo *info)
|
|||||||
return info->finish(Thing::ThingErrorNoError);
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
} else {
|
} else {
|
||||||
// This setupDevice is called after a (re)start, with an already added thing
|
// This setupDevice is called after a (re)start, with an already added thing
|
||||||
QHostAddress address(thing->paramValue(lightPanelsThingAddressParamTypeId).toString());
|
QHostAddress address = getHostAddress(thing->paramValue(lightPanelsThingSerialNoParamTypeId).toString());
|
||||||
int port = thing->paramValue(lightPanelsThingPortParamTypeId).toInt();
|
int port = getPort(thing->paramValue(lightPanelsThingSerialNoParamTypeId).toString());
|
||||||
nanoleaf = createNanoleafConnection(address, port);
|
nanoleaf = createNanoleafConnection(address, port);
|
||||||
nanoleaf->setAuthToken(token);
|
nanoleaf->setAuthToken(token);
|
||||||
nanoleaf->getControllerInfo(); //This is just to check if the thing is available
|
nanoleaf->getControllerInfo(); //This is just to check if the thing is available
|
||||||
@ -263,6 +268,44 @@ Nanoleaf *IntegrationPluginNanoleaf::createNanoleafConnection(const QHostAddress
|
|||||||
return nanoleaf;
|
return nanoleaf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QHostAddress IntegrationPluginNanoleaf::getHostAddress(const QString &serialNumber)
|
||||||
|
{
|
||||||
|
ZeroConfServiceEntry entry;
|
||||||
|
foreach (const ZeroConfServiceEntry &e, m_zeroconfBrowser->serviceEntries()) {
|
||||||
|
QString entrySerialNo;
|
||||||
|
foreach (QString value, entry.txt()) {
|
||||||
|
if (value.contains("id=")) {
|
||||||
|
entrySerialNo = value.split("=").last();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (serialNumber == entrySerialNo) {
|
||||||
|
entry = e;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QHostAddress(entry.hostAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
uint IntegrationPluginNanoleaf::getPort(const QString &serialNumber)
|
||||||
|
{
|
||||||
|
ZeroConfServiceEntry entry;
|
||||||
|
foreach (const ZeroConfServiceEntry &e, m_zeroconfBrowser->serviceEntries()) {
|
||||||
|
QString entrySerialNo;
|
||||||
|
foreach (QString value, entry.txt()) {
|
||||||
|
if (value.contains("id=")) {
|
||||||
|
entrySerialNo = value.split("=").last();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (serialNumber == entrySerialNo) {
|
||||||
|
entry = e;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return entry.port();
|
||||||
|
}
|
||||||
|
|
||||||
void IntegrationPluginNanoleaf::onAuthTokenReceived(const QString &token)
|
void IntegrationPluginNanoleaf::onAuthTokenReceived(const QString &token)
|
||||||
{
|
{
|
||||||
Nanoleaf *nanoleaf = static_cast<Nanoleaf *>(sender());
|
Nanoleaf *nanoleaf = static_cast<Nanoleaf *>(sender());
|
||||||
|
|||||||
@ -76,6 +76,8 @@ private:
|
|||||||
QHash<QUuid, BrowserActionInfo *> m_asyncBrowserItem;
|
QHash<QUuid, BrowserActionInfo *> m_asyncBrowserItem;
|
||||||
|
|
||||||
Nanoleaf *createNanoleafConnection(const QHostAddress &address, int port);
|
Nanoleaf *createNanoleafConnection(const QHostAddress &address, int port);
|
||||||
|
QHostAddress getHostAddress(const QString &serialNumber);
|
||||||
|
uint getPort(const QString &serialNumber);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onAuthTokenReceived(const QString &token);
|
void onAuthTokenReceived(const QString &token);
|
||||||
|
|||||||
@ -17,19 +17,6 @@
|
|||||||
"setupMethod": "pushButton",
|
"setupMethod": "pushButton",
|
||||||
"browsable": true,
|
"browsable": true,
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
{
|
|
||||||
"id": "ff57079f-d5ab-4511-8a5c-0726e7b82af6",
|
|
||||||
"name": "address",
|
|
||||||
"displayName": "Address",
|
|
||||||
"type" : "QString"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ba4fd45b-990d-480a-859d-fff7ffba3ba4",
|
|
||||||
"name": "port",
|
|
||||||
"displayName": "Port",
|
|
||||||
"type" : "int",
|
|
||||||
"readOnly": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "353d3c71-0ad2-40d5-99f6-cc305e2073f1",
|
"id": "353d3c71-0ad2-40d5-99f6-cc305e2073f1",
|
||||||
"name": "model",
|
"name": "model",
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
include(../plugins.pri)
|
include(../plugins.pri)
|
||||||
|
|
||||||
TARGET = $$qtLibraryTarget(nymea_integrationpluginnanoleaf)
|
|
||||||
|
|
||||||
QT += network
|
QT += network
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user