From c06539be0e05e1058231d049eeef7389fa8d8759 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 29 Dec 2022 13:12:34 +0100 Subject: [PATCH] New plugin: Notify.Events --- debian/control | 26 +++-- debian/nymea-plugin-notifyevents.install.in | 2 + notifyevents/README.md | 14 +++ .../integrationpluginnotifyevents.cpp | 107 ++++++++++++++++++ notifyevents/integrationpluginnotifyevents.h | 53 +++++++++ .../integrationpluginnotifyevents.json | 70 ++++++++++++ notifyevents/meta.json | 14 +++ notifyevents/notifyevents.png | Bin 0 -> 8354 bytes notifyevents/notifyevents.pro | 11 ++ ...eb18a-eb59-433f-9d03-cc974756fd21-en_US.ts | 55 +++++++++ nymea-plugins.pro | 1 + 11 files changed, 344 insertions(+), 9 deletions(-) create mode 100644 debian/nymea-plugin-notifyevents.install.in create mode 100644 notifyevents/README.md create mode 100644 notifyevents/integrationpluginnotifyevents.cpp create mode 100644 notifyevents/integrationpluginnotifyevents.h create mode 100644 notifyevents/integrationpluginnotifyevents.json create mode 100644 notifyevents/meta.json create mode 100644 notifyevents/notifyevents.png create mode 100644 notifyevents/notifyevents.pro create mode 100644 notifyevents/translations/9f3eb18a-eb59-433f-9d03-cc974756fd21-en_US.ts diff --git a/debian/control b/debian/control index ab8e6238..b406ce15 100644 --- a/debian/control +++ b/debian/control @@ -396,6 +396,15 @@ Description: nymea integration plugin for myStrom devices This package will add support for myStrom devices to nymea. +Package: nymea-plugin-nanoleaf +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (< 1.0.1) +Description: nymea integration plugin for nanoleaf + This package contains the nymea integration plugin for nanoleaf devices. + + Package: nymea-plugin-neatobotvac Architecture: any Depends: ${shlibs:Depends}, @@ -417,15 +426,6 @@ Description: nymea integration plugin for netatmo This package contains the nymea integration plugin for the netatmo weather station. -Package: nymea-plugin-nanoleaf -Architecture: any -Depends: ${shlibs:Depends}, - ${misc:Depends}, -Conflicts: nymea-plugins-translations (< 1.0.1) -Description: nymea integration plugin for nanoleaf - This package contains the nymea integration plugin for nanoleaf devices. - - Package: nymea-plugin-networkdetector Architecture: any Depends: ${shlibs:Depends}, @@ -436,6 +436,14 @@ Description: nymea integration plugin for networkdetector network devices via basic networking mechanisms (ARP, ICMP..). +Package: nymea-plugin-notifyevents +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for Notify.Events + This package contains the nymea integration plugin for Notify.Events. + + Package: nymea-plugin-nuki Architecture: any Depends: ${shlibs:Depends}, diff --git a/debian/nymea-plugin-notifyevents.install.in b/debian/nymea-plugin-notifyevents.install.in new file mode 100644 index 00000000..699baf1b --- /dev/null +++ b/debian/nymea-plugin-notifyevents.install.in @@ -0,0 +1,2 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginnotifyevents.so +notifyevents/translations/*qm usr/share/nymea/translations/ diff --git a/notifyevents/README.md b/notifyevents/README.md new file mode 100644 index 00000000..2ed38efc --- /dev/null +++ b/notifyevents/README.md @@ -0,0 +1,14 @@ +# Notify.Events + +This plugin allows to send messages to the Notify.Events service which in turn allows to distribute +the messages to various receivers, such as instant messengers, email, push notifications and more. + +## Requirements + +First go to Notify.Events and sign up. Create a new channel. In the channel, add a new message source and +select nymea. Copy the token. +Set up a new Notify.Events thing in nymea, providing the token for the channel. Multiple things may be set +up to send messages to different channels. + +At this point nymea can send messages to Notify.Events which will be redistributed to all receivers configured +on Notify.Events for this channel. diff --git a/notifyevents/integrationpluginnotifyevents.cpp b/notifyevents/integrationpluginnotifyevents.cpp new file mode 100644 index 00000000..312de450 --- /dev/null +++ b/notifyevents/integrationpluginnotifyevents.cpp @@ -0,0 +1,107 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2023, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "integrationpluginnotifyevents.h" +#include "plugininfo.h" + +#include + +#include +#include + +IntegrationPluginNotfyEvents::IntegrationPluginNotfyEvents(QObject* parent): IntegrationPlugin (parent) +{ +} + +IntegrationPluginNotfyEvents::~IntegrationPluginNotfyEvents() +{ + +} + +void IntegrationPluginNotfyEvents::setupThing(ThingSetupInfo *info) +{ + info->finish(Thing::ThingErrorNoError); +} + +void IntegrationPluginNotfyEvents::executeAction(ThingActionInfo *info) +{ + Thing *thing = info->thing(); + Action action = info->action(); + + qCDebug(dcNotifyEvents()) << "Executing action" << action.actionTypeId() << "for" << thing->name() << thing->id().toString(); + + QString token = thing->paramValue(notifyEventsThingTokenParamTypeId).toString(); + QString title = action.param(notifyEventsNotifyActionTitleParamTypeId).value().toString(); + QString body = action.param(notifyEventsNotifyActionBodyParamTypeId).value().toString(); + + QUrlQuery query; + query.addQueryItem("title", title); + query.addQueryItem("content", body); + query.addQueryItem("level", "info"); + query.addQueryItem("priority", "normal"); + + QString url = QString("https://notify.events/api/v1/channel/source/%1/execute").arg(token); + QNetworkRequest request((QUrl(url))); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + + qCDebug(dcNotifyEvents()) << "Sending notification" << request.url().toString() << query.toString(); + foreach (const QByteArray &headerName, request.rawHeaderList()) { + qCDebug(dcNotifyEvents()) << "Header:" << headerName << request.rawHeader(headerName); + } +// QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QJsonDocument::fromVariant(data).toJson(QJsonDocument::Compact)); + QNetworkReply *reply = hardwareManager()->networkManager()->post(request, query.toString().toUtf8()); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, info, [reply, info]{ + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcNotifyEvents()) << "Notify.Events message sending failed for" << info->thing()->name() << info->thing()->id() << reply->errorString() << reply->error(); + emit info->finish(Thing::ThingErrorHardwareNotAvailable); + return; + } + + QByteArray data = reply->readAll(); + + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcNotifyEvents()) << "Error reading reply from server for" << info->thing()->name() << info->thing()->id().toString() << error.errorString(); + qCWarning(dcNotifyEvents()) << qUtf8Printable(data); + info->finish(Thing::ThingErrorHardwareFailure); + return; + } + + QVariantMap replyMap = jsonDoc.toVariant().toMap(); + qDebug(dcNotifyEvents()) << qUtf8Printable(jsonDoc.toJson()); + + + qCDebug(dcNotifyEvents()) << "Message sent successfully"; + info->finish(Thing::ThingErrorNoError); + }); +} + diff --git a/notifyevents/integrationpluginnotifyevents.h b/notifyevents/integrationpluginnotifyevents.h new file mode 100644 index 00000000..e7ca7154 --- /dev/null +++ b/notifyevents/integrationpluginnotifyevents.h @@ -0,0 +1,53 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2023, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef INTEGRATIONPLUGINNOTIFYEVENTS_H +#define INTEGRATIONPLUGINNOTIFYEVENTS_H + +#include + +#include "extern-plugininfo.h" + +class IntegrationPluginNotfyEvents: public IntegrationPlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginnotifyevents.json") + Q_INTERFACES(IntegrationPlugin) + +public: + explicit IntegrationPluginNotfyEvents(QObject *parent = nullptr); + ~IntegrationPluginNotfyEvents() override; + + void setupThing(ThingSetupInfo *info) override; + void executeAction(ThingActionInfo *info) override; +}; + +#endif diff --git a/notifyevents/integrationpluginnotifyevents.json b/notifyevents/integrationpluginnotifyevents.json new file mode 100644 index 00000000..bf9cd14a --- /dev/null +++ b/notifyevents/integrationpluginnotifyevents.json @@ -0,0 +1,70 @@ +{ + "displayName": "Notify.Events", + "name": "notifyEvents", + "id": "9f3eb18a-eb59-433f-9d03-cc974756fd21", + "vendors": [ + { + "displayName": "Notify.Events", + "name": "notifyEvents", + "id": "6089baa5-e61a-41f0-abe1-a283c6dce316", + "thingClasses": [ + { + "id": "e9276f0b-4194-4c4f-b0c1-b696fa15e6ff", + "name": "notifyEvents", + "displayName": "Notify.Events", + "createMethods": ["user"], + "interfaces": ["notifications"], + "paramTypes": [ + { + "id": "643a76de-d5ad-43f3-a40d-7c215eea845b", + "name": "token", + "displayName": "token", + "type": "QString" + } + ], + "actionTypes": [ + { + "id": "aa3ec7aa-4490-49e0-91aa-0b0891beb316", + "name": "notify", + "displayName": "Send notification", + "paramTypes": [ + { + "id": "98135099-2236-4456-99ce-81b106381430", + "name": "title", + "displayName": "Title", + "type": "QString", + "inputType": "TextLine", + "defaultValue": "" + }, + { + "id": "394c75d3-9a9a-4da3-8729-e93be0a86813", + "name": "body", + "displayName": "Body", + "type": "QString", + "inputType": "TextArea", + "defaultValue": "" + }, + { + "id": "2b08b93a-95b7-418e-b9df-e446c3de65ae", + "name": "level", + "displayName": "Level", + "type": "QString", + "allowedValues": ["verbose", "info", "notice", "warning", "error", "success"], + "defaultValue": "info" + }, + { + "id": "5e0568bf-f9f4-4289-a69f-52153c655b25", + "name": "priority", + "displayName": "Priority", + "type": "QString", + "allowedValues": ["lowest", "low", "normal", "high", "highest"], + "defaultValue": "normal" + } + ] + } + ] + } + ] + } + ] +} diff --git a/notifyevents/meta.json b/notifyevents/meta.json new file mode 100644 index 00000000..50f2d0e3 --- /dev/null +++ b/notifyevents/meta.json @@ -0,0 +1,14 @@ +{ + "title": "Notfiy.Events", + "tagline": "Send notifictions via Notify.Events.", + "icon": "notifyevents.png", + "stability": "consumer", + "offline": false, + "technologies": [ + "cloud" + ], + "categories": [ + "online-service", + "notification" + ] +} diff --git a/notifyevents/notifyevents.png b/notifyevents/notifyevents.png new file mode 100644 index 0000000000000000000000000000000000000000..daf682f6429fdcb6eeeba418c352a977274c22b0 GIT binary patch literal 8354 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 s>{*^*y7P?xhIOQ + + + + notifyEvents + + + Body + The name of the ParamType (ThingClass: notifyEvents, ActionType: notify, ID: {394c75d3-9a9a-4da3-8729-e93be0a86813}) + + + + + Level + The name of the ParamType (ThingClass: notifyEvents, ActionType: notify, ID: {2b08b93a-95b7-418e-b9df-e446c3de65ae}) + + + + + + + Notify.Events + The name of the ThingClass ({e9276f0b-4194-4c4f-b0c1-b696fa15e6ff}) +---------- +The name of the vendor ({6089baa5-e61a-41f0-abe1-a283c6dce316}) +---------- +The name of the plugin notifyEvents ({9f3eb18a-eb59-433f-9d03-cc974756fd21}) + + + + + Priority + The name of the ParamType (ThingClass: notifyEvents, ActionType: notify, ID: {5e0568bf-f9f4-4289-a69f-52153c655b25}) + + + + + Send notification + The name of the ActionType ({aa3ec7aa-4490-49e0-91aa-0b0891beb316}) of ThingClass notifyEvents + + + + + Title + The name of the ParamType (ThingClass: notifyEvents, ActionType: notify, ID: {98135099-2236-4456-99ce-81b106381430}) + + + + + token + The name of the ParamType (ThingClass: notifyEvents, Type: thing, ID: {643a76de-d5ad-43f3-a40d-7c215eea845b}) + + + + diff --git a/nymea-plugins.pro b/nymea-plugins.pro index b2b754f8..94ca9d1e 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -45,6 +45,7 @@ PLUGIN_DIRS = \ nanoleaf \ netatmo \ networkdetector \ + notifyevents \ nuki \ mcp3008 \ onewire \