Merge PR #255: New Plugin: Generic Things

pull/1/head
Jenkins nymea 2020-06-09 18:19:22 +02:00
commit 7be71df04c
15 changed files with 1649 additions and 613 deletions

5
debian/changelog vendored
View File

@ -1,3 +1,8 @@
nymea-plugins (0.21.0) UNRELEASED; urgency=medium
-- Michael Zanetti <michael.zanetti@guh.io> Thu, 09 Apr 2020 18:20:40 +0200
nymea-plugins (0.20.0) xenial; urgency=medium

18
debian/control vendored
View File

@ -357,19 +357,18 @@ Description: nymea.io plugin for genericelements
This package will install the nymea.io plugin for genericelements
Package: nymea-plugin-genericinterfaces
Package: nymea-plugin-genericthings
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
nymea-plugins-translations,
Description: nymea.io plugin for generic interfaces
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.
Replaces: nymea-plugin-genericinterfaces
Conflicts: nymea-plugin-genericinterfaces
Description: nymea.io plugin for generic things
Use the generic things plugin to create visually appealing thing setups
containing lights, shutter, sensors etc which are connected to GPIOs.
.
This package will install the nymea.io plugin for generic interfaces
This package will install the nymea.io plugin for genericthings
Package: nymea-plugin-gpio
@ -1031,6 +1030,7 @@ Depends: nymea-plugin-anel,
nymea-plugin-doorbird,
nymea-plugin-eq-3,
nymea-plugin-flowercare,
nymea-plugin-genericthings,
nymea-plugin-kodi,
nymea-plugin-lgsmarttv,
nymea-plugin-mailnotification,
@ -1074,8 +1074,6 @@ Depends: nymea-plugin-boblight,
nymea-plugin-udpcommander,
nymea-plugin-tcpcommander,
nymea-plugin-httpcommander,
nymea-plugin-genericelements,
nymea-plugin-genericinterfaces,
nymea-plugin-avahimonitor,
nymea-plugin-anel,
nymea-plugin-gpio,

View File

@ -1 +1 @@
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationplugingenericinterfaces.so
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationplugingenericthings.so

View File

@ -1,12 +0,0 @@
include(../plugins.pri)
TARGET = $$qtLibraryTarget(nymea_integrationplugingenericinterfaces)
SOURCES += \
integrationplugingenericinterfaces.cpp
HEADERS += \
integrationplugingenericinterfaces.h

View File

@ -1,162 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*!
\page genericinterfaces.html
\title Generic interfaces
\brief Common interfaces to test the rule engine.
\ingroup plugins
\ingroup nymea-tests
The generic interfaces plugin allows you create virtual buttons, which can be connected with a rule. This gives you
the possibility to execute multiple \l{Action}{Actions} with one signal. Without a rule this generic interfaces are
useless.
\chapter Plugin properties
Following JSON file contains the definition and the description of all available \l{ThingClass}{DeviceClasses}
and \l{Vendor}{Vendors} of this \l{DevicePlugin}.
For more details how to read this JSON file please check out the documentation for \l{The plugin JSON File}.
\quotefile plugins/deviceplugins/genericinterfaces/deviceplugingenericinterfaces.json
*/
#include "integrationplugingenericinterfaces.h"
#include "plugininfo.h"
#include <QDebug>
IntegrationPluginGenericInterfaces::IntegrationPluginGenericInterfaces()
{
}
void IntegrationPluginGenericInterfaces::setupThing(ThingSetupInfo *info)
{
info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginGenericInterfaces::executeAction(ThingActionInfo *info)
{
Thing *thing = info->thing();
Action action = info->action();
if (thing->thingClassId() == awningThingClassId) {
if (action.actionTypeId() == awningOpenActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Opening");
thing->setStateValue(awningClosingOutputStateTypeId, false);
thing->setStateValue(awningOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningStopActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Stopped");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningCloseActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Closing");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == blindThingClassId ) {
if (action.actionTypeId() == blindOpenActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Opening");
thing->setStateValue(blindClosingOutputStateTypeId, false);
thing->setStateValue(blindOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindStopActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Stopped");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindCloseActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Closing");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == shutterThingClassId) {
if (action.actionTypeId() == shutterOpenActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Opening");
thing->setStateValue(shutterClosingOutputStateTypeId, false);
thing->setStateValue(shutterOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterStopActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterCloseActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Closing");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == socketThingClassId) {
if (action.actionTypeId() == socketPowerActionTypeId) {
thing->setStateValue(socketPowerStateTypeId, action.param(socketPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == lightThingClassId) {
if (action.actionTypeId() == lightPowerActionTypeId) {
thing->setStateValue(lightPowerStateTypeId, action.param(lightPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == heatingThingClassId) {
if (action.actionTypeId() == heatingPowerActionTypeId) {
thing->setStateValue(heatingPowerStateTypeId, action.param(heatingPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
return info->finish(Thing::ThingErrorThingClassNotFound);
}

View File

@ -1,236 +0,0 @@
{
"name": "GenericInterfaces",
"displayName": "Generic Interfaces",
"id": "b3188696-2585-4806-bf98-30ab576ce5c8",
"vendors": [
{
"name": "nymea",
"displayName": "nymea",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"thingClasses": [
{
"id": "9e69585f-90ba-44e4-ad90-5b4bffbe345a",
"name": "awning",
"displayName": "Awning interface",
"createMethods": ["user"],
"interfaces": ["awning"],
"stateTypes": [
{
"id": "4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "59bfd575-709f-4e43-9726-de26e6d4ca8b",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "ff6f2565-2a2e-4d34-b10f-d3f73b676399",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "979e9c51-5a93-4635-85e3-01874306b229",
"name": "open",
"displayName": "Open"
},
{
"id": "555cafe4-bd12-42c6-bab1-8cd59af6468e",
"name": "stop",
"displayName": "Stop"
},
{
"id": "53b5ba77-9a34-4cd6-ad24-fb01fc465f98",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "17ee3657-6ad8-4ae2-8959-3cf66cec8d13",
"name": "blind",
"displayName": "Blind interface",
"createMethods": ["user"],
"interfaces": ["blind"],
"stateTypes": [
{
"id": "b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "9b673430-572d-4a9c-85d3-dafadbe541cd",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "5fdec1e0-51f6-48b9-b743-ba572504b2c1",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "120dc265-dbbb-4f19-9d31-c372c23479c0",
"name": "open",
"displayName": "Open"
},
{
"id": "1a924c9a-5dcb-4b1c-8fd6-ab101098e007",
"name": "stop",
"displayName": "Stop"
},
{
"id": "86e9cf21-7487-47c4-b4be-4a940d7235fb",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "7917c2e7-d7d2-4c47-a38d-41f7dd7693d9",
"name": "shutter",
"displayName": "Shutter interface",
"createMethods": ["user"],
"interfaces": ["shutter"],
"stateTypes": [
{
"id": "cc547728-b309-4695-b355-49748ef2521c",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "1c35df0e-4c41-455f-893a-0145377952a0",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"type": "bool",
"defaultValue": false
},
{
"id": "6d6e72dc-4d2b-4ec1-82c2-54405a682711",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "9deb662d-2378-4345-a898-8742d41e43c1",
"name": "open",
"displayName": "Open"
},
{
"id": "db5f3332-1f4e-4f9e-84d2-93c5d7de315c",
"name": "stop",
"displayName": "Stop"
},
{
"id": "cf5303f1-67c7-4cef-b11c-eb9de6fc8a87",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "4e7261af-a27b-4446-8346-914ea59f7547",
"name": "socket",
"displayName": "Socket interface",
"createMethods": ["user"],
"interfaces": ["powersocket"],
"stateTypes": [
{
"id": "018038d7-1d02-4b17-8fe3-babca044b087",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true
}
]
},
{
"id": "c50d3216-f307-4f9f-8190-4391510c385c",
"name": "light",
"displayName": "Light interface",
"createMethods": ["user"],
"interfaces": ["light"],
"stateTypes": [
{
"id": "8b6e4a67-6522-408b-b676-8d2f09ed2d54",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true
}
]
},
{
"id": "392854c4-3d14-4cf8-96cd-d933526bd197",
"name": "heating",
"displayName": "Heating interface",
"createMethods": ["user"],
"interfaces": ["heating"],
"stateTypes": [
{
"id": "409b635e-a754-4b5c-b3f0-d1c5a0fb3f03",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true
}
]
}
]
}
]
}

View File

@ -1,185 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>GenericInterfaces</name>
<message>
<source>Awning interface</source>
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Blind interface</source>
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close</source>
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
----------
The name of the ActionType ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
----------
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
----------
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the StateType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing output changed</source>
<extracomment>The name of the EventType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the EventType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic Interfaces</source>
<extracomment>The name of the plugin GenericInterfaces ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Heating interface</source>
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Light interface</source>
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Opening output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the StateType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: heating, ActionType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the ParamType (ThingClass: heating, EventType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the StateType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ParamType (ThingClass: light, ActionType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the ParamType (ThingClass: light, EventType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the StateType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the ParamType (ThingClass: socket, EventType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power changed</source>
<extracomment>The name of the EventType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the EventType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ActionType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ActionType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Shutter interface</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Socket interface</source>
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: status, ID: {6d6e72dc-4d2b-4ec1-82c2-54405a682711})
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: status, ID: {ff6f2565-2a2e-4d34-b10f-d3f73b676399})
----------
The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

39
genericthings/README.md Normal file
View File

@ -0,0 +1,39 @@
# Generic things
This plugin allows to create virtual generic things in nymea. Such things don't have any
functionality on their own, but allow to create a visually appealing experience when
using general purpose input and outputs, such as GPIOs.
## Set-up
First, set up a thing with generic inputs or outputs. For instance from the GPIO plugin.
When done, set up the desired generic thing and use the things settings to connect
the inputs and/or outputs accordingly.
### Example: A light switch on a digital output GPIO
First, set up the GPIO to control the light. Please refer to the documentation of the
according plugin for this. Once the lights can be controlled by nymea using the raw
GPIO toggle, set up a generic light from this plugin and go to the settings of the
newly added generic light. In there, you'll find a section for Input/Output connections
which can be used to connect the power state of this generic light to the GPIO that
actually controls the light. The light can now be used like any other ready-made light
device in nymea.
### Example: A soil moisture sensor on an analog input GPIO
First, set up the GPIO to receive the analog GPIO values from the sensor. Normally
such an analog input GPIO will dispatch values from 0V to e.g. 3.3V, depending on the
hardware. An input value of 0V normally refers to a soil moisture value of 0%, while
an input value of 3.3V would refer to the maximum, that is 100% soil moisture. Once
those input values are received in nymea, set up a generic soil moisture thing and
go to its settings. In there you'll find the Input/Output connections section which
allows to map this generic soil moisture sensure to the according GPIO input. Once
this connection has been made, the generic soil moisture thing will represent the
input from the GPIO in a nice sensor view.
Some sensors might not support the full range from 0% to 100% and might output
a value of 0V on a minimum soil moisture of e.g. 10% or might only be able to
measure the soil moisture up to, say, 90%. Normally the sensor hardware would give
that information in the data sheet or user guide. If this is the case, the appropriate
input range can also be defined in the generic moisture sensor page.

View File

@ -0,0 +1,12 @@
include(../plugins.pri)
TARGET = $$qtLibraryTarget(nymea_integrationplugingenericthings)
SOURCES += \
integrationplugingenericthings.cpp
HEADERS += \
integrationplugingenericthings.h

View File

@ -0,0 +1,307 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*!
\page genericinterfaces.html
\title Generic interfaces
\brief Common interfaces to test the rule engine.
\ingroup plugins
\ingroup nymea-tests
The generic interfaces plugin allows you create virtual buttons, which can be connected with a rule. This gives you
the possibility to execute multiple \l{Action}{Actions} with one signal. Without a rule this generic interfaces are
useless.
\chapter Plugin properties
Following JSON file contains the definition and the description of all available \l{ThingClass}{DeviceClasses}
and \l{Vendor}{Vendors} of this \l{DevicePlugin}.
For more details how to read this JSON file please check out the documentation for \l{The plugin JSON File}.
\quotefile plugins/deviceplugins/genericinterfaces/deviceplugingenericinterfaces.json
*/
#include "integrationplugingenericthings.h"
#include "plugininfo.h"
#include <QDebug>
#include <QtMath>
IntegrationPluginGenericThings::IntegrationPluginGenericThings()
{
}
void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info)
{
info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
{
Thing *thing = info->thing();
Action action = info->action();
if (thing->thingClassId() == awningThingClassId) {
if (action.actionTypeId() == awningOpenActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Opening");
thing->setStateValue(awningClosingOutputStateTypeId, false);
thing->setStateValue(awningOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningStopActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Stopped");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningCloseActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Closing");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningOpeningOutputActionTypeId) {
bool on = action.param(awningOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(awningOpeningOutputStateTypeId, on);
if (on) {
thing->setStateValue(awningStatusStateTypeId, "Opening");
thing->setStateValue(awningClosingOutputStateTypeId, false);
} else {
thing->setStateValue(awningStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningClosingOutputActionTypeId) {
bool on = action.param(awningClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(awningClosingOutputStateTypeId, on);
if (on) {
thing->setStateValue(awningStatusStateTypeId, "Closing");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
} else {
thing->setStateValue(awningStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == blindThingClassId ) {
if (action.actionTypeId() == blindOpenActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Opening");
thing->setStateValue(blindClosingOutputStateTypeId, false);
thing->setStateValue(blindOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindStopActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Stopped");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindCloseActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Closing");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindOpeningOutputActionTypeId) {
bool on = action.param(blindOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(blindOpeningOutputStateTypeId, on);
if (on) {
thing->setStateValue(blindStatusStateTypeId, "Opening");
thing->setStateValue(blindClosingOutputStateTypeId, false);
} else {
thing->setStateValue(blindStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindClosingOutputActionTypeId) {
bool on = action.param(blindClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(blindClosingOutputStateTypeId, on);
if (on) {
thing->setStateValue(blindStatusStateTypeId, "Closing");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
} else {
thing->setStateValue(blindStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == shutterThingClassId) {
if (action.actionTypeId() == shutterOpenActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Opening");
thing->setStateValue(shutterClosingOutputStateTypeId, false);
thing->setStateValue(shutterOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterStopActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterCloseActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Closing");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterOpeningOutputActionTypeId) {
bool on = action.param(shutterOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(shutterOpeningOutputStateTypeId, on);
if (on) {
thing->setStateValue(shutterStatusStateTypeId, "Opening");
thing->setStateValue(shutterClosingOutputStateTypeId, false);
} else {
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterClosingOutputActionTypeId) {
bool on = action.param(shutterClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(shutterClosingOutputStateTypeId, on);
if (on) {
thing->setStateValue(shutterStatusStateTypeId, "Closing");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
} else {
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == socketThingClassId) {
if (action.actionTypeId() == socketPowerActionTypeId) {
thing->setStateValue(socketPowerStateTypeId, action.param(socketPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == lightThingClassId) {
if (action.actionTypeId() == lightPowerActionTypeId) {
thing->setStateValue(lightPowerStateTypeId, action.param(lightPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == heatingThingClassId) {
if (action.actionTypeId() == heatingPowerActionTypeId) {
thing->setStateValue(heatingPowerStateTypeId, action.param(heatingPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == powerSwitchThingClassId) {
if (action.actionTypeId() == powerSwitchPowerActionTypeId) {
thing->setStateValue(powerSwitchPowerStateTypeId, action.param(powerSwitchPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (thing->thingClassId() == irrigationThingClassId) {
if (action.actionTypeId() == irrigationPowerActionTypeId) {
thing->setStateValue(irrigationPowerStateTypeId, action.param(irrigationPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (thing->thingClassId() == ventilationThingClassId) {
if (action.actionTypeId() == ventilationPowerActionTypeId) {
thing->setStateValue(ventilationPowerStateTypeId, action.param(ventilationPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (thing->thingClassId() == temperatureSensorThingClassId) {
if (action.actionTypeId() == temperatureSensorInputActionTypeId) {
double value = info->action().param(temperatureSensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(temperatureSensorInputStateTypeId, value);
double min = info->thing()->setting(temperatureSensorSettingsMinTempParamTypeId).toDouble();
double max = info->thing()->setting(temperatureSensorSettingsMaxTempParamTypeId).toDouble();
double newValue = mapDoubleValue(value, 0, 1, min, max);
double roundingFactor = qPow(10, info->thing()->setting(temperatureSensorSettingsAccuracyParamTypeId).toInt());
newValue = qRound(newValue * roundingFactor) / roundingFactor;
thing->setStateValue(temperatureSensorTemperatureStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (thing->thingClassId() == humiditySensorThingClassId) {
if (action.actionTypeId() == humiditySensorInputActionTypeId) {
double value = info->action().param(humiditySensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(humiditySensorInputStateTypeId, value);
double min = info->thing()->setting(humiditySensorSettingsMinHumidityParamTypeId).toDouble();
double max = info->thing()->setting(humiditySensorSettingsMaxHumidityParamTypeId).toDouble();
double newValue = mapDoubleValue(value, 0, 100, min, max);
double roundingFactor = qPow(10, info->thing()->setting(humiditySensorSettingsAccuracyParamTypeId).toInt());
newValue = qRound(newValue * roundingFactor) / roundingFactor;
thing->setStateValue(humiditySensorHumidityStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
}
}
if (thing->thingClassId() == moistureSensorThingClassId) {
if (action.actionTypeId() == moistureSensorInputActionTypeId) {
double value = info->action().param(moistureSensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(moistureSensorInputStateTypeId, value);
double min = info->thing()->setting(moistureSensorSettingsMinMoistureParamTypeId).toDouble();
double max = info->thing()->setting(moistureSensorSettingsMaxMoistureParamTypeId).toDouble();
double newValue = mapDoubleValue(value, 0, 100, min, max);
double roundingFactor = qPow(10, info->thing()->setting(moistureSensorSettingsAccuracyParamTypeId).toInt());
newValue = qRound(newValue * roundingFactor) / roundingFactor;
thing->setStateValue(moistureSensorMoistureStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
}
}
return info->finish(Thing::ThingErrorThingClassNotFound);
}
double IntegrationPluginGenericThings::mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax)
{
double percent = (value - fromMin) / (fromMax - fromMin);
double toValue = toMin + (toMax - toMin) * percent;
return toValue;
}

View File

@ -28,22 +28,25 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef INTEGRATIONPLUGINGENERICINTERFACES_H
#define INTEGRATIONPLUGINGENERICINTERFACES_H
#ifndef INTEGRATIONPLUGINGENERICTHINGS_H
#define INTEGRATIONPLUGINGENERICTHINGS_H
#include "integrations/integrationplugin.h"
class IntegrationPluginGenericInterfaces : public IntegrationPlugin
class IntegrationPluginGenericThings: public IntegrationPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationplugingenericinterfaces.json")
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationplugingenericthings.json")
Q_INTERFACES(IntegrationPlugin)
public:
explicit IntegrationPluginGenericInterfaces();
explicit IntegrationPluginGenericThings();
void setupThing(ThingSetupInfo *info) override;
void executeAction(ThingActionInfo *info) override;
private:
double mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax);
};
#endif // INTEGRATIONPLUGINGENERICINTERFACES_H
#endif // INTEGRATIONPLUGINGENERICTHINGS_H

View File

@ -0,0 +1,495 @@
{
"name": "GenericThings",
"displayName": "Generic Things",
"id": "b3188696-2585-4806-bf98-30ab576ce5c8",
"vendors": [
{
"name": "nymea",
"displayName": "nymea",
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
"thingClasses": [
{
"id": "9e69585f-90ba-44e4-ad90-5b4bffbe345a",
"name": "awning",
"displayName": "Generic awning",
"createMethods": ["user"],
"interfaces": ["awning"],
"stateTypes": [
{
"id": "4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"displayNameAction": "Set opening output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "59bfd575-709f-4e43-9726-de26e6d4ca8b",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"displayNameAction": "Set closing output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "ff6f2565-2a2e-4d34-b10f-d3f73b676399",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "979e9c51-5a93-4635-85e3-01874306b229",
"name": "open",
"displayName": "Open"
},
{
"id": "555cafe4-bd12-42c6-bab1-8cd59af6468e",
"name": "stop",
"displayName": "Stop"
},
{
"id": "53b5ba77-9a34-4cd6-ad24-fb01fc465f98",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "17ee3657-6ad8-4ae2-8959-3cf66cec8d13",
"name": "blind",
"displayName": "Generic blind",
"createMethods": ["user"],
"interfaces": ["blind"],
"stateTypes": [
{
"id": "b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"displayNameAction": "Set opening output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "9b673430-572d-4a9c-85d3-dafadbe541cd",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"displayNameAction": "Set closing output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "5fdec1e0-51f6-48b9-b743-ba572504b2c1",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "120dc265-dbbb-4f19-9d31-c372c23479c0",
"name": "open",
"displayName": "Open"
},
{
"id": "1a924c9a-5dcb-4b1c-8fd6-ab101098e007",
"name": "stop",
"displayName": "Stop"
},
{
"id": "86e9cf21-7487-47c4-b4be-4a940d7235fb",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "7917c2e7-d7d2-4c47-a38d-41f7dd7693d9",
"name": "shutter",
"displayName": "Generic shutter",
"createMethods": ["user"],
"interfaces": ["shutter"],
"stateTypes": [
{
"id": "cc547728-b309-4695-b355-49748ef2521c",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"displayNameAction": "Set opening output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "1c35df0e-4c41-455f-893a-0145377952a0",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"displayNameAction": "Set closing output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "6d6e72dc-4d2b-4ec1-82c2-54405a682711",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
}
],
"actionTypes": [
{
"id": "9deb662d-2378-4345-a898-8742d41e43c1",
"name": "open",
"displayName": "Open"
},
{
"id": "db5f3332-1f4e-4f9e-84d2-93c5d7de315c",
"name": "stop",
"displayName": "Stop"
},
{
"id": "cf5303f1-67c7-4cef-b11c-eb9de6fc8a87",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "4e7261af-a27b-4446-8346-914ea59f7547",
"name": "socket",
"displayName": "Generic power socket",
"createMethods": ["user"],
"interfaces": ["powersocket"],
"stateTypes": [
{
"id": "018038d7-1d02-4b17-8fe3-babca044b087",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "c50d3216-f307-4f9f-8190-4391510c385c",
"name": "light",
"displayName": "Generic light",
"createMethods": ["user"],
"interfaces": ["light"],
"stateTypes": [
{
"id": "8b6e4a67-6522-408b-b676-8d2f09ed2d54",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "392854c4-3d14-4cf8-96cd-d933526bd197",
"name": "heating",
"displayName": "Generic heating",
"createMethods": ["user"],
"interfaces": ["heating"],
"stateTypes": [
{
"id": "409b635e-a754-4b5c-b3f0-d1c5a0fb3f03",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "57daa147-dd6f-4673-a757-d8f01a2054c7",
"name": "powerSwitch",
"displayName": "Generic power switch",
"createMethods": ["user"],
"interfaces": ["power"],
"stateTypes": [
{
"id": "08087af6-6a3b-4e4a-ac6d-56f23ce63edf",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Powered on/off",
"displayNameAction": "Power on/off",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "d013b980-20d5-4791-9c4f-b411c39241d7",
"name": "irrigation",
"displayName": "Generic irrigation",
"createMethods": ["user"],
"interfaces": ["irrigation"],
"stateTypes": [
{
"id": "0212a287-c5ae-4644-8803-adfdd8caeb9a",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Turned on or off",
"displayNameAction": "Turn on or off",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "24af8dd3-ddf0-47f0-bf09-70fdfd8dceab",
"name": "ventilation",
"displayName": "Generic ventilation",
"createMethods": ["user"],
"interfaces": ["ventilation"],
"stateTypes": [
{
"id": "846711b7-ea5a-4c66-a267-001c60406509",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Turned on or off",
"displayNameAction": "Turn on or off",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalInput"
}
]
},
{
"id": "cf3d65db-6f68-457b-968c-cfb66cbd5311",
"name": "temperatureSensor",
"displayName": "Generic temperature sensor",
"createMethods": ["user"],
"interfaces": ["temperaturesensor"],
"settingsTypes": [
{
"id": "c86ae5d3-9335-4b6e-8231-bf3ed6670dff",
"name": "minTemp",
"displayName": "Minimum temperature",
"type": "double",
"defaultValue": -20,
"unit": "DegreeCelsius"
},
{
"id": "8b5947ab-127f-4995-853b-eeeb628811e3",
"name": "maxTemp",
"displayName": "Maximum temperature",
"type": "double",
"defaultValue": 50,
"unit": "DegreeCelsius"
},
{
"id": "3b543c3a-1fc0-45b5-8c07-600a6045f82e",
"name": "accuracy",
"displayName": "Accuracy (decimal places)",
"type": "uint",
"minValue": 0,
"maxValue": 5,
"defaultValue": 1
}
],
"stateTypes": [
{
"id": "d0b6c4be-339e-4b0f-a234-0611b7565395",
"name": "temperature",
"displayName": "Temperature",
"displayNameEvent": "Temperature changed",
"type": "double",
"unit": "DegreeCelsius",
"defaultValue": 0
},
{
"id": "fed37466-1264-4ac1-84fd-aff3a1f7ff04",
"name": "input",
"displayName": "Input value",
"displayNameEvent": "Input value changed",
"displayNameAction": "Set input value",
"type": "double",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1,
"writable": true,
"ioType": "analogOutput"
}
]
},
{
"id": "d295bc64-773c-42a9-83e2-80db5fa0d1ce",
"name": "humiditySensor",
"displayName": "Generic humidity sensor",
"createMethods": ["user"],
"interfaces": ["humiditysensor"],
"settingsTypes": [
{
"id": "0218ffa9-3d49-4b25-a59f-c8831f190432",
"name": "minHumidity",
"displayName": "Minimum humidity",
"type": "double",
"defaultValue": 0,
"unit": "Percentage"
},
{
"id": "10afc387-68d1-47ea-a816-0d1acad47b3c",
"name": "maxHumidity",
"displayName": "Maximum humidity",
"type": "double",
"defaultValue": 100,
"unit": "Percentage"
},
{
"id": "38064841-6121-4862-a639-08fb0b778511",
"name": "accuracy",
"displayName": "Accuracy (decimal places)",
"type": "uint",
"minValue": 0,
"maxValue": 5,
"defaultValue": 1
}
],
"stateTypes": [
{
"id": "925225d9-2965-444a-9c42-63c2873700fb",
"name": "humidity",
"displayName": "Humidity",
"displayNameEvent": "Humidity changed",
"type": "double",
"unit": "Percentage",
"defaultValue": 0,
"minValue": 0,
"maxValue": 100
},
{
"id": "a8223e65-e704-4f84-9bbe-d8fc42597047",
"name": "input",
"displayName": "Input value",
"displayNameEvent": "Input value changed",
"displayNameAction": "Set input value",
"type": "double",
"defaultValue": 0,
"minValue": 0,
"maxValue": 100,
"writable": true,
"ioType": "analogOutput"
}
]
},
{
"id": "33e610cf-ff30-481b-9f0b-d6857bcd41a5",
"name": "moistureSensor",
"displayName": "Generic soil moisture sensor",
"createMethods": ["user"],
"interfaces": ["moisturesensor"],
"settingsTypes": [
{
"id": "32153786-f1ae-4aa4-a84c-b9054102eb92",
"name": "minMoisture",
"displayName": "Minimum moisture",
"type": "double",
"defaultValue": 0,
"unit": "Percentage"
},
{
"id": "3426817d-065e-4cfc-aa21-bb434de684d6",
"name": "maxMoisture",
"displayName": "Maximum moisture",
"type": "double",
"defaultValue": 100,
"unit": "Percentage"
},
{
"id": "3c967a68-9951-4c9a-b019-79b913e762b6",
"name": "accuracy",
"displayName": "Accuracy (decimal places)",
"type": "uint",
"minValue": 0,
"maxValue": 5,
"defaultValue": 1
}
],
"stateTypes": [
{
"id": "7a62e1d2-92f2-424c-876c-870478a4b2bd",
"name": "moisture",
"displayName": "Soil moisture",
"displayNameEvent": "Soil moisture changed",
"type": "double",
"unit": "Percentage",
"minValue": 0,
"maxValue": 100,
"defaultValue": 0
},
{
"id": "ce64a425-d990-4fc1-966b-be6de445792b",
"name": "input",
"displayName": "Input value",
"displayNameEvent": "Input value changed",
"displayNameAction": "Set input value",
"type": "double",
"defaultValue": 0,
"minValue": 0,
"maxValue": 100,
"writable": true,
"ioType": "analogOutput"
}
]
}
]
}
]
}

View File

@ -0,0 +1,386 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>GenericThings</name>
<message>
<source>Close</source>
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
----------
The name of the ActionType ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
----------
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
<translation>Schließen</translation>
</message>
<message>
<source>Closing output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
----------
The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
----------
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, ActionType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the ParamType (ThingClass: awning, EventType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the StateType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Schließender Ausgang</translation>
</message>
<message>
<source>Closing output changed</source>
<extracomment>The name of the EventType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the EventType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Schließender Ausgang geändert</translation>
</message>
<message>
<source>Generic Things</source>
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
<translation>Generische &quot;Things&quot;</translation>
</message>
<message>
<source>Generic awning</source>
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
<translation>Generische Markise</translation>
</message>
<message>
<source>Generic blind</source>
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation>Generischer Sichtschutz</translation>
</message>
<message>
<source>Generic heating</source>
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
<translation>Generische Heizung</translation>
</message>
<message>
<source>Generic humidity sensor</source>
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
<translation>Generischer Feuchtigkeitssensor</translation>
</message>
<message>
<source>Generic light</source>
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
<translation>Generisches Licht</translation>
</message>
<message>
<source>Generic power socket</source>
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
<translation>Generische Steckdose</translation>
</message>
<message>
<source>Generic power switch</source>
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</extracomment>
<translation>Generischer Ein-/Ausschalter</translation>
</message>
<message>
<source>Generic soil moisture sensor</source>
<extracomment>The name of the ThingClass ({33e610cf-ff30-481b-9f0b-d6857bcd41a5})</extracomment>
<translation>Generischer Erdfeuchtigkeitssensor</translation>
</message>
<message>
<source>Generic temperature sensor</source>
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</extracomment>
<translation>Generischer Temperatursensor</translation>
</message>
<message>
<source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, EventType: humidity, ID: {925225d9-2965-444a-9c42-63c2873700fb})
----------
The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation>Luftfeuchtigkeit</translation>
</message>
<message>
<source>Humidity changed</source>
<extracomment>The name of the EventType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation>Luftfeuchtigkeit geändert</translation>
</message>
<message>
<source>Maximum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {10afc387-68d1-47ea-a816-0d1acad47b3c})</extracomment>
<translation>Maximale Luftfeuchtigkeit</translation>
</message>
<message>
<source>Maximum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3426817d-065e-4cfc-aa21-bb434de684d6})</extracomment>
<translation>Maximale Feuchtigkeit</translation>
</message>
<message>
<source>Maximum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {8b5947ab-127f-4995-853b-eeeb628811e3})</extracomment>
<translation>Maximale Temperatur</translation>
</message>
<message>
<source>Minimum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {0218ffa9-3d49-4b25-a59f-c8831f190432})</extracomment>
<translation>Minimale Luftfeuchtigkeit</translation>
</message>
<message>
<source>Minimum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {32153786-f1ae-4aa4-a84c-b9054102eb92})</extracomment>
<translation>Minimale Feuchtigkeit</translation>
</message>
<message>
<source>Minimum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {c86ae5d3-9335-4b6e-8231-bf3ed6670dff})</extracomment>
<translation>Maximale Temperatur</translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
<translation>Geöffnet</translation>
</message>
<message>
<source>Opening output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, ActionType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the StateType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the ParamType (ThingClass: awning, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffnender Ausgang</translation>
</message>
<message>
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffnender Ausgang geändert</translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the ParamType (ThingClass: irrigation, EventType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the StateType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation
----------
The name of the ParamType (ThingClass: powerSwitch, ActionType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the ParamType (ThingClass: powerSwitch, EventType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the StateType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch
----------
The name of the ParamType (ThingClass: heating, ActionType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the ParamType (ThingClass: heating, EventType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the StateType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ParamType (ThingClass: light, ActionType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the ParamType (ThingClass: light, EventType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the StateType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the ParamType (ThingClass: socket, EventType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Einschalten</translation>
</message>
<message>
<source>Power changed</source>
<extracomment>The name of the EventType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the EventType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<source>Power on/off</source>
<extracomment>The name of the ActionType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Powered on/off</source>
<extracomment>The name of the EventType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ActionType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ActionType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Soil moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, EventType: moisture, ID: {7a62e1d2-92f2-424c-876c-870478a4b2bd})
----------
The name of the StateType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Feuchtigkeit</translation>
</message>
<message>
<source>Soil moisture changed</source>
<extracomment>The name of the EventType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Feuchtigkeit geändert</translation>
</message>
<message>
<source>Status</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: status, ID: {6d6e72dc-4d2b-4ec1-82c2-54405a682711})
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: status, ID: {ff6f2565-2a2e-4d34-b10f-d3f73b676399})
----------
The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Zustand</translation>
</message>
<message>
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Zustand geändert</translation>
</message>
<message>
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
<translation>Stop</translation>
</message>
<message>
<source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, EventType: temperature, ID: {d0b6c4be-339e-4b0f-a234-0611b7565395})
----------
The name of the StateType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur</translation>
</message>
<message>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur geändert</translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation>nymea</translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation>Generischer Rolladen</translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation>Generische Bewässerung</translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Setze schließenden Ausgang</translation>
</message>
<message>
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Setze öffnenden Ausgang</translation>
</message>
<message>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<source>Input value</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, ActionType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the ParamType (ThingClass: moistureSensor, EventType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the StateType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ParamType (ThingClass: humiditySensor, ActionType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the ParamType (ThingClass: humiditySensor, EventType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the StateType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ParamType (ThingClass: temperatureSensor, ActionType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the ParamType (ThingClass: temperatureSensor, EventType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the StateType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation>Eingangswert</translation>
</message>
<message>
<source>Input value changed</source>
<extracomment>The name of the EventType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the EventType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation>Eingangswert geändert</translation>
</message>
<message>
<source>Set input value</source>
<extracomment>The name of the ActionType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ActionType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ActionType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation>Setze Eingangswert</translation>
</message>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<translation>Genauigkeit (Nachkommastellen)</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,386 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>GenericThings</name>
<message>
<source>Close</source>
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
----------
The name of the ActionType ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
----------
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
----------
The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
----------
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, ActionType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the ParamType (ThingClass: awning, EventType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the StateType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing output changed</source>
<extracomment>The name of the EventType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the EventType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic Things</source>
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic awning</source>
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic blind</source>
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic heating</source>
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic humidity sensor</source>
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic light</source>
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic power socket</source>
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic power switch</source>
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic soil moisture sensor</source>
<extracomment>The name of the ThingClass ({33e610cf-ff30-481b-9f0b-d6857bcd41a5})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic temperature sensor</source>
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, EventType: humidity, ID: {925225d9-2965-444a-9c42-63c2873700fb})
----------
The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Humidity changed</source>
<extracomment>The name of the EventType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {10afc387-68d1-47ea-a816-0d1acad47b3c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3426817d-065e-4cfc-aa21-bb434de684d6})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {8b5947ab-127f-4995-853b-eeeb628811e3})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {0218ffa9-3d49-4b25-a59f-c8831f190432})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {32153786-f1ae-4aa4-a84c-b9054102eb92})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {c86ae5d3-9335-4b6e-8231-bf3ed6670dff})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Opening output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, ActionType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the StateType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the ParamType (ThingClass: awning, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the ParamType (ThingClass: irrigation, EventType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the StateType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation
----------
The name of the ParamType (ThingClass: powerSwitch, ActionType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the ParamType (ThingClass: powerSwitch, EventType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the StateType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch
----------
The name of the ParamType (ThingClass: heating, ActionType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the ParamType (ThingClass: heating, EventType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the StateType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ParamType (ThingClass: light, ActionType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the ParamType (ThingClass: light, EventType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the StateType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the ParamType (ThingClass: socket, EventType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power changed</source>
<extracomment>The name of the EventType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the EventType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power on/off</source>
<extracomment>The name of the ActionType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Powered on/off</source>
<extracomment>The name of the EventType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ActionType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ActionType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soil moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, EventType: moisture, ID: {7a62e1d2-92f2-424c-876c-870478a4b2bd})
----------
The name of the StateType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soil moisture changed</source>
<extracomment>The name of the EventType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: status, ID: {6d6e72dc-4d2b-4ec1-82c2-54405a682711})
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: status, ID: {ff6f2565-2a2e-4d34-b10f-d3f73b676399})
----------
The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, EventType: temperature, ID: {d0b6c4be-339e-4b0f-a234-0611b7565395})
----------
The name of the StateType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, ActionType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the ParamType (ThingClass: moistureSensor, EventType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the StateType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ParamType (ThingClass: humiditySensor, ActionType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the ParamType (ThingClass: humiditySensor, EventType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the StateType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ParamType (ThingClass: temperatureSensor, ActionType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the ParamType (ThingClass: temperatureSensor, EventType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the StateType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value changed</source>
<extracomment>The name of the EventType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the EventType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set input value</source>
<extracomment>The name of the ActionType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ActionType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ActionType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -22,7 +22,7 @@ PLUGIN_DIRS = \
eq-3 \
flowercare \
genericelements \
genericinterfaces \
genericthings \
gpio \
httpcommander \
intertechno \