From 86cf4c92835c4222c49c3086fe3ff07073e08f9e Mon Sep 17 00:00:00 2001 From: Boernsman Date: Thu, 18 Jun 2020 15:52:03 +0200 Subject: [PATCH] added new plug-in solar-log --- debian/control | 15 ++ debian/nymea-plugin-solarlog.install.in | 1 + nymea-plugins.pro | 1 + solarlog/README.md | 24 +++ solarlog/integrationpluginsolarlog.cpp | 77 ++++++++++ solarlog/integrationpluginsolarlog.h | 63 ++++++++ solarlog/integrationpluginsolarlog.json | 194 ++++++++++++++++++++++++ solarlog/meta.json | 12 ++ solarlog/solarlog.cpp | 0 solarlog/solarlog.h | 0 solarlog/solarlog.png | Bin 0 -> 33001 bytes solarlog/solarlog.pro | 9 ++ 12 files changed, 396 insertions(+) create mode 100644 debian/nymea-plugin-solarlog.install.in create mode 100644 solarlog/README.md create mode 100644 solarlog/integrationpluginsolarlog.cpp create mode 100644 solarlog/integrationpluginsolarlog.h create mode 100644 solarlog/integrationpluginsolarlog.json create mode 100644 solarlog/meta.json create mode 100644 solarlog/solarlog.cpp create mode 100644 solarlog/solarlog.h create mode 100644 solarlog/solarlog.png create mode 100644 solarlog/solarlog.pro diff --git a/debian/control b/debian/control index c88e8e0c..83d56289 100644 --- a/debian/control +++ b/debian/control @@ -591,6 +591,21 @@ Description: nymea.io plugin for Pushbullet This package will install the nymea.io plugin for sending messages via Pushbullet. +Package: nymea-plugin-solarlog +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Description: nymea.io plugin for Solar-Log + 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 Solar-Log. + + Package: nymea-plugin-tasmota Architecture: any Depends: ${shlibs:Depends}, diff --git a/debian/nymea-plugin-solarlog.install.in b/debian/nymea-plugin-solarlog.install.in new file mode 100644 index 00000000..fec3ab6b --- /dev/null +++ b/debian/nymea-plugin-solarlog.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginsolarlog.so diff --git a/nymea-plugins.pro b/nymea-plugins.pro index e5605321..c734ab56 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -40,6 +40,7 @@ PLUGIN_DIRS = \ philipshue \ pushbullet \ shelly \ + solarlog \ systemmonitor \ remotessh \ senic \ diff --git a/solarlog/README.md b/solarlog/README.md new file mode 100644 index 00000000..092be2aa --- /dev/null +++ b/solarlog/README.md @@ -0,0 +1,24 @@ +# Solar-Log + +This plug-in integrates Solar-Log devices into nymea. + +## Supported Things + +* Solar-Log 200 +* Solar-Log 250 +* Solar-Log 300 +* Solar-Log 500 +* Solar-Log 1000 +* Solar-Log 1200 +* Solar-Log 1900 +* Solar-Log 2000 + +## Requirements + +* The package 'nymea-plugin-solarlog' must be installed. +* The device and nymea must be in the same network. +* Device to be updated to the Solar-Log Firmware Version 3.6.0. + +## More +https://www.solar-log.com/en + diff --git a/solarlog/integrationpluginsolarlog.cpp b/solarlog/integrationpluginsolarlog.cpp new file mode 100644 index 00000000..5d4ad8b7 --- /dev/null +++ b/solarlog/integrationpluginsolarlog.cpp @@ -0,0 +1,77 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, 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 "integrationpluginsolarlog.h".h" +#include "plugininfo.h" +#include "network/networkaccessmanager.h" + + +IntegrationPluginSolarLog::IntegrationPluginSolarLog() +{ + +} + +void IntegrationPluginSolarLog::setupThing(ThingSetupInfo *info) +{ + if (!m_refreshTimer) { + m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(2); + connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginSolarLog::onRefreshTimer); + } + info->finish(Thing::ThingErrorNoError); +} + +void IntegrationPluginSolarLog::thingRemoved(Thing *thing) +{ + Q_UNUSED(thing) + + if (myThings().isEmpty()) { + hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer); + m_refreshTimer = nullptr; + } +} + +void IntegrationPluginSolarLog::onRefreshTimer() +{ + foreach (Thing *, myThings().filterByThingClassId()) { + + } +} + +QUuid IntegrationPluginSolarLog::getData(const QHostAddress &address) +{ + QUrl url; + url.setHost(address); + url.setPath("/getjp"); + url.setScheme("http"); + + hardwareManager()->networkManager()->post(QNetworkRequest(url), QByteArray("{\"801\":{\"170\":null}}")); +} + + diff --git a/solarlog/integrationpluginsolarlog.h b/solarlog/integrationpluginsolarlog.h new file mode 100644 index 00000000..4ccdcbd3 --- /dev/null +++ b/solarlog/integrationpluginsolarlog.h @@ -0,0 +1,63 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, 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 INTEGRATIONPLUGINSOLARLOG_H +#define INTEGRATIONPLUGINSOLARLOG_H + +#include "integrations/integrationplugin.h" +#include "plugintimer.h" + +#include +#include +#include + + +class IntegrationPluginSolarLog: public IntegrationPlugin { + Q_OBJECT + Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginsolarlog.json") + Q_INTERFACES(IntegrationPlugin) + +public: + explicit IntegrationPluginSolarLog(); + ~IntegrationPluginSolarLog() override; + + void setupThing(ThingSetupInfo *info) override; + void thingRemoved(Thing *thing) override; + +private slots: + void onRefreshTimer(); + +private: + PluginTimer *m_refreshTimer = nullptr; + + QUuid getData(const QHostAddress &address); +}; + +#endif // INTEGRATIONPLUGINSOLARLOG_H diff --git a/solarlog/integrationpluginsolarlog.json b/solarlog/integrationpluginsolarlog.json new file mode 100644 index 00000000..cea1a6b4 --- /dev/null +++ b/solarlog/integrationpluginsolarlog.json @@ -0,0 +1,194 @@ +{ + "id": "606adc5a-c9a5-45fa-9652-ea385dcb0b81", + "name": "solarlog", + "displayName": "Solar-Log", + "vendors": [ + { + "id": "0cf5f437-abf0-4396-92d4-be94d616c667", + "name": "Solarlog", + "displayName": "Solar-Log", + "thingClasses": [ + { + "id": "1374b47e-5555-4ec1-b2cd-6474048dd30c", + "name": "Solarlog", + "displayName": "Solar-Log", + "createMethods": [ "user", "discovery" ], + "interfaces": [ "batterylevel", "connectable" ], + "paramTypes": [ + { + "id": "84bd8a41-2411-4bb0-87a9-ab7e01044b10", + "name": "host", + "displayName": "Address", + "type": "QString", + "inputType": "TextLine", + "defaultValue": "http://solar-log" + } + ], + "stateTypes": [ + { + "id": "eb9f8575-71e3-42a9-aa4d-ffea9586cc4f", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connected changed", + "type": "bool", + "defaultValue": false, + "cached": false + }, + { + "id": "b944c513-a7f0-4bc1-941e-aae9849557fe", + "name": "lastupdate", + "displayName": "Last update", + "displayNameEvent": "Last update changed", + "type": "QString", + "defaultValue": "" + }, + { + "id": "0bf515d8-0f48-4eba-9255-f774d68c80fe", + "name": "pac", + "displayName": "PAC", + "displayNameEvent": "PAC changed", + "type": "int", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "e4183a70-c848-447a-962a-f19dc5974140", + "name": "pdc", + "displayName": "PDC", + "displayNameEvent": "PDC changed", + "type": "int", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "7dc46b2e-5fba-4cc6-a159-09472cdfac62", + "name": "uac", + "displayName": "UAC", + "displayNameEvent": "UAC changed", + "type": "int", + "unit": "Voltage", + "defaultValue": 0 + }, + { + "id": "bb891a05-59d8-4a3b-a0ea-b63af58558f7", + "name": "dcVoltage", + "displayName": "DC Voltage", + "displayNameEvent": "DC Voltage changed", + "type": "int", + "unit": "Voltage", + "defaultValue": 0 + }, + { + "id": "53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8", + "name": "yieldDay", + "displayName": "Yield day", + "displayNameEvent": "Yield day changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "bd96d0b3-e921-49eb-8b34-0b3be5bb27fa", + "name": "yieldYesterday", + "displayName": "Yield yesterday", + "displayNameEvent": "Yield yesterday changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "9a77662a-2034-4031-8e7a-1e6347089d97", + "name": "yieldMonth", + "displayName": "Yield month", + "displayNameEvent": "Yield month changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "d18169ce-deeb-4f7b-b737-818a91760041", + "name": "yieldYear", + "displayName": "Yield year", + "displayNameEvent": "Yield year changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "3afb6ea1-fef8-4c17-8307-c7547a7a6f3c", + "name": "yieldTotal", + "displayName": "Yield total", + "displayNameEvent": "Yield total changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "5b665247-278a-4b59-9046-add40763e937", + "name": "currentTotalConsumption", + "displayName": "Current total consumption", + "displayNameEvent": "Current total consumption changed", + "type": "int", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "40ff1d14-a5d2-4fdb-919c-58dfbcdca123", + "name": "consYieldDay", + "displayName": "consYieldDay", + "displayNameEvent": "consYieldDay changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "5d6d5ba5-ebc3-42ce-9d08-802da694b4da", + "name": "consYieldYesterday", + "displayName": "consYieldYesterday", + "displayNameEvent": "consYieldYesterday changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "a45a557a-a937-4382-8ef5-76f1ff5940e4", + "name": "consYieldMonth", + "displayName": "consYieldMonth", + "displayNameEvent": "consYieldMonth changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "1d42619b-3a50-4bde-b325-67a8014332ef", + "name": "consYieldYear", + "displayName": "consYieldYear", + "displayNameEvent": "consYieldYear changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "34f60062-5dec-45ed-9a27-4fbc083cb36e", + "name": "consYieldTotal", + "displayName": "consYieldTotal", + "displayNameEvent": "consYieldTotal changed", + "type": "int", + "unit": "WattHour", + "defaultValue": 0 + }, + { + "id": "0aa21401-2a3d-4149-803b-f0ba8c66b2f7", + "name": "totalPower", + "displayName": "Installed generator power", + "displayNameEvent": "Installed generator power changed", + "type": "int", + "unit": "Watt", + "defaultValue": 0 + } + ] + } + ] + } + ] +} diff --git a/solarlog/meta.json b/solarlog/meta.json new file mode 100644 index 00000000..4646a411 --- /dev/null +++ b/solarlog/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Solar-Log", + "tagline": "Integrates Solar-Log with nymea.", + "icon": "solarlog.png", + "stability": "consumer", + "offline": true, + "technologies": [ + "network" + ], + "categories": [ + ] +} diff --git a/solarlog/solarlog.cpp b/solarlog/solarlog.cpp new file mode 100644 index 00000000..e69de29b diff --git a/solarlog/solarlog.h b/solarlog/solarlog.h new file mode 100644 index 00000000..e69de29b diff --git a/solarlog/solarlog.png b/solarlog/solarlog.png new file mode 100644 index 0000000000000000000000000000000000000000..e26006be326a6f95b55523b0b4d6c3d08274103a GIT binary patch literal 33001 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 U-EG;|eeDo365qvZL=A%e4 literal 0 HcmV?d00001 diff --git a/solarlog/solarlog.pro b/solarlog/solarlog.pro new file mode 100644 index 00000000..06846de6 --- /dev/null +++ b/solarlog/solarlog.pro @@ -0,0 +1,9 @@ +include(../plugins.pri) + +QT += network + +SOURCES += \ + integrationpluginsolarlog.cpp \ + +HEADERS += \ + integrationpluginsolarlog.h \