diff --git a/debian/control b/debian/control index fc72d49f..8f1bb314 100644 --- a/debian/control +++ b/debian/control @@ -467,6 +467,21 @@ Description: nymea.io plugin for plantcare This package will install the nymea.io plugin for plantcare +Package: nymea-plugin-pushbullet +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Replaces: guh-plugin-pushbullet +Description: nymea.io plugin for Pushbullet + The nymea daemon is a plugin based IoT (Internet of Things) server. The + server works like a translator for devices, things and services and + allows them to interact. + With the powerful rule engine you are able to connect any device available + in the system and create individual scenes and behaviors for your environment. + . + This package will install the nymea.io plugin for sending messages via Pushbullet. + Package: nymea-plugin-tasmota Architecture: any @@ -750,6 +765,7 @@ Depends: nymea-plugin-awattar, nymea-plugin-networkdetector, nymea-plugin-openweathermap, nymea-plugin-philipshue, + nymea-plugin-pushbullet, nymea-plugin-wakeonlan, nymea-plugin-tasmota, nymea-plugin-wemo, diff --git a/debian/nymea-plugin-pushbullet.install.in b/debian/nymea-plugin-pushbullet.install.in new file mode 100644 index 00000000..741aa970 --- /dev/null +++ b/debian/nymea-plugin-pushbullet.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginpushbullet.so diff --git a/nymea-plugins.pro b/nymea-plugins.pro index 88d46e97..a5064a48 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -32,6 +32,7 @@ PLUGIN_DIRS = \ osdomotics \ philipshue \ plantcare \ + pushbullet \ remotessh \ senic \ serialportcommander \ diff --git a/pushbullet/devicepluginpushbullet.cpp b/pushbullet/devicepluginpushbullet.cpp new file mode 100644 index 00000000..52e1b3c5 --- /dev/null +++ b/pushbullet/devicepluginpushbullet.cpp @@ -0,0 +1,149 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*! + \page pushbullet.html + \title Pushbullet + \brief Plugin to send notifications via Pushbullet. + + \ingroup plugins + \ingroup nymea-plugins + + This plugin allows to send notifications via Pushbullet. + + \chapter Usage + + When setting up a device for the pushbullet service, an API token from Pushbullet is required. Please visit + https://www.pushbullet.com and create an account if you haven't done so already. After logging in successfully, + open the "Settings" tab and in "Account Settings", create a new access token. Use that token as the device + parameter when setting up the device. +*/ + +#include "devicepluginpushbullet.h" +#include "plugininfo.h" + +#include "network/networkaccessmanager.h" + +#include + +DevicePluginPushbullet::DevicePluginPushbullet(QObject* parent): DevicePlugin (parent) +{ + +} + +DevicePluginPushbullet::~DevicePluginPushbullet() +{ + +} + +DeviceManager::DeviceSetupStatus DevicePluginPushbullet::setupDevice(Device *device) +{ + qCDebug(dcPushbullet()) << "Setting up Pushbullet device" << device->name() << device->id().toString(); + + QNetworkRequest request(QUrl("https://api.pushbullet.com/v2/users/me")); + request.setRawHeader("Access-Token", device->paramValue(pushNotificationDeviceTokenParamTypeId).toByteArray().trimmed()); + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, device, [this, reply, device]() { + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcPushbullet()) << "Error fetching user profile:" << reply->errorString() << reply->error(); + emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure); + return; + } + + QByteArray data = reply->readAll(); + + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcPushbullet()) << "Error parsing reply from Pushbullet:" << error.errorString(); + qCWarning(dcPushbullet()) << qUtf8Printable(data); + emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure); + return; + } + + QVariantMap replyMap = jsonDoc.toVariant().toMap(); + if (!replyMap.value("active").toBool()) { + qCWarning(dcPushbullet()) << "Pushbullet account seems to be deactivated."; + emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusFailure); + return; + } + + qCDebug(dcPushbullet()) << "Pushbullet device" << device->name() << device->id().toString() << "setup complete"; + emit deviceSetupFinished(device, DeviceManager::DeviceSetupStatusSuccess); + }); + + return DeviceManager::DeviceSetupStatusAsync; +} + +DeviceManager::DeviceError DevicePluginPushbullet::executeAction(Device *device, const Action &action) +{ + qCDebug(dcPushbullet()) << "Executing action" << action.actionTypeId() << "for device" << device->name() << device->id().toString(); + + QNetworkRequest request(QUrl("https://api.pushbullet.com/v2/pushes")); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + request.setRawHeader("Access-Token", device->paramValue(pushNotificationDeviceTokenParamTypeId).toByteArray().trimmed()); + + QVariantMap params; + params.insert("type", "note"); + params.insert("title", action.param(pushNotificationNotifyActionTitleParamTypeId).value().toString()); + params.insert("body", action.param(pushNotificationNotifyActionBodyParamTypeId).value().toString()); + QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact)); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, device, [this, reply, device, action]{ + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcPushbullet()) << "Push message sending failed for" << device->name() << device->id() << reply->errorString() << reply->error(); + emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareNotAvailable); + return; + } + + QByteArray data = reply->readAll(); + + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcPushbullet()) << "Error reading reply from Pushbullet for" << device->name() << device->id().toString() << error.errorString(); + qCWarning(dcPushbullet()) << qUtf8Printable(data); + emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure); + return; + } + + QVariantMap replyMap = jsonDoc.toVariant().toMap(); + if (!replyMap.value("active").toBool()) { + qCWarning(dcPushbullet()) << "Error sending message. The account seems to be deactivated" << device->name() << device->id().toString(); + emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure); + return; + } + + if (replyMap.value("dismissed", true).toBool()) { + qCWarning(dcPushbullet()) << "Error sending message. The message has been dismissed by the server" << device->name() << device->id().toString(); + emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure); + return; + } + + qCDebug(dcPushbullet()) << "Message sent successfully"; + emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); + }); + + return DeviceManager::DeviceErrorAsync; +} + diff --git a/pushbullet/devicepluginpushbullet.h b/pushbullet/devicepluginpushbullet.h new file mode 100644 index 00000000..c93d9a52 --- /dev/null +++ b/pushbullet/devicepluginpushbullet.h @@ -0,0 +1,44 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINPUSHBULLET_H +#define DEVICEPLUGINPUSHBULLET_H + +#include "plugin/deviceplugin.h" + +class DevicePluginPushbullet: public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginpushbullet.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginPushbullet(QObject *parent = nullptr); + ~DevicePluginPushbullet() override; + + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + +}; + +#endif diff --git a/pushbullet/devicepluginpushbullet.json b/pushbullet/devicepluginpushbullet.json new file mode 100644 index 00000000..6837f564 --- /dev/null +++ b/pushbullet/devicepluginpushbullet.json @@ -0,0 +1,54 @@ +{ + "displayName": "Pushbullet", + "name": "Pushbullet", + "id": "46986575-0e62-483d-b5a8-76ac356fcce7", + "vendors": [ + { + "displayName": "Pushbullet", + "name": "pushbullet", + "id": "b5e1896e-b7fa-4c19-ac2b-10bd489f8302", + "deviceClasses": [ + { + "id": "56029c6d-777b-4889-9e17-29f813d34da4", + "name": "pushNotification", + "displayName": "Push Notification", + "createMethods": ["user"], + "interfaces": ["notifications"], + "paramTypes": [ + { + "id": "1f37ce22-50b8-4183-8b74-557fdb2d3076", + "name": "token", + "displayName": "access token", + "type": "QString" + } + ], + "actionTypes": [ + { + "id": "1378480f-6583-44e2-8fdd-22afe979a9a3", + "name": "notify", + "displayName": "notify", + "paramTypes": [ + { + "id": "ceed6e66-0dcb-4405-832d-e9091f882acc", + "name": "title", + "displayName": "title", + "type": "QString", + "inputType": "TextLine", + "defaultValue": "" + }, + { + "id": "f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2", + "name": "body", + "displayName": "body", + "type": "QString", + "inputType": "TextArea", + "defaultValue": "" + } + ] + } + ] + } + ] + } + ] +} diff --git a/pushbullet/pushbullet.pro b/pushbullet/pushbullet.pro new file mode 100644 index 00000000..0eb89087 --- /dev/null +++ b/pushbullet/pushbullet.pro @@ -0,0 +1,13 @@ +include(../plugins.pri) + +TARGET = $$qtLibraryTarget(nymea_devicepluginpushbullet) + +QT+= network + +SOURCES += \ + devicepluginpushbullet.cpp + +HEADERS += \ + devicepluginpushbullet.h + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-cs.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-cs.ts new file mode 100644 index 00000000..10476bf4 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-cs.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Push Notification + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + access token + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + oznámit + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + název + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + tělo + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-da.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-da.ts new file mode 100644 index 00000000..a0ea4dd0 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-da.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Pushmeddelelser + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + adgangskode + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + informér + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + titel + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + instans + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-de_DE.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-de_DE.ts new file mode 100644 index 00000000..d535fef3 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-de_DE.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + Pushbullet + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Pushbullet Benachrichtigung + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + Zugangs Token + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + Benachrichtigen + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + Titel + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + Nachrichten Inhalt + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-en_US.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-en_US.ts new file mode 100644 index 00000000..4a079ed6 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-en_US.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-es.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-es.ts new file mode 100644 index 00000000..1d066580 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-es.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Notificación push + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + símbolo de acceso + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + notificar + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + título + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + cuerpo + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-fr.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-fr.ts new file mode 100644 index 00000000..af55da3d --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-fr.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + notification pushbullet + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + jeton pour accés + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + notifier + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + titre + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + Contenu des informations + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-it.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-it.ts new file mode 100644 index 00000000..c9167cc1 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-it.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Notifica push + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + token d'accesso + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + notifica + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + titolo + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + corpo + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-nl.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-nl.ts new file mode 100644 index 00000000..7861205a --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-nl.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + push-melding + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + push-melding + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + melden + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + titel + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + body + + + diff --git a/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-pt.ts b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-pt.ts new file mode 100644 index 00000000..281d9071 --- /dev/null +++ b/pushbullet/translations/46986575-0e62-483d-b5a8-76ac356fcce7-pt.ts @@ -0,0 +1,46 @@ + + + + + Pushbullet + + + + Pushbullet + The name of the plugin Pushbullet (46986575-0e62-483d-b5a8-76ac356fcce7) +---------- +The name of the vendor (b5e1896e-b7fa-4c19-ac2b-10bd489f8302) + + + + + Push Notification + The name of the DeviceClass (56029c6d-777b-4889-9e17-29f813d34da4) + Notificação Push + + + + access token + The name of the ParamType (DeviceClass: pushNotification, Type: device, ID: 1f37ce22-50b8-4183-8b74-557fdb2d3076) + token de acesso + + + + notify + The name of the ActionType 1378480f-6583-44e2-8fdd-22afe979a9a3 of deviceClass pushNotification + notificar + + + + title + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: ceed6e66-0dcb-4405-832d-e9091f882acc) + título + + + + body + The name of the ParamType (DeviceClass: pushNotification, ActionType: notify, ID: f72cc56c-4d0b-4b96-ab9b-ff3ca92b00e2) + corpo + + +