added idm plugin
parent
352413563f
commit
36803368b3
|
|
@ -29,6 +29,22 @@ Description: nymea.io plugin for Drexel & Weiss heat pumps
|
|||
This package will install the nymea.io plugin for Drexel & Weiss heat pumps
|
||||
|
||||
|
||||
Package: nymea-plugin-idm
|
||||
Architecture: any
|
||||
Section: libs
|
||||
Depends: ${shlibs:Depends},
|
||||
${misc:Depends},
|
||||
nymea-plugins-modbus-translations,
|
||||
Description: nymea.io plugin for iDM heat pumps
|
||||
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 iDM heat pumps
|
||||
|
||||
|
||||
Package: nymea-plugin-modbuscommander
|
||||
Architecture: any
|
||||
Section: libs
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginidm.so
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# iDM
|
||||
|
||||
## Supported Things
|
||||
|
||||
## More
|
||||
|
||||
https://www.idm-energie.at/en/
|
||||
|
||||
** Modbus TCP communication not working **
|
||||
* Is "Modbus TCP" selected in the "Building Management System" menu?
|
||||
* Is the Modbus TCP device and the heat pump in the same network?
|
||||
* Is there an IP address conflict?
|
||||
* Has the heat pump set the IP address manually? IP address should be set manually, because with "DHCP" the IP address can change (e.g. after a power failure).
|
||||
* Was the connection made via a switch, possibly blocking this communication? If so, integrate the Modbus TCP device directly (without a switch).
|
||||
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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 "idm.h"
|
||||
|
||||
Idm::Idm(const QHostAddress &address, QObject *parent) :
|
||||
QObject(parent),
|
||||
m_hostAddress(address)
|
||||
{
|
||||
m_modbusMaster = new ModbusTCPMaster(address, 502, this);
|
||||
}
|
||||
|
||||
void Idm::getOutsideTemperature()
|
||||
{
|
||||
m_modbusMaster->
|
||||
}
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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 IDM_H
|
||||
#define IDM_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "../modbus/modbustcpmaster.h"
|
||||
|
||||
class Idm : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Idm(const QHostAddress &address, QObject *parent = nullptr);
|
||||
void getOutsideTemperature();
|
||||
void getCurrentFaultNumber();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
enum IscModus {
|
||||
KeineAbwarme = 0,
|
||||
Heizung = 1,
|
||||
Warmwasser = 4,
|
||||
Warmequelle = 8,
|
||||
};
|
||||
|
||||
enum RegisterList {
|
||||
OutsideTemperature = 1000,
|
||||
MeanOutsideTemperature = 1002,
|
||||
CurrentFaultNumber = 1004,
|
||||
OperationModeSystem = 1005,
|
||||
SmartGridStatus = 1006,
|
||||
HeatStorageTemperature = 1008,
|
||||
ColdStorageTemperature = 1010,
|
||||
DrinkingWaterHeaterTempBelow = 1012,
|
||||
DrinkingWaterHeaterTempAbove = 1014,
|
||||
HotWaterTapTemperature = 1030,
|
||||
TargetHotWaterTemperature = 1032,
|
||||
HeatPumpOperatingMode = 1090,
|
||||
SummationFaultHeatPump = 1099,
|
||||
Humiditysensor = 1392,
|
||||
ExternalOutsideTemperature = 1690,
|
||||
ExternalHumidity = 1692,
|
||||
ExternalRequestTemperatureHeating = 1694, //Externe Anforderungstemperatur Heizen
|
||||
ExternalRequestTemperatureCooling = 1695, // Externe Anforderungstemperatur Kühlen
|
||||
HeatingRequirement = 1710
|
||||
CoolingRequirement = 1711,
|
||||
HotWaterChargingRequirement = 1712, // Anforderung Warmwasserladung
|
||||
//Wärmemenge Heizen
|
||||
//Wärmemenge Kühlen,
|
||||
//Wärmemenge Warmwasser,
|
||||
//Wärmemenge Abtauung,
|
||||
//Wärmemenge Passive Kühlung,
|
||||
//Wärmemenge Solar,
|
||||
//Wärmemenge Elektroheizeinsatz,
|
||||
Momentanleistung
|
||||
SolarKollektortemperatur
|
||||
SolarKollektorrücklauftemperatur
|
||||
SolarLadetemperatur
|
||||
MomentanleistungSolar,
|
||||
SolarOperatingMode =
|
||||
ISCModus = 1874,
|
||||
AcknowledgeFaultMessages = 1999, // Störmeldungen quittieren
|
||||
Aktueller PV-Überschuss
|
||||
Aktueller PV Produktion
|
||||
Aktuelle Leistungsaufnahme Wärmepumpe
|
||||
};
|
||||
|
||||
QHostAddress m_hostAddress;
|
||||
ModbusTCPMaster *m_modbusMaster = nullptr;
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // IDM_H
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
include(../plugins.pri)
|
||||
|
||||
QT += \
|
||||
network \
|
||||
serialbus \
|
||||
|
||||
SOURCES += \
|
||||
idm.cpp \
|
||||
integrationpluginidm.cpp \
|
||||
../modbus/modbustcpmaster.cpp \
|
||||
|
||||
HEADERS += \
|
||||
idm.h \
|
||||
integrationpluginidm.h \
|
||||
../modbus/modbustcpmaster.h \
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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 "integrationpluginidm.h"
|
||||
#include "plugininfo.h"
|
||||
|
||||
void IntegrationPluginIdm::discoverThings(ThingDiscoveryInfo *info)
|
||||
{
|
||||
if (info->thingClassId() == navigator2ThingClassId) {
|
||||
//TODO add discovery method
|
||||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::setupThing(ThingSetupInfo *info)
|
||||
{
|
||||
Thing *thing = info->thing();
|
||||
|
||||
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||
QHostAddress hostAddress = QHostAddress(thing->paramValue(navigator2ThingIpAddressParamTypeId).toString());
|
||||
Idm *idm = new Idm(hostAddress, this);
|
||||
m_idmConnections.insert(thing, idm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::postSetupThing(Thing *thing)
|
||||
{
|
||||
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||
Idm *idm = m_idmConnections.value(thing);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::thingRemoved(Thing *thing)
|
||||
{
|
||||
if (m_idmConnections.contains(thing))
|
||||
m_idmConnections.take(thing)->deleteLater();
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::executeAction(ThingActionInfo *info)
|
||||
{
|
||||
Thing *thing = info->thing();
|
||||
Action action = info->action();
|
||||
|
||||
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||
if (action.actionTypeId() == navigator2PowerActionTypeId) {
|
||||
} else {
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8());
|
||||
}
|
||||
} else {
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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 INTEGRATIONPLUGINIDM_H
|
||||
#define INTEGRATIONPLUGINIDM_H
|
||||
|
||||
#include "integrations/integrationplugin.h"
|
||||
#include "plugintimer.h"
|
||||
|
||||
#include "idm.h"
|
||||
|
||||
#include <QUuid>
|
||||
|
||||
class IntegrationPluginIdm: public IntegrationPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginidm.json")
|
||||
Q_INTERFACES(IntegrationPlugin)
|
||||
|
||||
|
||||
public:
|
||||
explicit IntegrationPluginIdm();
|
||||
|
||||
void discoverThings(ThingDiscoveryInfo *info) override;
|
||||
void setupThing(ThingSetupInfo *info) override;
|
||||
void postSetupThing(Thing *thing) override;
|
||||
void thingRemoved(Thing *thing) override;
|
||||
void executeAction(ThingActionInfo *info) override;
|
||||
|
||||
private:
|
||||
|
||||
enum IdmSysMode {
|
||||
IdmSysModeStandby = 0,
|
||||
IdmSysModeAutomatic,
|
||||
IdmSysModeAway,
|
||||
IdmSysModeOnlyWarmwater,
|
||||
IdmSysModeOnlyRoomHeating
|
||||
};
|
||||
|
||||
enum IdmSmartGridMode {
|
||||
EVUSperreKeinPVErtrag,
|
||||
EVUBezugKeinPVErtrag,
|
||||
KeinEVUBezugPVErtrag,
|
||||
EVUSperrePVErtrag
|
||||
};
|
||||
|
||||
enum IdmStatus {
|
||||
Heating = 2,
|
||||
Standby = 3,
|
||||
Boosted = 4,
|
||||
HeatFinished = 5,
|
||||
Setup = 9,
|
||||
ErrorOvertempFuseBlown = 201,
|
||||
ErrorOvertempMeasured = 202,
|
||||
ErrorOvertempElectronics = 203,
|
||||
ErrorHardwareFault = 204,
|
||||
ErrorTempSensor = 205
|
||||
};
|
||||
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
QHash<Thing *, Idm *> m_idmConnections;
|
||||
QHash<QUuid, ThingActionInfo *> m_asyncActions;
|
||||
|
||||
private slots:
|
||||
void onRefreshTimer();
|
||||
};
|
||||
|
||||
#endif // INTEGRATIONPLUGINIDM_H
|
||||
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
{
|
||||
"name": "Idm",
|
||||
"displayName": "iDM",
|
||||
"id": "3968d86d-d51a-4ad1-a185-91faa017e38f",
|
||||
"vendors": [
|
||||
{
|
||||
"name": "Idm",
|
||||
"displayName": "iDM",
|
||||
"id": "6f54e4b0-1057-4004-87a9-97fdf4581625",
|
||||
"thingClasses": [
|
||||
{
|
||||
"name": "navigator2",
|
||||
"displayName": "Navigator 2.0",
|
||||
"id": "1c95ac91-4eca-4cbf-b0f4-d60d35d069ed",
|
||||
"createMethods": ["Discovery"],
|
||||
"interfaces": ["heating", "temperaturesensor", "connectable"],
|
||||
"paramTypes": [
|
||||
{
|
||||
"id": "05714e5c-d66a-4095-bbff-a0eb96fb035b",
|
||||
"name":"ipAddress",
|
||||
"displayName": "IP address",
|
||||
"type": "QString"
|
||||
}
|
||||
],
|
||||
"stateTypes":[
|
||||
{
|
||||
"id": "cfd71e64-b666-45ef-8db0-8213acd82c5f",
|
||||
"name": "connected",
|
||||
"displayName": "Connected",
|
||||
"displayNameEvent": "Connected changed",
|
||||
"type": "bool",
|
||||
"defaultValue": false,
|
||||
"cached": false
|
||||
},
|
||||
{
|
||||
"id": "33c27167-8e24-4cc5-943c-d17cd03e0f68",
|
||||
"name": "power",
|
||||
"displayName": "Power",
|
||||
"displayNameEvent": "Power changed",
|
||||
"displayNameAction": "Change power",
|
||||
"type": "bool",
|
||||
"defaultValue": 0,
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"id": "f0f596bf-7e45-43ea-b3d4-767b82dd422a",
|
||||
"name": "temperature",
|
||||
"displayName": "Room temperature",
|
||||
"displayNameEvent": "Room temperature changed",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "fcf8e97f-a672-407f-94ae-30df15b310f4",
|
||||
"name": "waterTemperature",
|
||||
"displayName": "Water temperature",
|
||||
"displayNameEvent": "Water temperature changed",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "9f3462c2-7c42-4eeb-afc4-092e1e41a25d",
|
||||
"name": "outsideAirTemperature",
|
||||
"displayName": "Outside air temperature",
|
||||
"displayNameEvent": "Outside air temperature changed",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "efae7493-68c3-4cb9-853c-81011bdf09ca",
|
||||
"name": "targetTemperature",
|
||||
"displayName": "Target room temperature",
|
||||
"displayNameEvent": "Target room temperature changed",
|
||||
"displayNameAction": "Change room target temperature",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"minValue": 14.00,
|
||||
"maxValue": 26.00,
|
||||
"defaultValue": 22.00,
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"id": "746244d6-dd37-4af8-b2ae-a7d8463e51e2",
|
||||
"name": "targetWaterTemperature",
|
||||
"displayName": "Target water temperature",
|
||||
"displayNameEvent": "Target water temperature changed",
|
||||
"displayNameAction": "Change water target temperature",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"minValue": 20.00,
|
||||
"maxValue": 55.00,
|
||||
"defaultValue": 46.00,
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"id": "e539366b-44da-4119-b11b-497bcdb1f522",
|
||||
"name": "mode",
|
||||
"displayName": "Mode",
|
||||
"displayNameEvent": "Mode changed",
|
||||
"type": "QString",
|
||||
"defaultValue": "Off",
|
||||
"possibleValues": [
|
||||
"Off",
|
||||
"Heating",
|
||||
"Cooling",
|
||||
"Hot water",
|
||||
"Defrost"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "49fd83ee-ddf3-4477-9ee4-e01c53283b43",
|
||||
"name": "error",
|
||||
"displayName": "Error",
|
||||
"displayNameEvent": "Error changed",
|
||||
"type": "bool",
|
||||
"defaultValue": false
|
||||
}
|
||||
],
|
||||
"actionTypes": [
|
||||
{
|
||||
"id": "29b65c13-46e9-49b1-970a-68252bdfeadc",
|
||||
"name": "externTemperature",
|
||||
"displayName": "Extern temperature",
|
||||
"paramTypes" : [
|
||||
{
|
||||
"id": "d60fcb0c-19b5-4cac-9b95-a1b414518385",
|
||||
"name": "temperature",
|
||||
"displayName": "Temperature",
|
||||
"type": "double",
|
||||
"defaultValue": 0,
|
||||
"unit": "DegreeCelsius"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "046f2e72-899a-4d82-91d3-fd268c784a1c",
|
||||
"name": "externHumidity",
|
||||
"displayName": "Extern humidity",
|
||||
"paramTypes" : [
|
||||
{
|
||||
"id": "034b9a8c-1a5a-45da-8422-393273d0a159",
|
||||
"name": "humidity",
|
||||
"displayName": "humidity",
|
||||
"type": "int",
|
||||
"defaultValue": 0,
|
||||
"minValue": 0,
|
||||
"maxValue": 100,
|
||||
"unit": "Percentage"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "87633d1f-3826-4bf0-9a2c-46a927446eb5",
|
||||
"name": "pvEnergy",
|
||||
"displayName": "Set avilable PV Energy",
|
||||
"paramTypes" : [
|
||||
{
|
||||
"id": "84b251ab-33b5-45e5-9a5c-468e3affe821",
|
||||
"name": "energy",
|
||||
"displayName": "Energy",
|
||||
"type": "double",
|
||||
"defaultValue": 0.00,
|
||||
"minValue": 0.00,
|
||||
"unit": "KiloWatt"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"title": "iDM",
|
||||
"tagline": "Control iDM network enabled heat pumps.",
|
||||
"icon": "idm.png",
|
||||
"stability": "consumer",
|
||||
"offline": true,
|
||||
"technologies": [
|
||||
"network"
|
||||
],
|
||||
"categories": [
|
||||
"heating"
|
||||
]
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ PLUGIN_DIRS = \
|
|||
mypv \
|
||||
sunspec \
|
||||
unipi \
|
||||
idm \
|
||||
wallbe \
|
||||
webasto \
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue