diff --git a/coinmarketcap/README.md b/coinmarketcap/README.md new file mode 100644 index 00000000..e69de29b diff --git a/coinmarketcap/coinmarketcap.pro b/coinmarketcap/coinmarketcap.pro new file mode 100644 index 00000000..ad3216c7 --- /dev/null +++ b/coinmarketcap/coinmarketcap.pro @@ -0,0 +1,12 @@ +include(../plugins.pri) + +QT += network + +TARGET = $$qtLibraryTarget(nymea_deviceplugincoinmarketcap) + +SOURCES += \ + deviceplugincoinmarketcap.cpp \ + +HEADERS += \ + deviceplugincoinmarketcap.h \ + diff --git a/coinmarketcap/compile_commands.json b/coinmarketcap/compile_commands.json new file mode 100644 index 00000000..9a444d29 --- /dev/null +++ b/coinmarketcap/compile_commands.json @@ -0,0 +1,86 @@ +[ +{ + "arguments": [ + "clang++", + "-c", + "-m64", + "-target", + "x86_64-linux-gnu", + "-std=c++11", + "-fcxx-exceptions", + "-fexceptions", + "-DQT_QML_DEBUG", + "-DQT_PLUGIN", + "-DQT_GUI_LIB", + "-DQT_NETWORK_LIB", + "-DQT_CORE_LIB", + "-DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING=(39, 1, true, \"T = \")", + "-fPIC", + "-I", + "/home/nymea/Developer/nymea-coinmarketcapplugin", + "-I", + "/usr/include/nymea", + "-I", + "/usr/include/x86_64-linux-gnu/qt5", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtGui", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtCore", + "-I", + "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug", + "-I", + "/usr/include/libdrm", + "-I", + "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", + "-x", + "c++", + "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.cpp" + ], + "directory": "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug", + "file": "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.cpp" +}, +{ + "arguments": [ + "clang", + "-c", + "-m64", + "-target", + "x86_64-linux-gnu", + "-std=c++11", + "-fcxx-exceptions", + "-fexceptions", + "-DQT_QML_DEBUG", + "-DQT_PLUGIN", + "-DQT_GUI_LIB", + "-DQT_NETWORK_LIB", + "-DQT_CORE_LIB", + "-DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING=(39, 1, true, \"T = \")", + "-fPIC", + "-I", + "/home/nymea/Developer/nymea-coinmarketcapplugin", + "-I", + "/usr/include/nymea", + "-I", + "/usr/include/x86_64-linux-gnu/qt5", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtGui", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtCore", + "-I", + "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug", + "-I", + "/usr/include/libdrm", + "-I", + "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", + "-x", + "c++-header", + "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.h" + ], + "directory": "/home/nymea/Developer/build-coinmarketcap-Desktop-Debug", + "file": "/home/nymea/Developer/nymea-coinmarketcapplugin/deviceplugincoinmarketcap.h" +} +] \ No newline at end of file diff --git a/coinmarketcap/deviceplugincoinmarketcap.cpp b/coinmarketcap/deviceplugincoinmarketcap.cpp new file mode 100644 index 00000000..ce468653 --- /dev/null +++ b/coinmarketcap/deviceplugincoinmarketcap.cpp @@ -0,0 +1,166 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Bernhard Trinnes . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "deviceplugincoinmarketcap.h" +#include "network/networkaccessmanager.h" +#include "plugininfo.h" + +#include + +DevicePluginCoinMarketCap::DevicePluginCoinMarketCap() +{ +} + +DeviceManager::DeviceSetupStatus DevicePluginCoinMarketCap::setupDevice(Device *device) +{ + if(!m_pluginTimer) { + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60); + connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginCoinMarketCap::onPluginTimer); + } + + if (device->deviceClassId() == currentPricesDeviceClassId) { + getPriceCall(device); + return DeviceManager::DeviceSetupStatusSuccess; + } + return DeviceManager::DeviceSetupStatusFailure; +} + +void DevicePluginCoinMarketCap::deviceRemoved(Device *device) +{ + while (m_httpRequests.values().contains(device)) { + QNetworkReply *reply = m_httpRequests.key(device); + m_httpRequests.remove(reply); + reply->deleteLater(); + } + + if (myDevices().empty()) { + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); + } +} + +void DevicePluginCoinMarketCap::onPluginTimer() +{ + foreach (Device *device, myDevices()) { + if (device->deviceClassId() == currentPricesDeviceClassId) { + getPriceCall(device); + } + } +} + +void DevicePluginCoinMarketCap::onPriceCallFinished() +{ + QNetworkReply *reply = static_cast(sender()); + qCDebug(dcCoinMarketCap()) << "GET reply finished"; + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (!m_httpRequests.contains(reply)) { + reply->deleteLater(); + return; + } + + Device *device = m_httpRequests.take(reply); + + // Check HTTP status code + if (status != 200 || reply->error() != QNetworkReply::NoError) { + qCWarning(dcCoinMarketCap()) << "Request error:" << status << reply->errorString(); + device->setStateValue(currentPricesConnectedStateTypeId, false); + } + reply->deleteLater(); + + // check JSON file + QJsonParseError error; + QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll(), &error); + qDebug(dcCoinMarketCap()) << jsonResponse; + if (error.error != QJsonParseError::NoError) { + qCWarning(dcCoinMarketCap()) << "Update reply JSON error:" << error.errorString(); + reply->deleteLater(); + return; + } + + QVariantList list = jsonResponse.toVariant().toList(); + + foreach (QVariant element, list) { + QVariantMap elementMap = element.toMap(); + device->setStateValue(currentPricesConnectedStateTypeId, true); + double price; + + if (elementMap.value("id").toString() == "bitcoin") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesBtcStateTypeId, price); + + } else if (elementMap.value("id").toString() == "ethereum") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Etherium Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesEthStateTypeId, price); + + } else if (elementMap.value("id").toString() == "ripple") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Ripple Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesXrpStateTypeId, price); + + } else if (elementMap.value("id").toString() == "bitcoin-cash") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesBchStateTypeId, price); + + } else if (elementMap.value("id").toString() == "litecoin") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Litecoin Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesLtcStateTypeId, price); + + } else if (elementMap.value("id").toString() == "nem") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Nem Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesXemStateTypeId, price); + + } else if (elementMap.value("id").toString() == "ethereum-classic") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower() << price; + device->setStateValue(currentPricesEtcStateTypeId, price); + + } else if (elementMap.value("id").toString() == "dash") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + device->setStateValue(currentPricesDashStateTypeId, price); + + } else if (elementMap.value("id").toString() == "iota") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + device->setStateValue(currentPricesMiotaStateTypeId, price); + + } else if (elementMap.value("id").toString() == "neo") { + price = elementMap.value(QString("price_%1").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())).toDouble(); + device->setStateValue(currentPricesAnsStateTypeId, price); + } + } +} + +void DevicePluginCoinMarketCap::getPriceCall(Device *device) +{ + QUrl url; + url.setUrl(QString("https://api.coinmarketcap.com/v1/ticker/?convert=%1&limit=30").arg(QString(device->paramValue(currentPricesDeviceFiatParamTypeId).toString()).toLower())); + QNetworkRequest request; + request.setUrl(url); + request.setRawHeader("User-Agent", "nymea 1.0"); + + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, this, &DevicePluginCoinMarketCap::onPriceCallFinished); + + m_httpRequests.insert(reply, device); +} diff --git a/coinmarketcap/deviceplugincoinmarketcap.h b/coinmarketcap/deviceplugincoinmarketcap.h new file mode 100644 index 00000000..7f2fedd7 --- /dev/null +++ b/coinmarketcap/deviceplugincoinmarketcap.h @@ -0,0 +1,57 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Bernhard Trinnes . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINCOINMARKETCAP_H +#define DEVICEPLUGINCOINMARKETCAP_H + +#include "plugin/deviceplugin.h" +#include "devicemanager.h" +#include "plugintimer.h" + +#include +#include + +class DevicePluginCoinMarketCap : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugincoinmarketcap.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginCoinMarketCap(); + + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void deviceRemoved(Device *device) override; + +private: + PluginTimer *m_pluginTimer = nullptr; + + QHash m_priceRequests; + QHash m_httpRequests; + + void getPriceCall(Device *device); + +private slots: + void onPluginTimer(); + void onPriceCallFinished(); +}; + +#endif // DEVICEPLUGINCOINMARKETCAP_H diff --git a/coinmarketcap/deviceplugincoinmarketcap.json b/coinmarketcap/deviceplugincoinmarketcap.json new file mode 100644 index 00000000..dcb6941f --- /dev/null +++ b/coinmarketcap/deviceplugincoinmarketcap.json @@ -0,0 +1,140 @@ +{ + "displayName": "Coin market cap", + "name": "coinMarketCap", + "id": "532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4", + "vendors": [ + { + "displayName": "Coin Market Cap", + "name": "coinMarketCap", + "id": "28eeecbd-4178-45aa-81a6-fd95851444fd", + "deviceClasses": [ + { + "id": "f5b794f7-7e2a-4409-8445-23ead80f2a8f", + "name": "currentPrices", + "displayName": "Crypto Prices", + "createMethods": ["user"], + "interfaces": ["connectable"], + "paramTypes": [ + { + "id": "92747d75-d18a-4915-bd48-0edd5cc5f19a", + "name": "fiat", + "displayName": "Fiat Currency", + "type": "QString", + "allowedValues": [ + "USD", + "AUD", + "BRL", + "CAD", + "CHF", + "CNY", + "EUR", + "GBP", + "HKD", + "IDR", + "INR", + "JPY", + "KRW", + "MXN", + "RUB" + ], + "defaultValue": "EUR" + } + ], + "stateTypes":[ + { + "id": "19f079f0-1654-44c3-ab10-e7d7f9742e09", + "name": "connected", + "displayName": "Connected", + "type": "bool", + "defaultValue": false, + "displayNameEvent": "Connection status changed" + }, + { + "id": "721c91c8-8eb1-402e-8bfc-8e2d496be032", + "name": "btc", + "displayName": "Bitcoin", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "bitcoin value changed" + }, + { + "id": "5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824", + "name": "eth", + "displayName": "Ethereum", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "ethereum value changed" + }, + { + "id": "d8517cf8-2ebd-4be3-8573-00b595cc2ab5", + "name": "xrp", + "displayName": "Ripple", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "ripple value changed" + }, + { + "id": "cc5b4fe5-aa43-43b3-952f-90c0e3e20740", + "name": "bch", + "displayName": "Bitcoin Cash", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "bitcoin cash value changed" + }, + { + "id": "f591f699-ae68-4f64-a221-254f836a31d3", + "name": "ltc", + "displayName": "Litecoin", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "Litecoin value changed" + }, + { + "id": "adecda44-fade-4dba-8b41-cfb07579dea9", + "name": "xem", + "displayName": "NEM", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "NEM cash value changed" + }, + { + "id": "fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2", + "name": "etc", + "displayName": "Ethereum Classic", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "etherium classic value changed" + }, + { + "id": "0b602f14-1596-4091-a0ab-6c5efa087a3f", + "name": "dash", + "displayName": "Dash", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "Dash value changed" + }, + { + "id": "2c6e341f-5940-40bb-b495-89c3ecaaf9e7", + "name": "miota", + "displayName": "IOTA", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "IOTA value changed" + }, + { + "id": "7583c720-1786-4c32-9552-e731578ff113", + "name": "ans", + "displayName": "NEO", + "type": "double", + "defaultValue": 0.00, + "displayNameEvent": "NEO value changed" + } + ] + } + ] + } + ] +} + + + diff --git a/coinmarketcap/plugins.pri b/coinmarketcap/plugins.pri new file mode 100644 index 00000000..afa12598 --- /dev/null +++ b/coinmarketcap/plugins.pri @@ -0,0 +1,58 @@ +TEMPLATE = lib +CONFIG += plugin + +QMAKE_CXXFLAGS += -Werror -std=c++11 -g +QMAKE_LFLAGS += -std=c++11 + +CONFIG += link_pkgconfig +PKGCONFIG += nymea + +HEADERS += $${OUT_PWD}/plugininfo.h \ + $${OUT_PWD}/extern-plugininfo.h + +# Check if this is a snap build +snappy{ + INCLUDEPATH+=$$(SNAPCRAFT_STAGE)/usr/include/nymea +} + +# Make the device plugin json file visible in the Qt Creator +OTHER_FILES += $$PWD/deviceplugin"$$TARGET".json + +# NOTE: if the code includes "plugininfo.h", it would fail if we only give it a compiler for $$OUT_PWD/plugininfo.h +# Let's add a dummy target with the plugininfo.h file without any path to allow the developer to just include it like that. + +# Create plugininfo file +plugininfo.target = $$OUT_PWD/plugininfo.h +plugininfo_dummy.target = plugininfo.h +plugininfo.depends = FORCE +plugininfo.commands = nymea-generateplugininfo --filetype i --jsonfile $$PWD/deviceplugin"$$TARGET".json --output plugininfo.h --builddir $$OUT_PWD +plugininfo_dummy.commands = $$plugininfo.commands +QMAKE_EXTRA_TARGETS += plugininfo plugininfo_dummy + +# Create extern-plugininfo file +extern_plugininfo.target = $$OUT_PWD/extern-plugininfo.h +extern_plugininfo_dummy.target = extern-plugininfo.h +extern_plugininfo.depends = FORCE +extern_plugininfo.commands = nymea-generateplugininfo --filetype e --jsonfile $$PWD/deviceplugin"$$TARGET".json --output extern-plugininfo.h --builddir $$OUT_PWD +extern_plugininfo_dummy.commands = $$extern_plugininfo.commands +QMAKE_EXTRA_TARGETS += extern_plugininfo extern_plugininfo_dummy + +# Clean up autogenerated plugin info files +plugininfo_clean.commands = rm -fv $$OUT_PWD/plugininfo.h $$OUT_PWD/extern-plugininfo.h +clean.depends = plugininfo_clean +QMAKE_EXTRA_TARGETS += clean plugininfo_clean + +# Install translation files +TRANSLATIONS *= $$files($${PWD}/translations/*ts, true) +lupdate.depends = FORCE +lupdate.depends += plugininfo.h +lupdate.commands = lupdate -recursive -no-obsolete $$PWD/"$$TARGET".pro; +QMAKE_EXTRA_TARGETS += lupdate + +translations.path = /usr/share/nymea/translations +translations.files = $$[QT_SOURCE_TREE]/translations/*.qm +TRANSLATIONS += $$files($$[QT_SOURCE_TREE]/translations/*.ts, true) + +# Install plugin +target.path = $$[QT_INSTALL_LIBS]/nymea/plugins/ +INSTALLS += target translations diff --git a/coinmarketcap/translations/532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4-en_US.ts b/coinmarketcap/translations/532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4-en_US.ts new file mode 100644 index 00000000..f7f66d85 --- /dev/null +++ b/coinmarketcap/translations/532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4-en_US.ts @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/coinmarketcap/translations/de_DE.ts b/coinmarketcap/translations/de_DE.ts new file mode 100644 index 00000000..c929d0ad --- /dev/null +++ b/coinmarketcap/translations/de_DE.ts @@ -0,0 +1,175 @@ + + + + + CoinMarketCap + + + coin market cap + The name of the plugin coin market cap (532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4) + + + + + Server Url + The name of the paramType (45e920d7-804c-4242-8435-ba4d2e6d06f7) of coin market cap + + + + + Coin Market Cap + The name of the vendor (28eeecbd-4178-45aa-81a6-fd95851444fd) + + + + + Current Prices + The name of the DeviceClass (f5b794f7-7e2a-4409-8445-23ead80f2a8f) + + + + + Fiat Currency + The name of the paramType (92747d75-d18a-4915-bd48-0edd5cc5f19a) of Current Prices + + + + + reachable status changed + The name of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09) + + + + + Server Reachable + The name of the ParamType of StateType (19f079f0-1654-44c3-ab10-e7d7f9742e09) of DeviceClass Current Prices + + + + + bitcoin value changed + The name of the autocreated EventType (721c91c8-8eb1-402e-8bfc-8e2d496be032) + + + + + Bitcoin + The name of the ParamType of StateType (721c91c8-8eb1-402e-8bfc-8e2d496be032) of DeviceClass Current Prices + + + + + ethereum value changed + The name of the autocreated EventType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) + + + + + Ethereum + The name of the ParamType of StateType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) of DeviceClass Current Prices + + + + + ripple value changed + The name of the autocreated EventType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) + + + + + Ripple + The name of the ParamType of StateType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) of DeviceClass Current Prices + + + + + bitcoin cash value changed + The name of the autocreated EventType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) + + + + + Bitcoin Cash + The name of the ParamType of StateType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) of DeviceClass Current Prices + + + + + Litecoin value changed + The name of the autocreated EventType (f591f699-ae68-4f64-a221-254f836a31d3) + + + + + Litecoin + The name of the ParamType of StateType (f591f699-ae68-4f64-a221-254f836a31d3) of DeviceClass Current Prices + + + + + NEM cash value changed + The name of the autocreated EventType (adecda44-fade-4dba-8b41-cfb07579dea9) + + + + + NEM + The name of the ParamType of StateType (adecda44-fade-4dba-8b41-cfb07579dea9) of DeviceClass Current Prices + + + + + etherium classic value changed + The name of the autocreated EventType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) + + + + + Ethereum Classic + The name of the ParamType of StateType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) of DeviceClass Current Prices + + + + + Dash value changed + The name of the autocreated EventType (0b602f14-1596-4091-a0ab-6c5efa087a3f) + + + + + Dash + The name of the ParamType of StateType (0b602f14-1596-4091-a0ab-6c5efa087a3f) of DeviceClass Current Prices + + + + + IOTA value changed + The name of the autocreated EventType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) + + + + + IOTA + The name of the ParamType of StateType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) of DeviceClass Current Prices + + + + + NEO value changed + The name of the autocreated EventType (7583c720-1786-4c32-9552-e731578ff113) + + + + + NEO + The name of the ParamType of StateType (7583c720-1786-4c32-9552-e731578ff113) of DeviceClass Current Prices + + + + + refresh + The name of the ActionType 11eb83d4-aa95-4a9c-a314-da7ee2d0786a of deviceClass Current Prices + + + + diff --git a/coinmarketcap/translations/en_US.ts b/coinmarketcap/translations/en_US.ts new file mode 100644 index 00000000..fcf95c9a --- /dev/null +++ b/coinmarketcap/translations/en_US.ts @@ -0,0 +1,175 @@ + + + + + CoinMarketCap + + + coin market cap + The name of the plugin coin market cap (532757cf-fc6f-4ce5-ae5b-e6f5bdb67fb4) + + + + + Server Url + The name of the paramType (45e920d7-804c-4242-8435-ba4d2e6d06f7) of coin market cap + + + + + Coin Market Cap + The name of the vendor (28eeecbd-4178-45aa-81a6-fd95851444fd) + + + + + Current Prices + The name of the DeviceClass (f5b794f7-7e2a-4409-8445-23ead80f2a8f) + + + + + Fiat Currency + The name of the paramType (92747d75-d18a-4915-bd48-0edd5cc5f19a) of Current Prices + + + + + reachable status changed + The name of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09) + + + + + Server Reachable + The name of the ParamType of StateType (19f079f0-1654-44c3-ab10-e7d7f9742e09) of DeviceClass Current Prices + + + + + bitcoin value changed + The name of the autocreated EventType (721c91c8-8eb1-402e-8bfc-8e2d496be032) + + + + + Bitcoin + The name of the ParamType of StateType (721c91c8-8eb1-402e-8bfc-8e2d496be032) of DeviceClass Current Prices + + + + + ethereum value changed + The name of the autocreated EventType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) + + + + + Ethereum + The name of the ParamType of StateType (5c58bb9f-dcdf-47c9-a0b7-f0ffc968f824) of DeviceClass Current Prices + + + + + ripple value changed + The name of the autocreated EventType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) + + + + + Ripple + The name of the ParamType of StateType (d8517cf8-2ebd-4be3-8573-00b595cc2ab5) of DeviceClass Current Prices + + + + + bitcoin cash value changed + The name of the autocreated EventType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) + + + + + Bitcoin Cash + The name of the ParamType of StateType (cc5b4fe5-aa43-43b3-952f-90c0e3e20740) of DeviceClass Current Prices + + + + + Litecoin value changed + The name of the autocreated EventType (f591f699-ae68-4f64-a221-254f836a31d3) + + + + + Litecoin + The name of the ParamType of StateType (f591f699-ae68-4f64-a221-254f836a31d3) of DeviceClass Current Prices + + + + + NEM cash value changed + The name of the autocreated EventType (adecda44-fade-4dba-8b41-cfb07579dea9) + + + + + NEM + The name of the ParamType of StateType (adecda44-fade-4dba-8b41-cfb07579dea9) of DeviceClass Current Prices + + + + + etherium classic value changed + The name of the autocreated EventType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) + + + + + Ethereum Classic + The name of the ParamType of StateType (fc9a61b7-c3df-4f13-ba31-d7743f3d2dc2) of DeviceClass Current Prices + + + + + Dash value changed + The name of the autocreated EventType (0b602f14-1596-4091-a0ab-6c5efa087a3f) + + + + + Dash + The name of the ParamType of StateType (0b602f14-1596-4091-a0ab-6c5efa087a3f) of DeviceClass Current Prices + + + + + IOTA value changed + The name of the autocreated EventType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) + + + + + IOTA + The name of the ParamType of StateType (2c6e341f-5940-40bb-b495-89c3ecaaf9e7) of DeviceClass Current Prices + + + + + NEO value changed + The name of the autocreated EventType (7583c720-1786-4c32-9552-e731578ff113) + + + + + NEO + The name of the ParamType of StateType (7583c720-1786-4c32-9552-e731578ff113) of DeviceClass Current Prices + + + + + refresh + The name of the ActionType 11eb83d4-aa95-4a9c-a314-da7ee2d0786a of deviceClass Current Prices + + + + diff --git a/nymea-plugins.pro b/nymea-plugins.pro index 9addd3f2..c5d3f1ae 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -6,6 +6,7 @@ PLUGIN_DIRS = \ awattar \ boblight \ bose \ + coinmarketcap \ commandlauncher \ conrad \ datetime \